Wartung
Regelmäßige Aufgaben
Die folgenden Befehle sollten regelmäßig ausgeführt werden (z.B. täglich per Cron-Job).
Abgelaufene JWT-Token entfernen
Bereinigt die Token-Blacklist von abgelaufenen Einträgen:
docker exec resource-planning-restapi python manage.py flushexpiredtokens
Abgelaufene Benutzer-Token entfernen
Entfernt abgelaufene Token für Passwort-Reset und E-Mail-Änderung:
docker exec resource-planning-restapi python manage.py remove_outdated_user_tokens
Beispiel Cron-Job
# Täglich um 3:00 Uhr
0 3 * * * docker exec resource-planning-restapi python manage.py flushexpiredtokens
0 3 * * * docker exec resource-planning-restapi python manage.py remove_outdated_user_tokens
Updates
Images aktualisieren
docker compose pull
docker compose up -d
Datenbank-Migrationen werden beim Start des API-Containers automatisch ausgeführt.
Bestimmte Version
Passen Sie das Image-Tag in der docker-compose.yml an:
image: dr.swilk.eu/sw/bpn/resource-planning-restapi:v3.3.0
Bestehende Zeiträume in einen Terminplan überführen
Einsatzarten können ihre Einsatzzeiträume aus einem zentralen Terminplan beziehen statt aus der Einzelplanung. In einer gewachsenen Installation sind die betreffenden Zeiträume aber bereits Auszubildendem für Auszubildendem eingetragen — meist tausendfach derselbe Schulblock.
Dafür gibt es einen Befehl, der die Blöcke, die ein Jahrgang ohnehin gemeinsam hat, in den Terminplan der Einsatzart hebt:
docker exec -it resource-planning-restapi \
python manage.py migrate_uniform_dates "Schulblock"
Ohne --apply läuft der Befehl in einer Transaktion, die am Ende zurückgerollt wird. Der ausgegebene Bericht ist damit keine Vorhersage, sondern eine Messung dessen, was ein Durchlauf mit --apply tatsächlich tut.
| Option | Bedeutung |
|---|---|
operationtype | Name oder ID der Einsatzart. Pflichtangabe. |
--threshold | Welcher Anteil eines Jahrgangs einen Block halten muss, damit er als dessen Block gilt. Standard 0.5. |
--no-partner | Keinen festen Praxispartner setzen — etwa, wenn die Auszubildenden an verschiedenen Orten sind. |
--apply | Übernehmen statt zurückrollen. |
--apply, dann mitLassen Sie den Befehl immer zuerst ohne --apply laufen und lesen Sie den Bericht. Übernommen wird erst beim zweiten Durchlauf.
Zeiträume, die nur einzelne Auszubildende haben — jemand, der ein Jahr wiederholt hat, oder ein um zwei Wochen verlängerter Block —, werden nicht in den Terminplan gehoben. Sie bleiben als unverwaltete Zeiträume samt ihren Fehlzeiten erhalten. Solange die Einsatzart einheitliche Termine nutzt, sind sie nicht bearbeitbar; wird der Schalter wieder ausgeschaltet, sind sie es erneut.
Der Befehl schreibt und löscht Einsatzzeiträume vieler Auszubildender. Legen Sie vor einem Durchlauf mit --apply ein Datenbank-Backup an, siehe unten.
Backup
Datenbank-Backup
docker exec resource-planning-db pg_dump -U $DJANGO_DB_USER $DJANGO_DB_NAME > backup_$(date +%Y%m%d).sql
Datenbank-Restore
cat backup.sql | docker exec -i resource-planning-db psql -U $DJANGO_DB_USER $DJANGO_DB_NAME
Logs
API-Logs einsehen
docker logs resource-planning-restapi
Datenbank-Logs
docker logs resource-planning-db
Healthcheck
Der API-Container führt automatisch einen Healthcheck durch. Der Status ist sichtbar über:
docker inspect --format='{{.State.Health.Status}}' resource-planning-restapi
Der Autoheal-Container startet fehlerhafte Container automatisch neu.