Nytt admin-dashboard for sanntids serverhelse med fire hoveddeler: 1. Tjeneste-status: Parallelle helsesjekker for alle 7 tjenester (PG, STDB, Caddy, Authentik, LiteLLM, Whisper, LiveKit) med latens-måling og statusrapportering (up/down/degraded). 2. System-metrikker: CPU-load via /proc/loadavg, minne via /proc/meminfo, disk via statvfs, oppetid via /proc/uptime. Vises med progress-bars og fargekodede terskler. 3. PG-statistikk: Aktive tilkoblinger, maks-tilkoblinger, databasestørrelse og aktive spørringer. 4. Logg-tilgang: Filtrerbar visning av logger fra alle tjenester. Bruker journalctl for systemd-tjenester og docker logs for containere. Konfigurerbart antall linjer per tjeneste. Backend: health.rs med tokio::join! for parallelle sjekker. Frontend: /admin/health med auto-polling hvert 10. sekund. Backup-sjekk rapporterer ok/stale/missing (ingen backup satt opp ennå). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7.8 KiB
Adminpanelet — Serveradministrasjon
Oversikt
Sentralt administrasjonspanel for hele Synops-instansen. Tilgjengelig kun for server-admins (Vegard). Dekker alt som ikke er per-samling: AI-konfigurasjon, ressursstyring, systemvarsler og serverhelse.
Adminpanelet er en del av SvelteKit-frontenden, bak egen tilgangskontroll (admin-edge til server-noden eller Authentik-gruppe).
Moduler
1. AI Gateway-styring
Konfigurasjon av LiteLLM og modellruting. Ref: docs/infra/ai_gateway.md.
- Modelloversikt: Liste over tilgjengelige modeller med status, kostnad per token, latens-snitt
- API-nøkler: Legg til, rotér og deaktiver nøkler for OpenRouter, Anthropic, Google, xAI osv. Nøkler vises aldri i klartekst etter lagring
- Ruting-regler: Hvilken modell brukes for hvilken jobbtype (transkripsjonsanalyse, oppsummering, tagging, diktat-cleanup osv.)
- Fallback-kjeder: Primærmodell → fallback → siste utvei. Per jobbtype
- Forbruksoversikt: Aggregert ressursforbruk per samling, per jobbtype, per tidsperiode. Dekker AI-tokens, Whisper-tid, TTS-tegn, CAS-lagring, båndbredde og LiveKit-tid. Ref:
docs/features/ressursforbruk.md - Prompt Lab-tilgang: Snarvei til testing av prompts mot faktisk data. Ref:
docs/features/prompt_lab.md
2. Ressursstyring
Kontroll over CPU, minne og prioritering av bakgrunnsjobber.
- Jobbkø-oversikt: Aktive, ventende og feilede jobber. Filtrer på type, samling, status. Manuell retry/avbryt
- Prioritetsregler: Konfigurer relativ prioritet mellom jobbtyper (f.eks. live transkripsjon > batch-transkripsjon > embedding-generering)
- Ressursgrenser: Maks samtidige jobber per type, CPU/minne-grenser per worker-container
- Ressurs-governor: Automatisk nedprioritering av tunge jobber (Whisper, embedding) under aktive LiveKit-sesjoner. Konfigurerbar terskel
- Disk-status: CAS-lagring, PG-størrelse, mediefiler. Visuell oversikt med varsling ved terskelverdier (ref: pruning-logikk i
docs/retninger/maskinrommet.md)
3. Systemvarsler og vedlikeholdsmodus
Varsle brukere om planlagt nedetid, oppdateringer eller hendelser. Kritisk for å unngå avbrudd midt i møter, podcast-opptak eller publisering.
Varslingsmekanisme
- Sanntidsvarsel via STDB: Maskinrommet skriver en varslingsnode som frontend abonnerer på. Vises som banner/toast i alle aktive klienter umiddelbart
- Varslingstyper:
info— generell melding (f.eks. "Ny funksjonalitet tilgjengelig")warning— planlagt vedlikehold med nedtellingcritical— umiddelbar handling kreves
- Nedtelling: Admin setter tidspunkt for vedlikehold. Frontend viser nedtelling: "Serveren restartes om 15 minutter"
- Aktive sesjoner-sjekk: Før vedlikehold, vis oversikt over pågående
aktivitet:
- Aktive LiveKit-rom (møter, opptak)
- Brukere med ulagrede endringer (collaboration-sesjoner)
- Pågående jobbkø-jobber
- Graceful shutdown-sekvens:
- Varsel sendes X minutter i forveien (konfigurerbart, default 15 min)
- Nye LiveKit-rom blokkeres etter varsling
- Påminnelse ved T-5 min og T-1 min
- Jobbkøen stopper å plukke nye jobber
- Vent til aktive jobber fullføres (med timeout)
- Restart
Implementert (oppgave 15.2)
- Backend:
maskinrommet/src/maintenance.rs—MaintenanceStatemed atomiske flagg og bakgrunns-shutdown-koordinator - API-endepunkter:
POST /intentions/initiate_maintenance— starter nedtelling med tidspunktPOST /intentions/cancel_maintenance— avbryter planlagt vedlikeholdGET /admin/maintenance_status— viser status + kjørende jobber
- Frontend:
/admin— vedlikeholdspanel med statusvisning, aktive sesjoner og initier/avbryt-knapper - Jobbkø:
jobs.rssjekkermaintenance.is_active()før dequeue - LiveKit:
join_communicationblokkerer nye tokens under vedlikehold - Shutdown-flyt: Vent til
scheduled_at→ settactive→ vent på jobber (5 min timeout) →process::exit(0)→ systemd restarter
Varslingsnode
{
"node_kind": "system_announcement",
"title": "Planlagt vedlikehold",
"content": "Serveren oppdateres kl. 22:00. Forventet nedetid: 10 minutter.",
"metadata": {
"announcement_type": "warning",
"scheduled_at": "2026-03-17T22:00:00Z",
"expires_at": "2026-03-17T22:30:00Z",
"blocks_new_sessions": true
}
}
Vises for alle med visibility: open. Forsvinner automatisk etter
expires_at.
4. Serverhelse
Sanntidsoversikt over systemtilstand.
- Tjeneste-status: PG, STDB, Caddy, Authentik, LiteLLM, Whisper, LiveKit — oppe/nede/degradert
- Metrikker: CPU, minne, disk, nettverkstrafikk
- PG-helse: Tilkoblingspool, aktive spørringer, replikerings-lag (fremtidig)
- STDB-helse: Minnebruk, antall abonnenter, graf-størrelse
- Logg-tilgang: Siste feil og advarsler fra alle tjenester, filtrerbart
- Backup-status: Siste vellykkede backup per type, neste planlagte kjøring
Implementert (oppgave 15.6)
- Backend:
maskinrommet/src/health.rs— parallelle helsesjekker for alle tjenester, system-metrikker via/proc, PG-statistikk, backup-sjekk, logg-tilgang - API-endepunkter:
GET /admin/health— komplett helse-dashboard (tjeneste-status, CPU/minne/disk, PG-stats, backup-status)GET /admin/health/logs?service=&lines=— logg-tilgang per tjeneste eller alle
- Frontend:
/admin/health— dashboard med tjenestekort (opp/nede/degradert med latens), system-metrikker med progress-bars, PG-tilkoblinger og DB-størrelse, backup-status, og filtrerbar logg-visning - Tjeneste-sjekker: PG (SQL ping), STDB (noop-kall), Caddy (admin-API), Authentik (health-endpoint), LiteLLM/Whisper/LiveKit (HTTP health). Alle kjøres parallelt med 5s timeout
- Metrikker: CPU load via
/proc/loadavg, minne via/proc/meminfo, disk viastatvfs, oppetid via/proc/uptime - Logger: Systemd-journal for native tjenester (maskinrommet, caddy),
docker logsfor containere. Filtrerbart per tjeneste, konfigurerbart antall linjer - Backup: Sjekker standard backup-kataloger for PG-dump og CAS-filer. Rapporterer status som ok/stale/missing basert på filens alder
5. Bruker- og tilgangsoversikt
- Aktive brukere: Hvem er pålogget nå, siste aktivitet
- Authentik-integrasjon: Snarvei til Authentik admin for brukerhåndtering
- Samlingsoversikt: Alle samlinger med eier, traits, størrelse, aktivitetsnivå
Tilgang
Adminpanelet er ikke en trait — det er en plattformfunksjon som eksisterer utenfor samlings-modellen. Tilgang styres via:
- Authentik-gruppe
synops-admin - Eller
admin-edge til en dedikert server-node
Vanlige brukere ser aldri adminpanelet. Ruten er skjult og tilgangskontrollert server-side.
Implementert (oppgave 15.3)
- Backend:
maskinrommet/src/jobs.rs—list_jobs(),count_by_status(),distinct_job_types(),retry_job(),cancel_job() - API-endepunkter:
GET /admin/jobs?status=&type=&collection_id=&limit=&offset=— jobbliste med filtrePOST /intentions/retry_job— sett feilet jobb tilbake til pendingPOST /intentions/cancel_job— avbryt ventende jobb
- Frontend:
/admin/jobs— jobbkø-oversikt med statusoppsummering, filtrer på status/type, paginering, retry/avbryt-knapper - Migrasjon:
013_job_queue.sql— formaliserer job_queue-tabellen med indekser for admin-spørringer
Implementeringsstrategi
Adminpanelet bygges inkrementelt. Første prioritet er det som trengs for daglig drift:
- Systemvarsler — kritisk for å unngå avbrudd (implementert: 15.1)
- Jobbkø-oversikt — nødvendig for feilsøking (implementert: 15.3)
- AI Gateway-konfigurasjon — nødvendig når AI-features aktiveres
- Serverhelse — nyttig men ikke blokkerende
- Ressursstyring — optimalisering, kan vente