'use client'; import { useState } from 'react'; import { AuthGuard } from '@/components/AuthGuard'; import { DashboardLayout } from '@/components/DashboardLayout'; import { useQuery } from '@tanstack/react-query'; import { useAuthStore } from '@/store/authStore'; import { useRouter } from 'next/navigation'; import { useEffect } from 'react'; import { adminApi, AdminProcessingRun } from '@/lib/api'; import { parseUTC } from '@/lib/date-utils'; import { Activity, ChevronLeft, ChevronRight, CheckCircle, XCircle, RefreshCw, } from 'lucide-react'; const STATUS_STYLES: Record = { completed: 'bg-green-100 text-green-800', failed: 'bg-red-100 text-red-800', partial_failure: 'bg-yellow-100 text-yellow-800', running: 'bg-blue-100 text-blue-800', }; function formatDuration(seconds?: number | null): string { if (seconds == null) return '—'; if (seconds < 60) return `${seconds.toFixed(1)}s`; return `${Math.floor(seconds / 60)}m ${Math.round(seconds % 60)}s`; } function formatDate(iso: string): string { return parseUTC(iso).toLocaleString(undefined, { dateStyle: 'short', timeStyle: 'medium', }); } export default function AdminLogsPage() { const { user } = useAuthStore(); const router = useRouter(); const [page, setPage] = useState(1); const [statusFilter, setStatusFilter] = useState(''); useEffect(() => { if (user && !user.is_superuser) { router.replace('/dashboard'); } }, [user, router]); const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['admin-processing-runs', page, statusFilter], queryFn: () => adminApi.listProcessingRuns({ page, page_size: 25, ...(statusFilter ? { status: statusFilter } : {}), }), enabled: !!user?.is_superuser, }); return (
{/* Header */}

Activity Logs

All email processing runs across every user account.

{/* Table */} {isLoading ? (
) : isError ? (
Failed to load activity logs. Please try again.
) : data && data.items.length > 0 ? (
{data.items.map((run: AdminProcessingRun) => { const statusClass = STATUS_STYLES[run.status] ?? 'bg-gray-100 text-gray-800'; const ok = run.emails_failed === 0 && run.status !== 'failed'; return ( ); })}
Started User Account Status Fetched Forwarded Failed Duration OK
{formatDate(run.started_at)} {run.user_email ?? `#${run.user_id}`}
{run.account_name ?? '—'}
{run.account_email ?? ''}
{run.status} {run.emails_fetched} {run.emails_forwarded} {run.emails_failed > 0 ? ( {run.emails_failed} ) : ( 0 )} {formatDuration(run.duration_seconds)} {ok ? ( ) : ( )}
{/* Pagination */} {data.pages > 1 && (
Page {data.page} of {data.pages} ({data.total} total runs)
)}
) : (

No activity yet

Processing run logs will appear here once mail accounts are active.

)}
); }