-- 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);