feat(admin): analytics redis cache, shared ops health, ticket queue clarity
CI / check (push) Successful in 29s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m25s
CI / deploy (push) Failing after 10s

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
SimoandCursor committed 2026-07-30 19:57:00 +02:00
1 parent 474de0717b
commit 58fae1f90f
38 files changed
+348 -245

No files matched your search

+38
View File
@@ -0,0 +1,38 @@
import "server-only";
import { prisma } from "@/lib/prisma";
import { rcon } from "@/lib/services/rcon";
export type OpsHealth = {
dbOk: boolean;
dbLatencyMs: number;
emulatorOk: boolean;
onlineUsers: number;
};
/**
* Shared DB + emulator health probe for CommandoCentrum, DevOps, and APIs.
* Emulator = real RCON `ping` (same semantics as CommandoCentrum /public health).
*/
export async function fetchOpsHealth(): Promise<OpsHealth> {
const [db, emulatorOk, onlineUsers] = await Promise.all([
(async () => {
try {
const start = Date.now();
await prisma.$queryRaw`SELECT 1`;
return { dbOk: true, dbLatencyMs: Date.now() - start };
} catch {
return { dbOk: false, dbLatencyMs: 0 };
}
})(),
rcon.send("ping", null).catch(() => false),
prisma.user.count({ where: { online: "1" } }).catch(() => 0),
]);
return {
dbOk: db.dbOk,
dbLatencyMs: db.dbLatencyMs,
emulatorOk: Boolean(emulatorOk),
onlineUsers,
};
}
+19
View File
@@ -0,0 +1,19 @@
import "server-only";
import { prisma } from "@/lib/prisma";
/** Open-queue sizes for dual ticket products (CMS desk vs help-center). */
export async function fetchTicketQueueOpenCounts(): Promise<{
cmsOpen: number;
helpOpen: number;
}> {
const [cmsOpen, helpOpen] = await Promise.all([
prisma.websiteTicket
.count({ where: { status: { not: "closed" } } })
.catch(() => 0),
prisma.websiteHelpCenterTickets
.count({ where: { open: true } })
.catch(() => 0),
]);
return { cmsOpen, helpOpen };
}