Module tasks + knowledgecenter_update aus Kundenprojekt übernehmen (bereinigt)
Beide Module wurden aus einem anderen Kundenprojekt kopiert und bereinigt: Knowledgecenter: - Bild-Cache (1.985 Dateien) geleert, Ordnerstruktur mit .gitkeep behalten - Files-Gallery-Lizenzschlüssel entfernt (config.php) - Kundenspezifische Kategorien gelöscht: Teil I/II/III QM-Struktur, nummerierte QM-Kapitel, Gremien (Präsidium/Finanzausschuss/Landesausschuss), Sitzungsservice-Serie, Protokoll-Abteilungen, Testeinträge - 56 generische Kategorien bleiben (Downloads, Onboarding, Personalthemen …) Tasks: - Alle Betriebsdaten gelöscht (114 Tasks, 914 Submissions, 579 Assignments) - Task-Definitionen und Verlinkungen geleert - Kategoriestruktur bleibt (Allgemein, IT, Personal, Buchhaltung …) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
195
module/tasks/docs/cronjobs.md
Normal file
195
module/tasks/docs/cronjobs.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# Cronjobs — Task-Modul
|
||||
|
||||
Das Task-Modul benötigt **drei Cronjobs**, die regelmäßig laufen müssen:
|
||||
|
||||
1. **Assignments materialisieren** — erstellt neue Aufgaben-Zuweisungen für aktive Zyklen
|
||||
2. **Assignments synchronisieren** — gleicht Zuweisungen mit aktuellen Zielgruppen-Regeln ab
|
||||
3. **Eskalationen berechnen** — markiert überfällige Aufgaben und erhöht Eskalationsstufen
|
||||
|
||||
Alle CLI-Skripte liegen in `cli/` und nutzen `CronRuntime` mit:
|
||||
- **Locking** (verhindert parallele Läufe)
|
||||
- **Strukturiertes Log** (`logs/task_cert_cron.log`, JSON-Lines)
|
||||
- **Heartbeat** (`logs/heartbeat/{job}.json` für Admin-UI)
|
||||
- **Exit-Codes** (0 = OK, 1 = Fehler, 2 = ungültige Parameter, 3 = Lock aktiv)
|
||||
- **CLI-Ausgabe** (`[OK]`/`[SKIP]`/`[ERROR]` auf stdout/stderr)
|
||||
|
||||
---
|
||||
|
||||
## 1. Assignments materialisieren
|
||||
|
||||
Erstellt für alle aktiven Aufgaben die Zuweisungen im aktuellen Zyklus (z.B. neuer Monat = neue Assignments).
|
||||
|
||||
```bash
|
||||
php cli/task_cert_materialize_assignments.php
|
||||
```
|
||||
|
||||
**Optionen:**
|
||||
- `--no-lock` — Locking deaktivieren (nur Debug)
|
||||
- `--json` — JSON-Ausgabe zusätzlich auf stdout
|
||||
- `--help` — Hilfe anzeigen
|
||||
|
||||
**Empfohlenes Intervall:** alle 15 Minuten
|
||||
|
||||
**Was passiert:**
|
||||
- Ermittelt den aktuellen Zyklus jeder aktiven Aufgabe (Tag/Woche/Monat/Jahr)
|
||||
- Erstellt fehlende Assignments für alle Zielkontakte
|
||||
- Bei completion-based Tasks: erstellt den nächsten Zyklus nach Abschluss
|
||||
- Operation ist idempotent (kein --apply nötig)
|
||||
|
||||
---
|
||||
|
||||
## 2. Assignments synchronisieren
|
||||
|
||||
Gleicht bestehende Assignments mit den aktuellen Zielgruppen-Regeln ab. Nützlich wenn sich Abteilungszugehörigkeiten oder Rollen ändern.
|
||||
|
||||
```bash
|
||||
# Alle aktiven Aufgaben (Anwenden)
|
||||
php cli/task_cert_sync_assignments.php --apply
|
||||
|
||||
# Dry-Run (nur Vorschau)
|
||||
php cli/task_cert_sync_assignments.php --dry-run
|
||||
|
||||
# Einzelne Aufgabe
|
||||
php cli/task_cert_sync_assignments.php --apply --task_id=42
|
||||
```
|
||||
|
||||
**Optionen:**
|
||||
- `--apply` — Mutierender Lauf (Zuweisungen anlegen/entfernen)
|
||||
- `--dry-run` — Nur Vorschau, keine DB-Änderungen
|
||||
- `--task_id=<id>` — Optional: nur eine Aufgabe verarbeiten
|
||||
- `--no-lock` — Locking deaktivieren (nur Debug)
|
||||
- `--json` — JSON-Ausgabe zusätzlich auf stdout
|
||||
- `--help` — Hilfe anzeigen
|
||||
|
||||
**Empfohlenes Intervall:** täglich nachts (z.B. 02:00)
|
||||
|
||||
**Was passiert:**
|
||||
- Vergleicht Soll-Zielgruppe (Regeln + Overrides) mit Ist-Zuweisungen
|
||||
- Erstellt fehlende Assignments, entfernt veraltete
|
||||
- Schützt abgeschlossene Assignments und solche mit Zertifikaten vor Löschung
|
||||
|
||||
---
|
||||
|
||||
## 3. Eskalationen berechnen
|
||||
|
||||
Prüft alle offenen Assignments auf Überfälligkeit und berechnet Eskalationsstufen.
|
||||
|
||||
```bash
|
||||
# Alle Aufgaben (Anwenden)
|
||||
php cli/task_cert_recalculate_escalations.php --apply
|
||||
|
||||
# Dry-Run
|
||||
php cli/task_cert_recalculate_escalations.php --dry-run
|
||||
|
||||
# Einzelne Aufgabe
|
||||
php cli/task_cert_recalculate_escalations.php --apply --task_id=42
|
||||
```
|
||||
|
||||
**Optionen:**
|
||||
- `--apply` — Mutierender Lauf (Status/Eskalationslevel schreiben)
|
||||
- `--dry-run` — Nur Vorschau, keine DB-Änderungen
|
||||
- `--task_id=<id>` — Optional: nur eine Aufgabe verarbeiten
|
||||
- `--no-lock` — Locking deaktivieren (nur Debug)
|
||||
- `--json` — JSON-Ausgabe zusätzlich auf stdout
|
||||
- `--help` — Hilfe anzeigen
|
||||
|
||||
**Empfohlenes Intervall:** alle 30 Minuten
|
||||
|
||||
**Was passiert:**
|
||||
- Prüft `due_at` aller offenen/laufenden Assignments
|
||||
- Setzt `status = 'overdue'` wenn Deadline überschritten
|
||||
- Berechnet `escalation_level` anhand der Erinnerungsrichtlinie:
|
||||
- `first_escalation_days`: Tage nach Fälligkeit bis erste Eskalation
|
||||
- `step_days`: Tage zwischen Eskalationsstufen
|
||||
- `max_level`: Maximale Eskalationsstufe
|
||||
- Protokolliert Eskalations-Events in `task_escalation_event`
|
||||
- Setzt Eskalation zurück wenn Aufgabe nicht mehr überfällig ist
|
||||
|
||||
---
|
||||
|
||||
## Crontab-Einrichtung
|
||||
|
||||
```crontab
|
||||
# Assignments materialisieren — alle 15 Minuten
|
||||
*/15 * * * * cd /var/www/intranet/html/module/tasks && /usr/bin/php cli/task_cert_materialize_assignments.php >> /var/www/intranet/html/module/tasks/logs/task_cert_cron.log 2>&1
|
||||
|
||||
# Eskalationen berechnen — alle 30 Minuten
|
||||
*/30 * * * * cd /var/www/intranet/html/module/tasks && /usr/bin/php cli/task_cert_recalculate_escalations.php --apply >> /var/www/intranet/html/module/tasks/logs/task_cert_cron.log 2>&1
|
||||
|
||||
# Assignments synchronisieren — täglich um 02:00
|
||||
0 2 * * * cd /var/www/intranet/html/module/tasks && /usr/bin/php cli/task_cert_sync_assignments.php --apply >> /var/www/intranet/html/module/tasks/logs/task_cert_cron.log 2>&1
|
||||
```
|
||||
|
||||
> **Hinweis:** Den Pfad `/var/www/intranet/html/module/tasks` ggf. an die tatsächliche Installation anpassen. PHP-Binary-Pfad mit `which php` prüfen.
|
||||
|
||||
---
|
||||
|
||||
## Reihenfolge
|
||||
|
||||
Wenn alle Jobs gleichzeitig laufen sollen, ist die empfohlene Reihenfolge:
|
||||
|
||||
1. `task_cert_materialize_assignments.php` — erst Assignments anlegen
|
||||
2. `task_cert_sync_assignments.php --apply` — dann synchronisieren
|
||||
3. `task_cert_recalculate_escalations.php --apply` — dann Eskalationen berechnen
|
||||
|
||||
Bei getrennten Intervallen (wie oben) ist die Reihenfolge unkritisch.
|
||||
|
||||
---
|
||||
|
||||
## Exit-Codes
|
||||
|
||||
| Code | Bedeutung |
|
||||
|------|-----------|
|
||||
| 0 | Erfolg |
|
||||
| 1 | Fehler (Exception) |
|
||||
| 2 | Ungültige CLI-Parameter |
|
||||
| 3 | Lock aktiv, Job übersprungen |
|
||||
|
||||
---
|
||||
|
||||
## Logging
|
||||
|
||||
### CLI-Ausgabe (stdout/stderr)
|
||||
Jeder Lauf schreibt eine Zeile auf stdout bzw. stderr:
|
||||
- `[OK] sync_assignments (apply) abgeschlossen in 312ms.`
|
||||
- `[SKIP] sync_assignments: Lock aktiv, Job wird übersprungen.`
|
||||
- `[ERROR] sync_assignments (apply): DB-Verbindung fehlgeschlagen`
|
||||
|
||||
Bei `--json` wird stattdessen ein JSON-Objekt auf stdout ausgegeben.
|
||||
|
||||
### Strukturiertes Log
|
||||
Alle Läufe (Erfolg, Fehler, Skip) werden in `logs/task_cert_cron.log` als JSON-Lines geschrieben — unabhängig von der Crontab-Umleitung.
|
||||
|
||||
### Locking
|
||||
Lockfiles liegen in `logs/locks/`:
|
||||
- `task_cert_materialize_assignments.lock`
|
||||
- `task_cert_sync_assignments.lock`
|
||||
- `task_cert_recalculate_escalations.lock`
|
||||
|
||||
---
|
||||
|
||||
## Monitoring (Heartbeat)
|
||||
|
||||
Jeder erfolgreiche Apply-Lauf schreibt einen Timestamp nach `logs/heartbeat/{job}.json`.
|
||||
|
||||
**Status prüfen:**
|
||||
```bash
|
||||
cat logs/heartbeat/materialize_assignments.json
|
||||
cat logs/heartbeat/recalculate_escalations.json
|
||||
cat logs/heartbeat/sync_assignments.json
|
||||
```
|
||||
|
||||
**Admin-Ansicht:** Die Admin-Aufgabenliste zeigt automatisch den letzten erfolgreichen Lauf jedes Jobs am unteren Rand an. Wenn ein Job noch nie gelaufen ist, wird dies rot markiert.
|
||||
|
||||
**Hinweis:** Heartbeat-Dateien werden nur bei **erfolgreichem** Lauf geschrieben. Fehler sind am Ausbleiben des Timestamps erkennbar.
|
||||
|
||||
---
|
||||
|
||||
## Legacy-Endpoints
|
||||
|
||||
Die alten Endpoint-Skripte (`endpoints/admin/`) bleiben als HTTP-Endpoints für die Admin-UI erhalten, sollten aber **nicht mehr per Cron aufgerufen** werden:
|
||||
- `endpoints/admin/materialize_assignments.php`
|
||||
- `endpoints/admin/sync_assignments.php`
|
||||
- `endpoints/admin/recalculate_escalations.php`
|
||||
|
||||
Diese haben kein Locking und keine strukturierte CLI-Ausgabe.
|
||||
Reference in New Issue
Block a user