Compare commits
2 commits
8fc35948ee
...
9bea09845f
| Author | SHA1 | Date | |
|---|---|---|---|
| 9bea09845f | |||
| 4fcd356972 |
4 changed files with 120 additions and 1 deletions
24
ChangeLog.md
24
ChangeLog.md
|
|
@ -1,5 +1,29 @@
|
||||||
# Changelog NetDiag
|
# Changelog NetDiag
|
||||||
|
|
||||||
|
## 1.1.7 — 2026-08-17
|
||||||
|
|
||||||
|
### PDF-Zweig und Feldtabelle für den Geräte-Vergleich
|
||||||
|
|
||||||
|
`netdiagPdfGeraeteDiff()` gibt die drei Listen getrennt aus: neu hinzugekommen,
|
||||||
|
nicht mehr erreichbar, mit neuer IP-Adresse — plus „Gleiche Adresse, andere
|
||||||
|
offene Ports". Beim Wiederholungstermin zählt, WELCHES Gerät neu ist, nicht nur
|
||||||
|
wie viele; als `|`-Kette in einer Zelle wäre das vorhanden, aber nicht lesbar.
|
||||||
|
|
||||||
|
An jeder Zeile steht, worüber das Gerät wiedererkannt wurde. „Erkannt über IP
|
||||||
|
und Portmuster" ist eine schwächere Aussage als „über Netzwerkname", und dieser
|
||||||
|
Unterschied gehört ins Dokument statt in eine Fußnote — die Wiedererkennung
|
||||||
|
läuft bewusst nicht über MAC-Adressen, die Android seit Version 10 nicht mehr
|
||||||
|
herausgibt.
|
||||||
|
|
||||||
|
Neu in der Whitelist: `verglichenMit`, `geraeteVorher`, `geraeteJetzt`,
|
||||||
|
`mitNeuerAdresse`, `andereOffenePorts`, `unveraendert`; Werkzeugname
|
||||||
|
`geraetediff` → „Geräte-Vergleich". `neu` und `nichtMehrErreichbar` standen
|
||||||
|
bereits drin (der IP-Scan nutzt dieselben Schlüssel).
|
||||||
|
|
||||||
|
Geprüft im Durchstich: in der App gegen echte Serverdaten gemessen
|
||||||
|
(Vergleich ND2026-0016 gegen ND2026-0006), synchronisiert, PDF erzeugt und
|
||||||
|
angesehen.
|
||||||
|
|
||||||
## 1.1.6 — 2026-08-17
|
## 1.1.6 — 2026-08-17
|
||||||
|
|
||||||
### PDF-Zweig für die DNS-Prüfung
|
### PDF-Zweig für die DNS-Prüfung
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ class modNetDiag extends DolibarrModules
|
||||||
$this->editor_url = '';
|
$this->editor_url = '';
|
||||||
$this->editor_squarred_logo = '';
|
$this->editor_squarred_logo = '';
|
||||||
|
|
||||||
$this->version = '1.1.6';
|
$this->version = '1.1.7';
|
||||||
|
|
||||||
// Konstanten-Name in llx_const für Modul-Status
|
// Konstanten-Name in llx_const für Modul-Status
|
||||||
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,14 @@ function netdiagKundenfelder()
|
||||||
// eigentliche Aussage — welcher Server antwortet und welcher nicht.
|
// eigentliche Aussage — welcher Server antwortet und welcher nicht.
|
||||||
'gefragteServer' => array('Befragte DNS-Server', ''),
|
'gefragteServer' => array('Befragte DNS-Server', ''),
|
||||||
'antworten' => array('Antworten der Server', ''),
|
'antworten' => array('Antworten der Server', ''),
|
||||||
|
// Geräte-Vergleich zweier Protokolle. `neu` und `nichtMehrErreichbar`
|
||||||
|
// stehen schon weiter oben (IP-Scan nutzt dieselben Schlüssel).
|
||||||
|
'verglichenMit' => array('Verglichen mit', ''),
|
||||||
|
'geraeteVorher' => array('Geräte beim letzten Besuch', ''),
|
||||||
|
'geraeteJetzt' => array('Geräte jetzt', ''),
|
||||||
|
'mitNeuerAdresse' => array('Mit neuer IP-Adresse', ''),
|
||||||
|
'andereOffenePorts' => array('Gleiche Adresse, andere offene Ports', ''),
|
||||||
|
'unveraendert' => array('Unverändert', ''),
|
||||||
// Netz/DHCP
|
// Netz/DHCP
|
||||||
'server' => array('DHCP-Server', ''),
|
'server' => array('DHCP-Server', ''),
|
||||||
'lease' => array('Lease-Dauer', 's'),
|
'lease' => array('Lease-Dauer', 's'),
|
||||||
|
|
@ -652,6 +660,7 @@ function netdiagToolName($tool)
|
||||||
'iptest' => 'IP-Test (Dose)',
|
'iptest' => 'IP-Test (Dose)',
|
||||||
'wifitrack' => 'WLAN-Empfang',
|
'wifitrack' => 'WLAN-Empfang',
|
||||||
'dnscheck' => 'DNS-Prüfung',
|
'dnscheck' => 'DNS-Prüfung',
|
||||||
|
'geraetediff' => 'Geräte-Vergleich',
|
||||||
// nicht mehr vorhandene Werkzeuge, aber in Altprotokollen enthalten
|
// nicht mehr vorhandene Werkzeuge, aber in Altprotokollen enthalten
|
||||||
'dhcpcheck' => 'DHCP-Prüfung',
|
'dhcpcheck' => 'DHCP-Prüfung',
|
||||||
'wifiscan' => 'WLAN-Scan',
|
'wifiscan' => 'WLAN-Scan',
|
||||||
|
|
|
||||||
|
|
@ -222,6 +222,8 @@ function netdiagGeneratePdf($db, $protocol, $outputlangs)
|
||||||
netdiagPdfKette($pdf, $m->result);
|
netdiagPdfKette($pdf, $m->result);
|
||||||
} elseif ($m->tool === 'dnscheck') {
|
} elseif ($m->tool === 'dnscheck') {
|
||||||
netdiagPdfDns($pdf, $m->result);
|
netdiagPdfDns($pdf, $m->result);
|
||||||
|
} elseif ($m->tool === 'geraetediff') {
|
||||||
|
netdiagPdfGeraeteDiff($pdf, $m->result);
|
||||||
} else {
|
} else {
|
||||||
$pdf->MultiCell(180, 5, netdiagPdfFlattenResult($m->result), 1, 'L');
|
$pdf->MultiCell(180, 5, netdiagPdfFlattenResult($m->result), 1, 'L');
|
||||||
}
|
}
|
||||||
|
|
@ -437,6 +439,90 @@ function netdiagPdfStressTest($pdf, $json)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Geräte-Vergleich ins PDF schreiben: drei getrennte Listen.
|
||||||
|
*
|
||||||
|
* „Was hat sich seit dem letzten Besuch geändert" ist beim Wiederholungstermin
|
||||||
|
* die erste Frage des Kunden. Als `|`-Kette in einer Zelle wäre die Antwort
|
||||||
|
* vorhanden, aber nicht lesbar — und gerade hier zählt, WELCHES Gerät neu ist
|
||||||
|
* und welches fehlt, nicht nur wie viele.
|
||||||
|
*
|
||||||
|
* Die Angabe, worüber ein Gerät wiedererkannt wurde, bleibt bewusst an jeder
|
||||||
|
* Zeile stehen: „erkannt über IP und Portmuster" ist eine schwächere Aussage
|
||||||
|
* als „erkannt über Netzwerkname", und der Unterschied gehört ins Dokument
|
||||||
|
* statt in eine Fußnote.
|
||||||
|
*
|
||||||
|
* @param TCPDF $pdf PDF-Objekt (Cursor steht direkt hinter der Titelzeile)
|
||||||
|
* @param string $json result-JSON der Messung
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function netdiagPdfGeraeteDiff($pdf, $json)
|
||||||
|
{
|
||||||
|
$data = json_decode((string) $json, true);
|
||||||
|
if (!is_array($data)) {
|
||||||
|
$pdf->MultiCell(180, 5, netdiagPdfFlattenResult($json), 1, 'L');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sum = array();
|
||||||
|
if (!empty($data['verglichenMit'])) {
|
||||||
|
$sum[] = 'Verglichen mit '.$data['verglichenMit'];
|
||||||
|
}
|
||||||
|
if (isset($data['geraeteVorher'])) {
|
||||||
|
$sum[] = 'damals '.$data['geraeteVorher'].' Geräte';
|
||||||
|
}
|
||||||
|
if (isset($data['geraeteJetzt'])) {
|
||||||
|
$sum[] = 'jetzt '.$data['geraeteJetzt'];
|
||||||
|
}
|
||||||
|
if (isset($data['unveraendert'])) {
|
||||||
|
$sum[] = $data['unveraendert'].' unverändert';
|
||||||
|
}
|
||||||
|
if (!empty($sum)) {
|
||||||
|
$pdf->MultiCell(180, 5, netdiagPdfText(implode(' | ', $sum)), 1, 'L');
|
||||||
|
}
|
||||||
|
|
||||||
|
$listen = array(
|
||||||
|
'neu' => 'Neu hinzugekommen',
|
||||||
|
'nichtMehrErreichbar' => 'Nicht mehr erreichbar',
|
||||||
|
'mitNeuerAdresse' => 'Mit neuer IP-Adresse',
|
||||||
|
'andereOffenePorts' => 'Gleiche Adresse, andere offene Ports',
|
||||||
|
);
|
||||||
|
$etwasGefunden = false;
|
||||||
|
foreach ($listen as $feld => $titel) {
|
||||||
|
$eintraege = (isset($data[$feld]) && is_array($data[$feld])) ? $data[$feld] : array();
|
||||||
|
if (empty($eintraege)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$etwasGefunden = true;
|
||||||
|
netdiagPdfEnsureSpace($pdf, 10);
|
||||||
|
$pdf->SetFont('', 'B', 8);
|
||||||
|
$pdf->Cell(180, 5, $titel.' ('.count($eintraege).')', 1, 1, 'L');
|
||||||
|
$pdf->SetFont('', '', 8);
|
||||||
|
foreach ($eintraege as $line) {
|
||||||
|
netdiagPdfEnsureSpace($pdf, 5, function ($p) use ($titel) {
|
||||||
|
$p->SetFont('', 'B', 8);
|
||||||
|
$p->Cell(180, 5, $titel.' — Fortsetzung', 1, 1, 'L');
|
||||||
|
$p->SetFont('', '', 8);
|
||||||
|
});
|
||||||
|
$pdf->MultiCell(180, 5, netdiagPdfText(netdiagKundentext((string) $line)), 1, 'L');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$etwasGefunden) {
|
||||||
|
$pdf->SetFont('', 'I', 8);
|
||||||
|
$pdf->Cell(180, 5, 'Keine Veränderung gegenüber dem letzten Protokoll.', 1, 1, 'L');
|
||||||
|
$pdf->SetFont('', '', 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (array('hinweis', 'verfahren') as $feld) {
|
||||||
|
if (!empty($data[$feld])) {
|
||||||
|
netdiagPdfEnsureSpace($pdf, 8);
|
||||||
|
$pdf->SetFont('', 'I', 7);
|
||||||
|
$pdf->MultiCell(180, 4, netdiagPdfText(netdiagKundentext((string) $data[$feld])), 1, 'L');
|
||||||
|
$pdf->SetFont('', '', 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DNS-Prüfung ins PDF schreiben: je Server eine eigene Zeile.
|
* DNS-Prüfung ins PDF schreiben: je Server eine eigene Zeile.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue