import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import Link from "@/components/link"; import { readPerformance } from "@/lib/performance-store"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; export default async function PerformancePage({ searchParams, }: { searchParams: Promise>; }) { const { session, permissions } = await getAdminContext(); if (!canAccess(permissions, PERMS.DEVOPS_VIEW, session.user.rank)) redirect("/admin"); const t = await getTranslations("pages.admin.performance"); const params = await searchParams; const kind = params.kind === "public-page" ? "public-page" : "admin-api"; const { samples, shared } = await readPerformance(kind); const query = (typeof params.q === "string" ? params.q : "").slice(0, 100); const refreshParams = new URLSearchParams({ kind, q: query, sort: params.sort === "recent" ? "recent" : "slowest", slow: params.slow === "1" ? "1" : "0", }); const visible = samples.filter( (sample) => `${sample.route} ${sample.operationId}`.includes(query) && (params.slow !== "1" || sample.metrics.durationMs >= 1000), ); visible.sort((a, b) => params.sort === "recent" ? b.at - a.at : b.metrics.durationMs - a.metrics.durationMs, ); return (

{t("title")}

{t("scope")}

DevOps {t("refresh")}

{t(shared ? "shared" : "local")} {t("retention")}

{t("explanation")}

{kind === "public-page" && (

{t("publicBoundary")}

)} {visible.length === 0 ? (

{t("empty")}

) : ( )}
); }