import { StatusCard } from "@/components/admin/dashboard"; import { prisma } from "@/lib/prisma"; export const dynamic = "force-dynamic"; const CRITICAL = new Set(["critical", "error", "danger"]); // chatlogs_room and commandlogs are @@ignore'd in the schema (no PK), so Prisma // generates no delegate for them โ€” they are read via $queryRaw against the real // emulator columns. alert_logs has a proper delegate (prisma.alertLogs). type ChatlogRoomRow = { room_id: number; user_from_id: number; user_to_id: number; message: string; timestamp: number; }; type CommandlogRow = { user_id: number; timestamp: number; command: string; params: string; succes: string; }; function fromUnix(ts: number | null | undefined): string { if (!ts || Number(ts) <= 0) return "โ€”"; return new Date(Number(ts) * 1000) .toISOString() .slice(0, 16) .replace("T", " "); } function fromDate(d: Date | null | undefined): string { return d ? d.toISOString().slice(0, 16).replace("T", " ") : "โ€”"; } export default async function AdminLogs() { let chatlogs: ChatlogRoomRow[] = []; try { chatlogs = await prisma.$queryRaw` SELECT room_id, user_from_id, user_to_id, message, timestamp FROM chatlogs_room ORDER BY timestamp DESC LIMIT 50 `; } catch { chatlogs = []; } let commandlogs: CommandlogRow[] = []; try { commandlogs = await prisma.$queryRaw` SELECT user_id, timestamp, command, params, succes FROM commandlogs ORDER BY timestamp DESC LIMIT 50 `; } catch { commandlogs = []; } let alertLogs: Awaited> = []; try { alertLogs = await prisma.alertLogs.findMany({ orderBy: { id: "desc" }, take: 50, }); } catch { alertLogs = []; } return (

Logs

Read-only ยท 50 most recent of each.

Room chat ({chatlogs.length})

{chatlogs.length === 0 ? (

No room chat logs.

) : (
{chatlogs.map((c, i) => ( ))}
When Room From To Message
{fromUnix(c.timestamp)} {String(c.room_id)} {String(c.user_from_id)} {c.user_to_id ? String(c.user_to_id) : "โ€”"} {c.message}
)}

Commands ({commandlogs.length})

{commandlogs.length === 0 ? (

No command logs.

) : (
{commandlogs.map((c, i) => ( ))}
When User Command Params OK
{fromUnix(c.timestamp)} {String(c.user_id)} {c.command} {c.params} {c.succes === "yes" ? "OK" : "FAIL"}
)}

Alerts ({alertLogs.length})

{alertLogs.length === 0 ? (

No alert logs.

) : (
{alertLogs.map((a) => ( ))}
When Type Severity Message Read
{fromDate(a.createdAt)} {a.type} {a.severity || "โ€”"} {a.message} {a.isRead ? "read" : "new"}
)}
); }