synops/docs/concepts/adminpanelet.md
vegard d8e44fe57e Fullfører oppgave 15.2: Graceful shutdown med vedlikeholdsmodus
Implementerer koordinert nedstenging der admin setter et
vedlikeholdstidspunkt, brukere ser nedtelling, og systemet
stenger ned trygt etter at aktive jobber er ferdige.

Nye filer:
- maskinrommet/src/maintenance.rs — MaintenanceState med atomiske
  flagg, shutdown-koordinator (vent på scheduled_at → blokker
  nye jobber/LiveKit → vent på kjørende jobber → exit)
- frontend/src/routes/admin/+page.svelte — admin-panel for
  vedlikehold med statusvisning og aktive sesjoner

Endringer:
- jobs.rs: sjekker maintenance.is_active() før dequeue
- intentions.rs: nye endepunkter (initiate/cancel/status), blokkerer
  join_communication under vedlikehold
- main.rs: MaintenanceState i AppState, nye ruter
- api.ts: klientfunksjoner for maintenance-API
- adminpanelet.md: dokumenterer implementerte endepunkter

Flyt: admin → GET /admin/maintenance_status (se aktive sesjoner)
→ POST /intentions/initiate_maintenance → varsel broadcast via STDB
→ frontend nedtelling → scheduled_at nådd → active=true → jobbkø
pauset + LiveKit blokkert → vent maks 5 min → process::exit(0)
→ systemd restarter maskinrommet.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:31:32 +00:00

5.9 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 nedtelling
    • critical — 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:
    1. Varsel sendes X minutter i forveien (konfigurerbart, default 15 min)
    2. Nye LiveKit-rom blokkeres etter varsling
    3. Påminnelse ved T-5 min og T-1 min
    4. Jobbkøen stopper å plukke nye jobber
    5. Vent til aktive jobber fullføres (med timeout)
    6. Restart

Implementert (oppgave 15.2)

  • Backend: maskinrommet/src/maintenance.rsMaintenanceState med atomiske flagg og bakgrunns-shutdown-koordinator
  • API-endepunkter:
    • POST /intentions/initiate_maintenance — starter nedtelling med tidspunkt
    • POST /intentions/cancel_maintenance — avbryter planlagt vedlikehold
    • GET /admin/maintenance_status — viser status + kjørende jobber
  • Frontend: /admin — vedlikeholdspanel med statusvisning, aktive sesjoner og initier/avbryt-knapper
  • Jobbkø: jobs.rs sjekker maintenance.is_active() før dequeue
  • LiveKit: join_communication blokkerer nye tokens under vedlikehold
  • Shutdown-flyt: Vent til scheduled_at → sett active → 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

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.

Implementeringsstrategi

Adminpanelet bygges inkrementelt. Første prioritet er det som trengs for daglig drift:

  1. Systemvarsler — kritisk for å unngå avbrudd
  2. Jobbkø-oversikt — nødvendig for feilsøking
  3. AI Gateway-konfigurasjon — nødvendig når AI-features aktiveres
  4. Serverhelse — nyttig men ikke blokkerende
  5. Ressursstyring — optimalisering, kan vente