Poll-Takt von 15 Minuten auf 2 Stunden senken

Reduziert den Traffic gegen die Quellen. slot_von() rundet jetzt generisch
auf TAKT-Grenzen statt fest auf 15-Minuten-Slots, die Stillstands-Schwelle
in quellen_stillstand steigt von 6h auf 24h, damit der Watchdog nicht schon
nach drei verpassten Slots anschlaegt. GDELT-Vergleich aus den Kommentaren
entfernt, da die Slots nicht mehr mit dessen 15-Minuten-Paketen zusammenfallen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013vHZCwcCJnz4LKNgvT4bxv
This commit is contained in:
irrlicht
2026-09-04 20:34:22 +02:00
co-authored by Claude Sonnet 5
parent c43d8496bf
commit 8a1ab8a146
6 changed files with 17 additions and 13 deletions
+7 -6
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
"""Ingest-Poller fuer den deutschen Ereignisdatensatz.
Liest die Quellen aus sources.toml, holt alle 15 Minuten die Feeds und legt
Liest die Quellen aus sources.toml, holt alle 2 Stunden die Feeds und legt
jedes neue Item roh ab. Bewusst ohne Kodierung: was hier landet, soll sich
beliebig oft neu kodieren lassen.
@@ -10,7 +10,7 @@ Zwei Senken:
--sink jsonl:/pfad/dir Schatten-Ingest als gzip-JSONL pro Slot
Aufrufe:
poller.py --sink "$DATABASE_URL" # Dauerbetrieb, 15-Minuten-Takt
poller.py --sink "$DATABASE_URL" # Dauerbetrieb, 2-Stunden-Takt
poller.py --sink "$DATABASE_URL" --once # ein Durchlauf
poller.py --check-robots # Lizenzstatus nachpruefen
"""
@@ -40,7 +40,7 @@ USER_AGENT = os.environ.get(
"INGEST_USER_AGENT",
"wurzelwerk-ingest/0.1 (+https://stinkwurzpresse.de/wurzelwerk; kontakt@stinkwurzpresse.de)",
)
TAKT = 15 * 60 # Slotlaenge in Sekunden, wie bei GDELT
TAKT = 2 * 60 * 60 # Slotlaenge in Sekunden
VERSATZ = 30 # Sekunden nach der Slotgrenze, nicht exakt darauf
NS = {
"a": "http://www.w3.org/2005/Atom",
@@ -66,9 +66,10 @@ def _jetzt():
def slot_von(ts):
"""Auf 15 Minuten abrunden, wie GDELTs Paketgrenzen."""
return ts.replace(second=0, microsecond=0,
minute=(ts.minute // 15) * 15)
"""Auf TAKT-Sekunden seit Epoch abrunden (bei 2 h also volle gerade Stunden)."""
sekunden = int(ts.timestamp())
return dt.datetime.fromtimestamp(
(sekunden // TAKT) * TAKT, tz=dt.timezone.utc)
def norm_titel(t):