import Link from 'next/link' import { redirect } from 'next/navigation' import { getCurrentUser } from '@/lib/session' import { prisma } from '@/lib/prisma' export const dynamic = 'force-dynamic' const STATUS_STYLES: Record = { pending: 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400', running: 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400', success: 'bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400', failed: 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400', cancelled: 'bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400', } export default async function AuditPage() { const user = await getCurrentUser() if (!user) redirect('/login') const runs = await prisma.flowRun.findMany({ where: { user_id: user.id }, orderBy: { started_at: 'desc' }, take: 100, }) return (

Audit Log

Recent write actions executed on this server

{runs.length === 0 ? (
No actions have been run yet.
) : (
{runs.map((run) => { const durationMs = run.ended_at && run.started_at ? run.ended_at.getTime() - run.started_at.getTime() : null return ( ) })}
Command Status Exit Started Duration
{run.flow_key} {run.status} {run.exit_code != null ? run.exit_code : '—'} {run.started_at.toLocaleString()} {durationMs != null ? `${(durationMs / 1000).toFixed(1)}s` : '—'}
)}
) }