44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
const fs = require("fs/promises");
|
|
const { renderChart, makeBarConfig } = require("../lib/stats/charts");
|
|
const { fetchGoAccessJson, groupVisitsByMonth } = require("../lib/stats/goaccess");
|
|
const { loadToolsConfig } = require("../lib/config");
|
|
|
|
async function run({ stat, outputPath, publicPath }) {
|
|
if (!outputPath) {
|
|
throw new Error("outputPath manquant pour unique_visitors_per_month");
|
|
}
|
|
|
|
const toolsConfig = await loadToolsConfig();
|
|
const url = stat.url || toolsConfig.goaccess?.url || "";
|
|
const data = await fetchGoAccessJson(url);
|
|
const months = groupVisitsByMonth(data, { adjustCrawlers: true });
|
|
|
|
const labels = months.map((entry) => entry.month);
|
|
const values = months.map((entry) => entry.visitors);
|
|
|
|
const buffer = await renderChart(
|
|
makeBarConfig({
|
|
labels,
|
|
data: values,
|
|
title: "Visiteurs uniques par mois (hors crawlers)",
|
|
color: "rgba(239, 68, 68, 0.8)",
|
|
}),
|
|
);
|
|
|
|
await fs.writeFile(outputPath, buffer);
|
|
|
|
const latest = months[months.length - 1];
|
|
|
|
return {
|
|
image: publicPath,
|
|
meta: {
|
|
month: latest?.month || null,
|
|
visitors: latest?.visitors || 0,
|
|
},
|
|
};
|
|
}
|
|
|
|
module.exports = { run };
|