monitor/api
fds2610-bot 3efa0ee423 Codeberg-Webhook fuer Sofort-Sync statt Warten auf den Polling-Lauf
Aenderungen an Codeberg-Issues landeten bisher erst beim naechsten Lauf des
sync-Services auf dem Board (MONITOR_SYNC_INTERVAL, Default 600s). Neu meldet
Codeberg jede Aenderung aktiv per Webhook, der Weg aufs Board dauert damit
wenige Sekunden (Webhook -> Sync -> SSE-Push ans Frontend).

POST /api/v1/webhooks/codeberg wertet den Payload bewusst nicht aus, sondern
fordert nur einen regulaeren Sync an - CodebergSyncService bleibt die einzige
Stelle, die Issues auf Tickets abbildet, und ein verpasster Webhook ist
folgenlos, weil der periodische Lauf denselben Stand ohnehin nachholt.

Der Sync passiert nicht im Request: Forgejo bricht die Zustellung nach wenigen
Sekunden ab (DELIVER_TIMEOUT, Default 5s), ein Sync macht aber mehrere Requests
nach codeberg.org. Der Endpunkt setzt daher nur eine Trigger-Datei im
gemeinsamen ./api-Volume (Sync\SyncTrigger) und antwortet sofort mit 202; der
sync-Service laeuft jetzt im Watch-Modus und greift sie im Sekundentakt auf.

Authentifiziert wird per HMAC-SHA256 ueber den rohen Request-Body
(X-Forgejo-Signature bzw. X-Gitea-Signature) - Codeberg kennt unsere API-Keys
nicht. Ohne gesetztes CODEBERG_WEBHOOK_SECRET weist der Endpunkt grundsaetzlich
mit 401 ab, damit ein vergessenes Secret keinen offenen Sync-Ausloeser im
Internet hinterlaesst. Request traegt dafuer neu den unveraenderten rawBody.

Anders als der sync-Service braucht der api-Service damit eine eingehende
Freigabe in Proxy und Firewall (POST /api/v1/webhooks/codeberg).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 21:04:06 +02:00
..
bin Codeberg-Webhook fuer Sofort-Sync statt Warten auf den Polling-Lauf 2026-07-29 21:04:06 +02:00
docker Phase 1 der Neuausrichtung: REST-API fuer Tickets/Events/Systeme/KPIs/Agenten 2026-07-27 19:38:52 +02:00
public Phase 1 der Neuausrichtung: REST-API fuer Tickets/Events/Systeme/KPIs/Agenten 2026-07-27 19:38:52 +02:00
src Codeberg-Webhook fuer Sofort-Sync statt Warten auf den Polling-Lauf 2026-07-29 21:04:06 +02:00
tests/Unit Codeberg-Webhook fuer Sofort-Sync statt Warten auf den Polling-Lauf 2026-07-29 21:04:06 +02:00
.dockerignore Phase 1 der Neuausrichtung: REST-API fuer Tickets/Events/Systeme/KPIs/Agenten 2026-07-27 19:38:52 +02:00
composer.json Phase 1 der Neuausrichtung: REST-API fuer Tickets/Events/Systeme/KPIs/Agenten 2026-07-27 19:38:52 +02:00
composer.lock composer.lock einchecken 2026-07-27 20:17:18 +02:00
phpunit.xml Phase 1 der Neuausrichtung: REST-API fuer Tickets/Events/Systeme/KPIs/Agenten 2026-07-27 19:38:52 +02:00
README.md Codeberg-Sync als Dauerlaeufer statt manuellem Aufruf 2026-07-28 23:29:40 +02:00

monitor REST-API (Phase 1)

Vanilla-PHP-REST-API (kein Framework, siehe Visualization.md Abschnitt 5) fuer Tickets, Events, Systeme, KPIs und Agenten. Persistenz in SQLite (api/data/monitor.sqlite).

Vollstaendige Endpunkt-Dokumentation: ../API.md.

Entwicklung nur mit Docker (kein lokales PHP/Composer noetig)

Aus dem Repo-Wurzelverzeichnis:

cp .env.example .env   # einmalig, MONITOR_ADMIN_API_KEY anpassen

docker compose up --build       # startet die API auf http://localhost:8080
docker compose run --rm api composer test   # PHPUnit inkl. Coverage
docker compose run --rm api php bin/sync-codeberg.php   # Backlog/Done einmalig ziehen (Debug)

Im laufenden Betrieb wird der Codeberg-Sync nicht manuell angestossen, sondern vom Compose-Service sync alle MONITOR_SYNC_INTERVAL Sekunden ausgefuehrt (siehe ../API.md, Abschnitt "Codeberg-Sync").

Composer-Abhaengigkeiten (nur PHPUnit als Dev-Dependency) werden beim ersten Start automatisch im Container installiert (docker/entrypoint.sh) - auf dem Host ist weder PHP noch Composer noch SQLite erforderlich.