-- 030_feed_orchestration.sql -- Oppgave 29.3: Feed-orkestrering — standard-orkestrering "Overvåk RSS-feed" -- som bruker synops-feed. Konfigurerbar per samling via metadata.feed_subscriptions. -- -- Inneholder: -- 1. synops-feed cli_tool-node (aliases og args_hints for script_compiler) -- 2. "Overvåk RSS-feed" seed-orkestrering -- 3. Indeks for rask oppslag av feed_subscriptions -- -- Ref: docs/concepts/orkestrering.md, tools/synops-feed/ BEGIN; -- ============================================================================= -- 1. synops-feed — RSS/Atom-feed abonnement -- ============================================================================= INSERT INTO nodes (id, node_kind, title, visibility, metadata, created_by) VALUES ( 'f0000000-c100-4000-b000-000000000015', 'cli_tool', 'synops-feed', 'discoverable', '{ "binary": "synops-feed", "aliases": ["abonner på feed", "hent feed", "rss-abonnement", "feed-sjekk"], "description": "Abonner på RSS/Atom-feed og opprett content-noder for nye entries", "args_hints": { "feed-url": "--url {arg}", "for samlingen": "--collection-id {event.collection_id}", "som bruker": "--created-by {event.created_by}", "intervall": "--interval {arg}", "som json": "--payload-json {arg}" } }'::jsonb, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' ) ON CONFLICT (id) DO NOTHING; -- ============================================================================= -- 2. Seed-orkestrering: Overvåk RSS-feed -- ============================================================================= -- Trigger: scheduled.interval — periodisk polling basert på konfigurasjon. -- Hvert collection med metadata.feed_subscriptions[] aktiverer dette. -- Maskinrommet sin feed_poller finner disse samlingene og enqueuer feed_poll-jobber. INSERT INTO nodes (id, node_kind, title, content, visibility, metadata, created_by) VALUES ( 'e0000000-0ac0-4000-b000-000000000006', 'orchestration', 'Overvåk RSS-feed', E'NÅR planlagt intervall\nHVIS samling har feed_subscriptions\n\n1. abonner på feed for samlingen\n\nved feil: opprett oppgave "Feed-polling feilet" (bug)', 'discoverable', '{ "trigger": { "event": "scheduled.interval", "conditions": { "has_metadata": "feed_subscriptions" } }, "executor": "script", "intelligence": 1, "effort": 1, "compiled": false }'::jsonb, 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11' ) ON CONFLICT (id) DO NOTHING; -- ============================================================================= -- 3. Indeks for rask oppslag av samlinger med feed_subscriptions -- ============================================================================= -- Brukes av feed_poller for å finne samlinger som skal polles. CREATE INDEX IF NOT EXISTS idx_nodes_feed_subscriptions ON nodes ((metadata->'feed_subscriptions')) WHERE node_kind = 'collection' AND metadata ? 'feed_subscriptions'; -- ============================================================================= -- 4. Prioritetsregel for feed_poll-jobber -- ============================================================================= -- Lav prioritet (3) — feed-polling er bakgrunnsarbeid som ikke haster. INSERT INTO job_priority_rules (job_type, base_priority, cpu_weight, max_concurrent, timeout_seconds) VALUES ('feed_poll', 3, 1, 2, 120) ON CONFLICT (job_type) DO NOTHING; COMMIT;