Vollständige Pipeline zur Analyse kommunaler Vorlagen aus ALLRIS: - OParl-Import: 20.149 Vorlagen - PDF-Extraktion: 10.045 Volltexte (adaptives Throttling) - KI-Zusammenfassungen: 10.026 via Qwen Plus (parallelisiert) - Beratungsfolge-Scraper: Beschlusstexte + Wortprotokolle - Abstimmungs-Analyse mit Koalitionsmatrix - Georeferenzierung (Nominatim) Stack: FastAPI + SvelteKit + SQLite Deployment: Docker + Traefik auf VServer Daten (DB, Logs) nicht im Repo — siehe Restic-Backup. Repo-Setup: scripts/setup.sh für Neuaufbau aus OParl-API.
45 lines
1.2 KiB
Bash
Executable File
45 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Läuft Beratungsfolge-Scraper in Tranchen bis alles fertig ist
|
|
|
|
cd "$(dirname "$0")/.."
|
|
source .venv/bin/activate
|
|
|
|
LOG_FILE="data/beratungen_batches.log"
|
|
BATCH_SIZE=200
|
|
PAUSE_SECONDS=10
|
|
|
|
echo "=== Beratungsfolge-Batch-Runner gestartet $(date) ===" | tee -a "$LOG_FILE"
|
|
|
|
while true; do
|
|
echo "" | tee -a "$LOG_FILE"
|
|
echo "--- Starte Batch $(date +%H:%M:%S) ---" | tee -a "$LOG_FILE"
|
|
|
|
python scripts/scrape_beratungsfolge.py --limit $BATCH_SIZE 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
# Prüfe ob noch Vorlagen ohne Beschlusstext übrig sind
|
|
REMAINING=$(python -c "
|
|
import sqlite3
|
|
conn = sqlite3.connect('data/tracker_remote.db')
|
|
r = conn.execute('''
|
|
SELECT COUNT(DISTINCT v.id)
|
|
FROM vorlagen v
|
|
LEFT JOIN beratungen b ON v.id = b.vorlage_id AND b.beschlusstext IS NOT NULL
|
|
WHERE v.web_url IS NOT NULL AND b.id IS NULL
|
|
''').fetchone()[0]
|
|
print(r)
|
|
")
|
|
|
|
echo "Verbleibend: $REMAINING" | tee -a "$LOG_FILE"
|
|
|
|
if [ "$REMAINING" -eq 0 ]; then
|
|
echo "" | tee -a "$LOG_FILE"
|
|
echo "=== ALLE FERTIG $(date) ===" | tee -a "$LOG_FILE"
|
|
break
|
|
fi
|
|
|
|
echo "Pause ${PAUSE_SECONDS}s..." | tee -a "$LOG_FILE"
|
|
sleep $PAUSE_SECONDS
|
|
done
|
|
|
|
echo "Runner beendet." | tee -a "$LOG_FILE"
|