SPB Git forge

spb/ai-atlas

Public
41commits 1branches 0releases
4.6 MBsize
maindefault branch
12 days agolast push
HTML 77.2% TypeScript 10.5% Python 9.6% JavaScript 2.5%
2.4 KB · 48 lines tsx
Raw Blame History
1import type { Metadata } from 'next';2import { ActionButton, AdminTitle, Notice } from '@/components/admin/ui';3import { flushCacheAction, recomputeQualityAction, recomputeStatsAction } from '@/lib/admin/actions';4import { requireAdmin } from '@/lib/admin/admin-api';56export const metadata: Metadata = { title: 'Cache & maintenance', robots: { index: false, follow: false } };7export const dynamic = 'force-dynamic';89export default async function AdminCachePage({ searchParams }: { searchParams: Promise<Record<string, string | undefined>> }) {10  await requireAdmin();11  const sp = await searchParams;12  return (13    <>14      <AdminTitle title="Cache & maintenance" lede="Public API responses are cached in Redis (aia:api:*, 60–600 s). Flushing forces every public page to recompute on its next request." />15      <Notice notice={sp.notice} level={sp.level} />16      <ul className="divide-y divide-rule border-y border-rule">17        <li className="flex flex-col gap-2 py-3 md:flex-row md:items-center md:justify-between">18          <div>19            <p className="text-sm font-medium text-ink">Flush API cache</p>20            <p className="text-xs text-ink-3">POST /admin/cache/flush — deletes every aia:api:* key. Safe; the next requests repopulate it.</p>21          </div>22          <form action={flushCacheAction}>23            <ActionButton tone="accent">Flush</ActionButton>24          </form>25        </li>26        <li className="flex flex-col gap-2 py-3 md:flex-row md:items-center md:justify-between">27          <div>28            <p className="text-sm font-medium text-ink">Recompute stats</p>29            <p className="text-xs text-ink-3">POST /admin/stats/recompute — refreshes the daily stats history row for today.</p>30          </div>31          <form action={recomputeStatsAction}>32            <ActionButton>Recompute stats</ActionButton>33          </form>34        </li>35        <li className="flex flex-col gap-2 py-3 md:flex-row md:items-center md:justify-between">36          <div>37            <p className="text-sm font-medium text-ink">Recompute quality scores</p>38            <p className="text-xs text-ink-3">POST /admin/quality/recompute — recomputes completeness, primary-source ratio, freshness and conflicts for every entity. May take a while on a large database.</p>39          </div>40          <form action={recomputeQualityAction}>41            <ActionButton>Recompute quality</ActionButton>42          </form>43        </li>44      </ul>45    </>46  );47}48