import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import { Card, CardContent } from "@/components/ui/card"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { prisma } from "@/lib/prisma"; export default async function EmulatorErrorsPage({ 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.devops"); const params = await searchParams; const page = Math.max(1, Number(params.page) || 1); const perPage = 50; const [errors, total] = await Promise.all([ prisma.emulatorErrors.findMany({ orderBy: { id: "desc" }, skip: (page - 1) * perPage, take: perPage, }), prisma.emulatorErrors.count(), ]); const lastPage = Math.ceil(total / perPage); return (

{total} total errors — showing page {page} of {lastPage}

{errors.length === 0 ? (
{t("noEmulatorErrors")}
) : (
{errors.map((error) => (
#{error.id} {new Date(error.timestamp * 1000).toLocaleString()}
										{Buffer.from(error.stacktrace).toString("utf-8")}
									
))}
)}
{lastPage > 1 && (
{page > 1 && ( Previous )} Page {page} of {lastPage} {page < lastPage && ( Next )}
)}
); }