spb/autoscholar
Public
1import { listWorkers, overviewCounts } from "@autoscholar/core";2import { papers, securityEvents } from "@autoscholar/db";3import { desc, sql } from "drizzle-orm";4import { handler, json } from "@/lib/server/api";5import { db } from "@/lib/server/db";6import { requireAdmin } from "@/lib/server/session";78export const runtime = "nodejs";910export const GET = handler(async (req) => {11 await requireAdmin(req);12 const d = db();13 const counts = await overviewCounts(d);14 const workers = await listWorkers(d);15 const [pubs] = await d.select({ n: sql<number>`count(*)::int` }).from(papers);16 const alerts = await d.select().from(securityEvents).orderBy(desc(securityEvents.createdAt)).limit(10);17 return json({18 runs: counts,19 workers: workers.map((w) => ({20 id: w.id,21 name: w.name,22 status: w.status,23 running: w.running,24 capacity: w.capacity,25 lastHeartbeatAt: w.lastHeartbeatAt,26 })),27 publications: pubs?.n ?? 0,28 alerts,29 });30});31