Dolibarr-Modul NetDiag — Netzwerk-Diagnose-Protokolle, JSON-API für die NetDiag-App
Find a file
Eduard Wisch b2ab430ae7 Internet-Kette im PDF + Pfeile wurden als "?" gedruckt
netdiagPdfKette() fuer das neue App-Werkzeug: Fehlerglied als eigene
hervorgehobene Zeile, darunter die vier Stufen einzeln, dann Systemurteil
und Hinweis. Ohne eigenen Zweig stuenden die Stufen als |-Kette in einer
Zelle und das Fehlerglied - die eigentliche Aussage - mittendrin.

Dabei ein Fehler gefunden, der jedes Protokoll betrifft: pdf_getPDFFont()
liefert Helvetica, einen Core-Font mit WinAnsi-Kodierung. Alles ausserhalb
dieses Zeichenvorrats setzt TCPDF wortlos als "?" (KB #1025). Aufgefallen
an "www.google.de -> 142.250.185.67", das im Kundendokument als
"www.google.de ? 142.250.185.67" ankam. netdiagPdfText() ersetzt die
betroffenen Zeichen jetzt in ALLEN PDF-Zweigen, also auch fuer Altdaten.
Bewusst keine Unicode-Schrift: dejavusans wuerde Schriftbild und Dateigroesse
aller Protokolle aendern. Gedankenstrich, Mittelpunkt und Anfuehrungszeichen
sind in WinAnsi enthalten und bleiben unangetastet (nachgeprueft).

Feld-Whitelist um fehlerglied, stufen, systemUrteil, validated und
captivePortal erweitert. Die letzten beiden kommen aus dem LinkInfo-Objekt
und erscheinen damit auch beim IP-Test an der Dose.

Geprueft an vier Faellen gegen die lokale Testinstanz, zwei davon die echten
Emulator-Messungen dieser Nacht (Gutfall und Flugmodus).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 22:59:49 +02:00
.forgejo/workflows Initiales Commit — Dolibarr-Modul NetDiag [deploy] 2026-05-19 12:12:11 +02:00
admin Initiales Commit — Dolibarr-Modul NetDiag [deploy] 2026-05-19 12:12:11 +02:00
api Vier Bestandsfehler im Kundendokument und im Sync behoben 2026-08-16 19:02:11 +02:00
class Phase 5 abgeschlossen: Klarnamen, Parameter, Listen-Ampel, N+1, Standort 2026-08-16 11:09:28 +02:00
core/modules Internet-Kette im PDF + Pfeile wurden als "?" gedruckt 2026-08-16 22:59:49 +02:00
langs Phase 5 abgeschlossen: Klarnamen, Parameter, Listen-Ampel, N+1, Standort 2026-08-16 11:09:28 +02:00
lib Internet-Kette im PDF + Pfeile wurden als "?" gedruckt 2026-08-16 22:59:49 +02:00
sql Phase 5: Kundendokument lesbar, Gerätemerkmale kommen endlich an 2026-08-15 18:54:01 +02:00
ChangeLog.md Internet-Kette im PDF + Pfeile wurden als "?" gedruckt 2026-08-16 22:59:49 +02:00
netdiag_object_tab.php Initiales Commit — Dolibarr-Modul NetDiag [deploy] 2026-05-19 12:12:11 +02:00
netdiagindex.php Phase 5 abgeschlossen: Klarnamen, Parameter, Listen-Ampel, N+1, Standort 2026-08-16 11:09:28 +02:00
netdiagprotocol_card.php Phase 5 abgeschlossen: Klarnamen, Parameter, Listen-Ampel, N+1, Standort 2026-08-16 11:09:28 +02:00
README.md Doku + Version 1.1.1: die Whitelist-Falle steht jetzt im README [deploy] 2026-08-16 19:56:10 +02:00

NetDiag — Netzwerk-Diagnose für Dolibarr

Dolibarr-Modul für die Ablage von Netzwerk-Diagnose-Protokollen. Erfasst per mobiler App (siehe Projekt NetzwerkDiagnose/app) gefundene Geräte, Ports und Messungen und hängt die Protokolle dauerhaft an Kunde und Auftrag.

Funktionen

  • Datenmodell: Protokoll → Geräte → Messungen (llx_netdiag_*)
  • Tab Netzwerk-Diagnose an Kunde (thirdparty) und Auftrag (commande)
  • JSON-API unter /custom/netdiag/api/ für die mobile App. Anmeldung seit v1.1.0 über das zentrale Auth-Modul awlauth (Brute-Force-Bremse, gemeinsame Sitzungsliste, „Gerät abmelden"); der alte modul-eigene JWT-Pfad bleibt als Rückfall, bis alle Geräte die neue APK haben
  • PDF-Protokoll, wird im Dokumentenarchiv (ECM) abgelegt
  • Zwei Sichten auf dieselben Messdaten: die Technikeransicht zeigt alles, das Kunden-PDF nur eine Whitelist (siehe „Neue Messart" unten)
  • Rechtesystem: netdiag → protocol → read/write/delete
  • Mehrsprachig (de_DE, en_US)
  • QR-Code zum App-Download in der Modul-Einrichtung

Installation

  1. Verzeichnis netdiag/ nach htdocs/custom/ auf den Dolibarr-Server kopieren. Auf dem Produktivsystem übernimmt das die Forgejo-Pipeline (.forgejo/workflows/deploy.yml) — Commit mit [deploy] in der Message synct das Modul automatisch auf den Server.
  2. In Dolibarr: Einrichtung → Module → NetDiag aktivieren.
  3. Beim Aktivieren werden die Tabellen llx_netdiag_protocol, llx_netdiag_device, llx_netdiag_measurement angelegt und ein JWT-Schlüssel erzeugt.
  4. Benutzern das Recht NetDiag → Protokolle lesen/schreiben geben.

API-Endpunkte

Alle unter https://<dolibarr>/custom/netdiag/api/:

Endpunkt Methode Zweck
auth.php POST {login,password} Anmeldung → {token,expiresIn,user}
customers.php GET ?q= / ?id= Kundensuche / Kundendetail
orders.php GET ?open=1&q= / ?id= Auftragsliste / Auftragsdetail
protocols.php GET ?id= Protokoll mit Geräten + Messungen
protocols.php POST {action:"sync",protocol:{…}} Protokoll anlegen/aktualisieren (idempotent über clientUuid)
pdf.php GET ?id=&jwt= Protokoll-PDF streamen

Authentifizierung per Authorization: Bearer <token> oder ?jwt=<token>. Jeder Endpunkt prüft ein Recht — protocols.php im GET-Zweig protocol read oder write: die Rechte sind in Dolibarr einzeln vergebbar, und ein Techniker mit Schreib- ohne ausdrückliches Leserecht darf nicht ausgesperrt werden (das fiele erst beim Kunden auf).

?jwt= in der URL ist nur für den PDF-Download da (der Browser kann dort keinen Header setzen). Langzeit-Token in URLs landen in Zugriffs- und Proxy-Logs — Ablösung steht in ROADMAP_UMSETZUNG.md, Phase L5.

Neue Messart aus der App aufnehmen

Die App schickt Messergebnisse als freies JSON. Damit ein Feld beim Kunden ankommt, sind drei Stellen in lib/netdiag.lib.php zu pflegen:

Funktion Zweck Wenn vergessen
netdiagKundenfelder() Whitelist + Beschriftung + Einheit Feld verschwindet im Kunden-PDF spurlos, übrig bleibt die Ampel
netdiagToolName() Klarname des Werkzeugs beim Kunden steht „[netzwerk] meintool"
netdiagKundentext() Rohwerte übersetzen/entschärfen englische API-Werte im deutschen Abnahmedokument

Spiegelbildlich dazu app/src/lib/messfelder.ts in der App.

Feldnamen immer aus dem erzeugenden Code der App ablesen (types.ts, die run()-Rümpfe der Werkzeuge), nie aus dem Kopf und nie aus selbst geschriebenen Testdaten — das ist hier schon zweimal schiefgegangen (KB #1084). Braucht die Messart eine eigene Tabellendarstellung im PDF, einen Zweig in lib/netdiag_pdf.lib.php ergänzen (Vorbilder: netdiagPdfStressTest, netdiagPdfWifiKanal) — sonst wird das Ergebnis zu einer |-getrennten Zeile zusammengeschoben.

Einrichtung

Einrichtung → Module → NetDiag → Einstellungen:

  • Token-Gültigkeit (Sekunden)
  • App-Download-URL (APK) — wird als QR-Code angezeigt

Lizenz

GPLv3