# /etc/cron.d/archivmail
#
# Zentrale Cron-Datei für archivmail — analog zum mailpiler-Vorbild
# (/etc/cron.d/piler), das ebenfalls alle Wartungs-Jobs in einer Datei
# bündelt. Neue Jobs (Purge, nächtlicher Reindex, Watch-Folder-Import, ...)
# kommen hier als weitere Zeile dazu, statt eigene cron.d-Dateien
# anzulegen.
#
# Format: Minute Stunde Tag Monat Wochentag User Befehl

# ── OCR-Pausenfenster (PROJ-56) ──────────────────────────────────────────
# Steuert paused_hours in /etc/archivmail/config.yml und löst per
# "systemctl reload" (SIGHUP) einen Reload aus, damit die neue Pausenzeit
# sofort greift — ohne den Prozess neu zu starten (kein Verbindungsabbruch
# für SMTP/IMAP/API). Mails gehen dabei nie verloren: ocr_status='pending'
# bleibt in der DB bestehen und wird von der Backfill-Goroutine laufend
# nachgezogen, unabhängig von Pausen oder Neustarts.
#
# Anpassen: einfach die beiden Uhrzeiten unten ändern und an die
# crontab-Syntax halten. Bei wrap-around Fenstern (z.B. 22:00–06:00)
# "start" auf den späteren, "stop" auf den früheren Zeitpunkt legen.

# Pause starten um 22:00 Uhr
0 22 * * * root /usr/local/bin/archivmail-ocr-pause.sh start 22 6

# Pause beenden um 06:00 Uhr
0 6  * * * root /usr/local/bin/archivmail-ocr-pause.sh stop

# ── GoBD-Retention-Purge (PROJ-56c) ─────────────────────────────────────
# Löscht Mails mit abgelaufener Aufbewahrungsfrist (retain_until < NOW()),
# entfernt sie aus dem Suchindex und schreibt pro Mail einen Audit-Eintrag
# ("mail_purged") — analog zu Pilers purge.sh, nachts um 03:40 Uhr.
40 3 * * * root /opt/archivmail/archivmail purge --config /etc/archivmail/config.yml >> /var/log/archivmail/purge.log 2>&1

# ── Batch-Modus: Indexierung + OCR per Cron (PROJ-58) ───────────────────
# NUR relevant, wenn in /etc/archivmail/config.yml index.batch_mode: true
# bzw. ocr.batch_mode: true gesetzt ist. In diesem Modus startet der Daemon
# den jeweiligen Dauerbetrieb-Worker NICHT — neue Mails bleiben mit
# indexed_at IS NULL bzw. ocr_status='pending' in der DB stehen und werden
# erst vom nächsten Cron-Lauf hier durchsuchbar / OCR-verarbeitet gemacht.
# Sinn: viele kleine Schreibzugriffe (Manticore, tesseract, DB) werden zu
# geblockten Batches gebündelt, statt sofort bei jedem Mail-Import zu laufen.
#
# Bei index.batch_mode: false / ocr.batch_mode: false (Default) sind diese
# beiden Zeilen WIRKUNGSLOS bzw. redundant — der Worker läuft dann ohnehin
# dauerhaft und arbeitet alles sofort ab. Wer batch_mode nicht nutzt, kann
# die beiden Zeilen einfach auskommentiert lassen.
#
# Die Jobs rufen Wrapper-Skripte auf (archivmail-index-pending.sh /
# archivmail-ocr-reprocess.sh), die per PID-Lockfile unter /var/run/archivmail/
# überlappende Läufe verhindern — analog zum mailpiler-Vorbild
# (indexer.delta.sh mit MAINTMPFILE/DELTATMPFILE). Ohne diesen Schutz könnte
# ein Lauf mit großem Backlog länger dauern als das Intervall und sich mit
# dem nächsten Tick überlappen, was die Last-Glättung wieder aufheben würde.
#
# Anpassen: Intervall/Uhrzeiten unten nach Bedarf ändern (crontab-Syntax).
# Die beiden Jobs sind bewusst leicht versetzt, damit Index- und OCR-Lauf
# nicht exakt zeitgleich starten.

# Index-Backlog (indexed_at IS NULL) alle 15 Minuten verarbeiten
*/15 * * * * root /usr/local/bin/archivmail-index-pending.sh >> /var/log/archivmail/index-pending.log 2>&1

# OCR-Backlog (ocr_status='pending') alle 15 Minuten, um 5 Min versetzt
5,20,35,50 * * * * root /usr/local/bin/archivmail-ocr-reprocess.sh >> /var/log/archivmail/ocr-reprocess.log 2>&1

# ── Vollständigkeits-Reconciliation (PROJ-52) ───────────────────────────
# Berechnet täglich pro Tenant/Quelle (SMTP-Journal, IMAP-Konto, POP3-Konto,
# Datei-Import) die Anzahl archivierter Mails und schreibt einen Report
# nach reconciliation_reports. Bei Abweichung > reconciliation.alert_threshold_pct
# (config.yml, Default 50%) unter dem 7-Tage-Durchschnitt wird ein
# Audit-Log-Eintrag (reconciliation_anomaly) geschrieben. Läuft nachts um
# 04:10 Uhr, also nach Purge (03:40) und außerhalb der OCR-Pause.
10 4 * * * root /opt/archivmail/archivmail reconcile --config /etc/archivmail/config.yml >> /var/log/archivmail/reconcile.log 2>&1

# ── Weitere Jobs (geplant, noch nicht implementiert) ────────────────────
# 30 2 * * * archivmail /opt/archivmail/archivmail reindex        # nächtlicher Voll-Reindex
