Admin kan nå se, filtrere, retrye og avbryte jobber via /admin/jobs. Backend: - jobs.rs: list_jobs(), count_by_status(), distinct_job_types(), retry_job(), cancel_job() for admin-spørringer - intentions.rs: GET /admin/jobs, POST retry_job/cancel_job handlers - main.rs: tre nye ruter Frontend: - /admin/jobs: statusoppsummering med antall per status, filter på type/status, paginert tabell med retry/avbryt-knapper, 5s polling - /admin: navigasjonslenke til jobbkø Migrasjon: - 013_job_queue.sql: formaliserer job_queue-tabellen med admin-indekser Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
34 lines
1.4 KiB
SQL
34 lines
1.4 KiB
SQL
-- Oppgave 15.3: Jobbkø-tabell
|
|
--
|
|
-- Denne tabellen har vært referert fra jobs.rs og maintenance.rs
|
|
-- men manglet som formell migrasjon. Oppretter den nå med enum,
|
|
-- indekser og kolonner som matcher eksisterende Rust-kode.
|
|
|
|
CREATE TYPE job_status AS ENUM ('pending', 'running', 'completed', 'error', 'retry');
|
|
|
|
CREATE TABLE job_queue (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
collection_node_id UUID REFERENCES nodes(id) ON DELETE CASCADE,
|
|
job_type TEXT NOT NULL,
|
|
payload JSONB NOT NULL DEFAULT '{}',
|
|
status job_status NOT NULL DEFAULT 'pending',
|
|
priority SMALLINT NOT NULL DEFAULT 0,
|
|
result JSONB,
|
|
error_msg TEXT,
|
|
attempts SMALLINT NOT NULL DEFAULT 0,
|
|
max_attempts SMALLINT NOT NULL DEFAULT 3,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
started_at TIMESTAMPTZ,
|
|
completed_at TIMESTAMPTZ,
|
|
scheduled_for TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- Indeks for effektiv dequeue: henter ventende/retry-jobber sortert etter prioritet
|
|
CREATE INDEX idx_job_queue_pending ON job_queue (priority DESC, scheduled_for ASC)
|
|
WHERE status IN ('pending', 'retry');
|
|
|
|
-- Indeks for admin-oversikt: filtrer på status
|
|
CREATE INDEX idx_job_queue_status ON job_queue (status, created_at DESC);
|
|
|
|
-- Indeks for filtrering på jobbtype
|
|
CREATE INDEX idx_job_queue_type ON job_queue (job_type, created_at DESC);
|