diff --git a/chart/middleware/plausible_analytics.py b/chart/middleware/plausible_analytics.py index 5e0cca5..6f359d0 100644 --- a/chart/middleware/plausible_analytics.py +++ b/chart/middleware/plausible_analytics.py @@ -2,6 +2,7 @@ import httpx import yaml from user_agents import parse as ua_parse +from http import HTTPStatus config = yaml.safe_load(open('../config.yaml')) @@ -12,6 +13,9 @@ class PlausibleAnalytics: user_agent = request.headers.get('user-agent', 'unknown') user_agent_parsed = ua_parse(user_agent) + if HTTPStatus(response.status_code).is_client_error: + return + event = { "domain": config['analytics']['plausible_domain'], "name": request.url.path or '404 - Not Found', diff --git a/server/main.js b/server/main.js index 633a3d5..15e538c 100644 --- a/server/main.js +++ b/server/main.js @@ -34,13 +34,24 @@ fastify.register(configurationRoutes); fastify.register(HomeRoute); fastify.addHook('onResponse', async (request, reply) => { + const routePart = request.raw.url.split('/') + const routePartFiltered = routePart + .filter(part => part !== '') + .map(part => `${part}/`); + + routePartFiltered.unshift('/'); + if (!config?.['analytics']['work'] ? config?.['analytics']['work'] : false) return; + else if (!fastify.printRoutes().includes(routePartFiltered.at(-1))) return; const userAgent = request.headers['user-agent']; const parser = new UAParser(userAgent); const browser = parser.getBrowser(); const os = parser.getOS(); + const formattedOS = (os.name && os.version) ? `${os.name} ${os.version}` : 'N/A'; + const formattedBrowser = (browser.name && browser.version) ? `${browser.name} ${browser.version}` : 'N/A'; + const event = { domain: config['analytics']['plausible_domain'], name: request.routeOptions.url ? request.routeOptions.url : '404 - Not Found', @@ -48,8 +59,8 @@ fastify.addHook('onResponse', async (request, reply) => { props: { method: request.method, statusCode: reply.statusCode, - browser: `${browser.name} ${browser.version}`, - os: `${os.name} ${os.version}`, + browser: formattedBrowser, + os: formattedOS, source: request.headers['referer'] ? request.headers['referer'] : 'direct', }, };