Kansho/frontend/src/pages/AdminHomePage.jsx

46 lines
2.1 KiB
React
Raw Normal View History

import { useEffect, useState } from 'react'
import { Link } from 'react-router-dom'
import { api } from '../api.js'
import { useAuth } from '../context/AuthContext.jsx'
export default function AdminHomePage() {
const { session } = useAuth()
const [health, setHealth] = useState(null)
const [error, setError] = useState('')
useEffect(() => {
api('/api/admin/health', { token: session.token })
.then(setHealth)
.catch((e) => setError(e.message))
}, [session.token])
return (
<section className="card">
<h1>Admin</h1>
<p>Rahmen für Nutzer, Prompts, Platzhalter und Kontingente. Keine Reflexions-Prompts und kein Zahlungsabo.</p>
{error && <p className="error">{error}</p>}
{health && (
<>
<dl className="meta">
<dt>Nutzer</dt>
<dd>{health.inventory?.users}</dd>
<dt>Prompts in der DB</dt>
<dd>{health.inventory?.prompts}</dd>
<dt>Originalnachrichten</dt>
<dd>{health.inventory?.dialogue?.messages ?? 0}</dd>
<dt>Derived</dt>
<dd>{health.inventory?.dialogue?.derived_records ?? 0}</dd>
2026-08-25 13:57:23 +02:00
<dt>Sprachmodell</dt>
<dd>{health.inventory?.providers?.generate?.ready ? 'bereit' : 'nicht bereit'}</dd>
<dt>Maskierung</dt>
<dd>{health.inventory?.providers?.detect?.ready ? 'bereit (semantisch)' : 'nicht bereit, fail-closed'}</dd>
2026-08-29 11:04:34 +02:00
<dt>Debug-Schritte</dt>
<dd>{health.inventory?.debug_runs ?? 0}{health.inventory?.debug_persist_enabled ? ' · an' : ' · aus'}</dd>
</dl>
2026-08-29 11:04:34 +02:00
<p className="muted">Weiter: <Link to="/admin/users">Nutzer</Link> · <Link to="/admin/prompts">Prompts</Link> · <Link to="/admin/generation">Generierungsrichtlinien</Link> · <Link to="/admin/placeholders">Platzhalter</Link> · <Link to="/admin/features">Kontingente</Link> · <Link to="/admin/providers">Schnittstellen</Link> · <Link to="/admin/identities">Identitäten</Link> · <Link to="/admin/dialogue">Dialog</Link> · <Link to="/admin/debug">Debug</Link></p>
</>
)}
</section>
)
}