feat: API analytics dashboard with i18n and theme support

Next.js full-stack analytics dashboard for new-api.
- Direct PostgreSQL readonly queries on logs table
- 5 pages: Dashboard, Rankings, Aggregation, Logs, Detail
- Dark/Light/System theme with CSS variables
- Chinese/English i18n (default Chinese)
- Recharts with dual Y-axis for input/output tokens
- Lucide icons + Motion animations
- Docker + docker-compose with external sinobridge network, port 8019
This commit is contained in:
2026-04-02 12:47:50 +08:00
commit b719b358f8
41 changed files with 3430 additions and 0 deletions

24
app/api/rankings/route.ts Normal file
View File

@@ -0,0 +1,24 @@
import { NextRequest, NextResponse } from "next/server";
import { getUserRanking, getModelRanking, getChannelRanking } from "@/lib/queries";
export async function GET(req: NextRequest) {
const sp = req.nextUrl.searchParams;
const type = sp.get("type") || "user";
const startTs = sp.get("start") ? Number(sp.get("start")) : undefined;
const endTs = sp.get("end") ? Number(sp.get("end")) : undefined;
const limit = sp.get("limit") ? Number(sp.get("limit")) : 50;
let data;
switch (type) {
case "model":
data = await getModelRanking(startTs, endTs, limit);
break;
case "channel":
data = await getChannelRanking(startTs, endTs, limit);
break;
default:
data = await getUserRanking(startTs, endTs, limit);
}
return NextResponse.json(data);
}