From a42d0127881a0bf45cd84b202fb497d84de1e5dd Mon Sep 17 00:00:00 2001 From: Fred KISSIE Date: Fri, 21 Nov 2025 04:48:01 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8load=20logs=20per=20day?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auditLogs/queryRequestAnalytics.ts | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/server/routers/auditLogs/queryRequestAnalytics.ts b/server/routers/auditLogs/queryRequestAnalytics.ts index 234f498b..adf5db4a 100644 --- a/server/routers/auditLogs/queryRequestAnalytics.ts +++ b/server/routers/auditLogs/queryRequestAnalytics.ts @@ -1,4 +1,4 @@ -import { db, requestAuditLog, resources } from "@server/db"; +import { db, requestAuditLog, driver } from "@server/db"; import { registry } from "@server/openApi"; import { NextFunction } from "express"; import { Request, Response } from "express"; @@ -95,11 +95,41 @@ async function query(query: Q) { .groupBy(requestAuditLog.location) .orderBy(desc(totalQ)); + const groupByDayFunction = + driver === "pg" + ? sql`DATE_TRUNC('day', TO_TIMESTAMP(${requestAuditLog.timestamp}))`.as( + "day" + ) + : sql`DATE(${requestAuditLog.timestamp}, 'unixepoch')`.as( + "day" + ); + + const booleanTrue = driver === "pg" ? sql`true` : sql`1`; + const booleanFalse = driver === "pg" ? sql`false` : sql`0`; + + const requestsPerDay = await db + .select({ + day: groupByDayFunction, + allowedCount: + sql`SUM(CASE WHEN ${requestAuditLog.action} = ${booleanTrue} THEN 1 ELSE 0 END)`.as( + "allowed_count" + ), + blockedCount: + sql`SUM(CASE WHEN ${requestAuditLog.action} = ${booleanFalse} THEN 1 ELSE 0 END)`.as( + "blocked_count" + ), + totalCount: sql`COUNT(*)`.as("total_count") + }) + .from(requestAuditLog) + .groupBy(groupByDayFunction) + .orderBy(groupByDayFunction); + return { requestsPerCountry: requestsPerCountry as Array<{ code: string; count: number; }>, + requestsPerDay, totalBlocked: blocked.total, totalRequests: all.total };