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 };