Implementerer prioritetsregler, ressursgrenser og LiveKit-bevisst resource governor for jobbkø-workeren, pluss disk-overvåking med varsling. Hovedkomponenter: 1. Prioritetsregler (job_priority_rules-tabell): - Konfigurerbar base_priority, cpu_weight, max_concurrent per jobbtype - LiveKit-justering: livekit_priority_adj og block_during_livekit - Timeout per jobbtype - Admin-API for å endre regler uten restart 2. Ressurs-governor i worker-loopen: - Semaphore: maks 3 samtidige jobber - CPU-vektgrense: total vekt maks 8 (Whisper=5, render=1, etc.) - Per-type concurrency-grense - LiveKit-status sjekkes med 10s cache-TTL - Jobber utsettes/nedprioriteres ved aktive LiveKit-rom - Individuell timeout per jobb (default 600s) - Jobber kjøres i egne tokio-tasks (parallell dispatch) 3. Disk-overvåking: - Sjekker diskbruk hvert 60. sekund via statvfs - Terskler: 85% warning, 90% critical, 95% emergency - Logger til disk_status_log (siste 1000 målinger beholdes) - Admin-API: GET /admin/resources/disk med historikk 4. Admin-API: - GET /admin/resources — samlet ressursstatus - GET /admin/resources/disk — diskstatus med historikk - POST /admin/resources/update_rule — oppdater prioritetsregel Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
46 lines
2.2 KiB
SQL
46 lines
2.2 KiB
SQL
-- Oppgave 15.5: Ressursstyring — prioritetsregler, ressursgrenser, disk-status
|
|
--
|
|
-- Oppretter tabell for jobbtype-prioritetsregler som brukes av workeren
|
|
-- til å styre concurrency, prioritet og LiveKit-tilpasning.
|
|
|
|
CREATE TABLE job_priority_rules (
|
|
job_type TEXT PRIMARY KEY,
|
|
base_priority SMALLINT NOT NULL DEFAULT 5,
|
|
-- Hvor mye prioriteten reduseres når LiveKit-rom er aktive
|
|
livekit_priority_adj SMALLINT NOT NULL DEFAULT 0,
|
|
-- Ressursvekt (1=lett HTTP-kall, 5=tung CPU som Whisper)
|
|
cpu_weight SMALLINT NOT NULL DEFAULT 1,
|
|
-- Maks samtidige jobber av denne typen (0 = ubegrenset)
|
|
max_concurrent SMALLINT NOT NULL DEFAULT 0,
|
|
-- Timeout i sekunder (0 = bruk default)
|
|
timeout_seconds INT NOT NULL DEFAULT 0,
|
|
-- Om jobben skal blokkeres helt under aktive LiveKit-sesjoner
|
|
block_during_livekit BOOLEAN NOT NULL DEFAULT false
|
|
);
|
|
|
|
-- Seed med kjente jobbtyper og fornuftige defaults
|
|
INSERT INTO job_priority_rules (job_type, base_priority, livekit_priority_adj, cpu_weight, max_concurrent, timeout_seconds, block_during_livekit)
|
|
VALUES
|
|
('whisper_transcribe', 5, -3, 5, 1, 600, false),
|
|
('agent_respond', 10, 0, 1, 2, 120, false),
|
|
('suggest_edges', 3, 0, 1, 2, 120, false),
|
|
('summarize_communication', 5, 0, 1, 1, 120, false),
|
|
('tts_generate', 5, -1, 2, 1, 300, false),
|
|
('audio_process', 5, -2, 3, 1, 600, false),
|
|
('render_article', 7, 0, 1, 2, 60, false),
|
|
('render_index', 7, 0, 1, 2, 60, false);
|
|
|
|
-- Tabell for disk-status-snapshots (siste verdier brukes for varsling)
|
|
CREATE TABLE disk_status_log (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
checked_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
mount_point TEXT NOT NULL DEFAULT '/',
|
|
total_bytes BIGINT NOT NULL,
|
|
used_bytes BIGINT NOT NULL,
|
|
available_bytes BIGINT NOT NULL,
|
|
usage_percent REAL NOT NULL,
|
|
alert_level TEXT -- NULL=ok, 'warning'=85%+, 'critical'=90%+, 'emergency'=95%+
|
|
);
|
|
|
|
-- Hold bare siste 1000 målinger
|
|
CREATE INDEX idx_disk_status_latest ON disk_status_log (checked_at DESC);
|