import Link from "next/link"; import { Download } from "lucide-react"; import { requireAdmin } from "@/lib/session"; import { getEconomics, parseRange, rangeLabel } from "@/lib/queries/admin"; import { formatBytes, formatNumber, formatPercent, formatUsd } from "@/lib/format"; import { PageHeader } from "@/components/ui/page-header"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableEmpty, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { MarginText, NetworkBadge, Panel, PlanBadge, ProviderBadge, RangeTabs, numCell } from "@/components/admin/primitives"; import { EconomicsChart } from "@/components/admin/charts"; import type { EconRow } from "@/lib/queries/admin"; export const dynamic = "force-dynamic"; function EconTable({ rows, labelHead, renderLabel }: { rows: EconRow[]; labelHead: string; renderLabel: (r: EconRow) => React.ReactNode }) { return ( {labelHead} Requests Success Revenue Upstream Margin GB {rows.length === 0 ? ( No data in this range. ) : ( rows.map((r) => ( {renderLabel(r)} {formatNumber(r.requests)} {formatPercent(r.requests ? (r.successes / r.requests) * 100 : null)} {formatUsd(r.revenue, true)} {formatUsd(r.cost, true)} {formatBytes(r.bytes)} )) )}
); } export default async function AdminUsagePage({ searchParams }: { searchParams: Promise> }) { await requireAdmin(); const sp = await searchParams; const range = parseRange(sp.range); const e = await getEconomics(range); const totals = e.byBucket.reduce((acc, r) => ({ revenue: acc.revenue + r.revenue, cost: acc.cost + r.cost, requests: acc.requests + r.requests }), { revenue: 0, cost: 0, requests: 0 }); return ( <> } /> {e.unit === "hour" ? new Date(r.key).toLocaleString(undefined, { month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" }) : new Date(r.key).toLocaleDateString(undefined, { month: "short", day: "numeric" })}} />
} /> } />
Provider Attempts Successes Success Upstream cost Attributed revenue Margin Cost / success GB {e.byProvider.length === 0 ? ( No attempts in this range. ) : ( e.byProvider.map((p) => ( {formatNumber(p.attempts)} {formatNumber(p.successes)} {formatPercent(p.attempts ? (p.successes / p.attempts) * 100 : null)} {formatUsd(p.cost, true)} {formatUsd(p.attributedRevenue, true)} 0 ? ((p.attributedRevenue - p.cost) / p.attributedRevenue) * 100 : null} /> {formatUsd(p.costPerSuccess, true)} {formatBytes(p.bytes)} )) )}
Organization Plan Requests Success Revenue Upstream Margin GB {e.topCustomers.length === 0 ? ( No customer activity in this range. ) : ( e.topCustomers.map((c) => ( {c.name} {formatNumber(c.requests)} {formatPercent(c.requests ? (c.successes / c.requests) * 100 : null)} {formatUsd(c.revenue, true)} {formatUsd(c.cost, true)} {formatBytes(c.bytes)} )) )}
); }