From 30fd5dc8c9755d3a23af85bcad250922d1228b6e Mon Sep 17 00:00:00 2001 From: Redume Date: Mon, 21 Oct 2024 19:45:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=95=D1=81=D0=BB=D0=B8=20=D1=80=D0=BE=D1=83?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B5=20=D0=B7=D0=B0=D1=80=D0=B5=D0=B3=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD,=20?= =?UTF-8?q?=D1=82=D0=BE=20=D0=B2=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B5=20=D0=BE=D0=BD=20=D0=BD=D0=B5=20=D0=B1=D1=83?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=D1=81=D1=8F.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=9E=D0=A1/?= =?UTF-8?q?=D0=91=D1=80=D0=B0=D1=83=D0=B7=D0=B5=D1=80=D0=B0,=20=D0=B5?= =?UTF-8?q?=D1=81=D0=BB=D0=B8=20=D0=BD=D0=B5=D1=82=20=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20=D1=82=D0=BE=20=D0=B1=D1=83=D0=B4=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=D1=81=D1=8F=20N/A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart/middleware/plausible_analytics.py | 4 ++++ server/main.js | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) 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', }, };