synops/docs/concepts/adminpanelet.md
vegard 7eae02eeb5 Fullfør oppgave 7.5: Segmenttabell-migrasjon og SRT-pipeline
Oppretter transcription_segments-tabellen i PostgreSQL som master-kopi
for alle transkripsjoner. transcribe.rs er oppdatert fra verbose_json
til SRT-format med full parse → segment-innsetting pipeline.

Endringer:
- Migration 005: transcription_segments med GIN fulltekstsøk (norsk)
- transcribe.rs: SRT-parser, segment-innsetting, node-oppdatering
- Miljøvariabler: WHISPER_MODEL (default "medium"), WHISPER_INITIAL_PROMPT
- Docker-compose: nye env vars for maskinrommet-containeren
- Docs: oppdatert podcastfabrikken, arkitektur, primitiver, CLAUDE.md

Tabellen kjørt på server, maskinrommet restartet med nye env vars.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 18:19:00 +01:00

121 lines
5.1 KiB
Markdown

# 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
#### Varslingsnode
```jsonc
{
"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