Files
2026-06-29 09:52:02 +02:00

91 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EPI-Support Monitor
Interne Überwachungs- und **Auswertungsplattform** für die Tickets auf
`epi-helpdesk.zammad.com`. Die Anwendung ruft regelmäßig alle sichtbaren Tickets
über die Zammad-API ab, vergleicht sie mit dem letzten Stand und protokolliert
**Änderungen durch die Support-Agenten** (Status, Bearbeiter, Priorität,
Schließung, neue Antworten). Optional gibt es E-Mail-Alerts.
Das interne Dashboard bietet:
* **Übersicht** alle Tickets mit Statusfilter und „ungelesene Änderungen“
* **Änderungs-Verlauf** Feed + Timeline pro Ticket (wer/was/wann geändert)
* **Auswertung** KPIs (Aufkommen, offen/geschlossen, eskaliert), Median/Ø/P90
von Reaktions- und Lösungszeit, Zeitverlauf pro Monat (SVG-Diagramm) sowie
Verteilungen nach Status, Priorität, Gruppe und **Agent**; Zeitraumfilter
(30/90/180/365 Tage/gesamt)
* **Excel-Export** komplette Auswertung als `.xlsx` (KPIs, Verteilungen,
Monatswerte, Tickets, Änderungen)
* **Konversation lesen** vollständiger Nachrichtenverlauf je Ticket
(Absenderrolle, Datum, Text). HTML wird sicher zu Text bereinigt keine
nachgeladenen Bilder/Tracking, kein eingebetteter Schadcode.
* **Antworten & neue Tickets** direkt aus der Plattform an EPI; jede
Schreibaktion läuft über eine **Bestätigungsseite** (Schutz vor
versehentlichem Senden). Schreibzugriff nutzt CSRF (Session) bzw. den
`ZAMMAD_TOKEN`.
> **Hinweis zum Versand:** Der Sende-Pfad (`create_article`/`create_ticket`,
> Artikeltyp `web`) ist gebaut und geprüft, aber bewusst **nicht live getestet**,
> um keine echten Nachrichten an EPI auszulösen. Der erste echte Versand sollte
> kontrolliert erfolgen; sollte EPI den Artikeltyp ablehnen, ggf. auf `note`
> umstellen (in `app/zammad.py`).
Da auf der Zammad-Instanz „API password access" deaktiviert ist, meldet sich
die App per **Session-Login** an (wie der Browser). Sobald ein persönlicher
**API-Token** verfügbar ist, einfach `ZAMMAD_TOKEN` in der `.env` setzen dann
wird der Token bevorzugt verwendet.
## Architektur
| Komponente | Aufgabe |
|------------|---------|
| `episupport-poller` (systemd) | Hintergrund-Abruf alle `POLL_INTERVAL_SECONDS`, Änderungserkennung, E-Mail |
| `episupport-web` (systemd, gunicorn) | Flask-Dashboard auf `127.0.0.1:8071` |
| Apache `conf-available/episupport.conf` | Reverse-Proxy `srhnweb/episupport` → gunicorn |
| `data/episupport.db` (SQLite, WAL) | Ticket-Snapshots, Änderungs-Log, Abrufprotokoll |
## Deployment auf SRHNWEB
```bash
# 1. Dateien auf den Server bringen, Zielordner /var/www/html/episupport
# (z. B. per scp/rsync/git)
# 2. Setup ausführen
sudo bash /var/www/html/episupport/deploy/setup.sh
# 3. Zugangsdaten eintragen
sudo nano /var/www/html/episupport/.env # ZAMMAD_USER / ZAMMAD_PASSWORD
sudo systemctl restart episupport-poller episupport-web
```
Danach erreichbar unter **`http(s)://srhnweb/episupport`**.
### Updates einspielen
Neue Dateien nach `/var/www/html/episupport` kopieren, dann erneut
`sudo bash deploy/setup.sh` (installiert Abhängigkeiten neu und startet Dienste).
## Konfiguration (`.env`)
Siehe `.env.example`. Wichtig: `ZAMMAD_USER`/`ZAMMAD_PASSWORD` **oder**
`ZAMMAD_TOKEN`. E-Mail-Benachrichtigung über `NOTIFY_ENABLED=true` + SMTP-Daten.
## Lokaler Test (Entwicklung)
```bash
python -m venv venv && venv/bin/pip install -r requirements.txt
cp .env.example .env # ausfüllen
venv/bin/python run_poller.py # einmal laufen lassen -> Basis-Snapshot
venv/bin/python wsgi.py # Dashboard auf http://127.0.0.1:8071/episupport
```
## Logs
```bash
journalctl -u episupport-poller -f
journalctl -u episupport-web -f
```
## Sicherheit
- `.env` enthält Zugangsdaten → Rechte 640, nicht ins Git committen (`.gitignore`).
- Zugriff aufs Dashboard ggf. in `episupport-apache.conf` per `Require ip` aufs
interne Netz beschränken.
- Für den Dauerbetrieb einen eigenen, einzeln widerrufbaren API-Token statt des
Passworts verwenden.