91 lines
3.9 KiB
Markdown
91 lines
3.9 KiB
Markdown
# 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.
|