"use client"; import Link from "next/link"; import { RefreshCw } from "lucide-react"; import { api, type HealthSummary } from "@/lib/api"; import { useAsync, useInterval } from "@/lib/hooks"; import { fmtCompact, fmtGB, fmtInt, fmtRelative, fmtTs } from "@/lib/format"; import { Banner, Card, ErrorState, KpiTile, PageHeader, SeverityBadge, Skeleton, StatusBadge } from "@/components/ui"; import { DataTable } from "@/components/DataTable"; import { Job } from "@/lib/api"; import { useAuth } from "@/lib/auth"; export default function OverviewPage() { const { isOwner } = useAuth(); const { data, error, loading, reload } = useAsync((signal) => api.get("/health/summary", undefined, signal), []); useInterval(reload, 60_000); const h = data?.health; const lake = h?.components.lake; const jobs = data?.jobs ?? {}; const anomalies = data?.anomalies_7d ?? {}; const anomaliesTotal = Object.values(anomalies).reduce((a, b) => a + b, 0); const primaryDs = h?.datasets?.find((d) => d.dataset_id === "market_bars.stock.1m.raw") ?? h?.datasets?.[0]; const dead = jobs.dead ?? 0; const freeTone = lake ? (lake.free_gb < lake.hard_min_free_gb ? "crit" : lake.free_gb < lake.hard_min_free_gb * 2 ? "warn" : undefined) : undefined; return ( <> Health checked {fmtRelative(h.checked_at)} · auto-refresh every 60 s : "Lakehouse status at a glance"} actions={ <> {h && } } /> FirstRate Data — private use only. Raw bars and tables may not be redistributed (no public API, CSV or tables). Derived results may be published with attribution. {error && } {!data && !error && } {data && ( <> {h && h.alerts.length > 0 && (
    {h.alerts.map((a, i) => (
  • {a.code} {a.message}
  • ))}
)}
`${k} ${v}`).join(" · ") || "none"} tone={anomalies.error ? "crit" : anomaliesTotal ? "warn" : undefined} href="/quality/" />
All jobs →}> rows={data.recent_jobs} rowKey={(r) => r.id} mobile="scroll" columns={[ { key: "kind", header: "Kind", render: (r) => {r.kind} }, { key: "dataset_id", header: "Dataset", mono: true, hideSm: true }, { key: "status", header: "Status", render: (r) => }, { key: "started_at", header: "Started", render: (r) => {fmtTs(r.started_at)}, hideSm: true }, { key: "finished_at", header: "Finished", render: (r) => {fmtTs(r.finished_at)}, hideSm: true }, { key: "last_error", header: "Error", render: (r) => (r.last_error ? {r.last_error} : —) }, ]} />
  • Postgres
  • Ingest worker
  • Backup {h?.components.backup?.last ? ( <> {" "} {fmtRelative(h.components.backup.last)} ) : ( )}
  • SSD SMART
{h?.datasets && h.datasets.length > 0 && (
Dataset freshness
    {h.datasets.map((d) => (
  • {d.dataset_id} v{d.version ?? "—"} · {d.last_session ?? "no sessions"} {d.vendor_lag_days ? · lag {d.vendor_lag_days} d : null}
  • ))}
)}
)} ); }