Если роут не зарегестрирован, то в аналитике он не будет отображаться. Исправлено отображение ОС/Браузера, если нет данных то будет отображаться N/A

This commit is contained in:
Данил 2024-10-21 19:45:53 +03:00
parent 8b9b1a7b77
commit 30fd5dc8c9
2 changed files with 17 additions and 2 deletions

View file

@ -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',

View file

@ -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',
},
};