Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| home-harmening:tools:netzwerk:netzwerk_messen_skript [2024/12/05 06:46] – charmening | home-harmening:tools:netzwerk:netzwerk_messen_skript [2024/12/05 07:02] (aktuell) – charmening | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | {{ : | ||
| ==== Skript um das Netzwerk zu testen ==== | ==== Skript um das Netzwerk zu testen ==== | ||
| Ich stand vor dem Problem, dass ich die einen kompletten Standort durchmessen sollte. Der Vorteil hier \\ | Ich stand vor dem Problem, dass ich die einen kompletten Standort durchmessen sollte. Der Vorteil hier \\ | ||
| Zeile 12: | Zeile 13: | ||
| * Das Ergebnis wird in einem Logfile gespeichert und zum Administationspc gesendet | * Das Ergebnis wird in einem Logfile gespeichert und zum Administationspc gesendet | ||
| * Nach Abschluss aller Messungen werden die Logfiles analysiert und mit php wird ein grafisch aufbereitetes html Dokument erstellt | * Nach Abschluss aller Messungen werden die Logfiles analysiert und mit php wird ein grafisch aufbereitetes html Dokument erstellt | ||
| + | \\ | ||
| + | Um das Skript nutzen zu können müssen im Kopf zuvor einige Variablen festgelegt werden\\ | ||
| + | * str_sshUser = Benutzer der einen SSH Zugang zu allen Systemen besitzt | ||
| + | * str_sshPass = Passwort des Benutzers | ||
| + | * lst_clients = Liste der Clients die getestet werden sollen (z.B 10.0.013 10.0.1.14 ... 10.0.1.220) | ||
| + | * str_server | ||
| + | * bol_json | ||
| + | \\ | ||
| + | Vor beginn muss sich auf den Server aufgeloggt werden und der iper3 Server gestartet werden. | ||
| + | <code Bash> | ||
| \\ | \\ | ||
| === Ordnerstruktur === | === Ordnerstruktur === | ||
| Zeile 101: | Zeile 112: | ||
| cp ${str_baseDir}/ | cp ${str_baseDir}/ | ||
| php ${str_output}/ | php ${str_output}/ | ||
| + | </ | ||
| + | \\ | ||
| + | === present.php === | ||
| + | <code PHP> | ||
| + | <?php | ||
| + | // Verzeichnis, | ||
| + | $directory = __DIR__; | ||
| + | $folderName = basename($directory); | ||
| + | |||
| + | // Alle .txt-Dateien im Verzeichnis finden | ||
| + | $files = glob($directory . '/ | ||
| + | |||
| + | $dataArray = []; | ||
| + | $jitterData = []; | ||
| + | $bandwidthData = []; | ||
| + | $sentPacketsData = []; | ||
| + | $receivedPacketsData = []; | ||
| + | $fileNames = []; | ||
| + | $clientIPs = []; | ||
| + | $serverIPs = []; | ||
| + | |||
| + | // Durch die Dateien iterieren und die JSON-Daten auslesen | ||
| + | foreach ($files as $file) { | ||
| + | $json_data = json_decode(file_get_contents($file), | ||
| + | | ||
| + | // Überprüfen, | ||
| + | $bandwidth = isset($json_data[' | ||
| + | $jitter = isset($json_data[' | ||
| + | $lost_percent = isset($json_data[' | ||
| + | | ||
| + | // Extrahiere gesendete und empfangene Pakete | ||
| + | $sent_packets = isset($json_data[' | ||
| + | $received_packets = isset($json_data[' | ||
| + | |||
| + | // Extrahiere Client und Server IP (Client ist der remote_host und Server der local_host) | ||
| + | $client_ip = isset($json_data[' | ||
| + | $server_ip = isset($json_data[' | ||
| + | |||
| + | // Speichern der Dateinamen und der Daten für jedes Diagramm | ||
| + | // Entfernen der .txt Endung vom Dateinamen | ||
| + | $fileNames[] = basename($file, | ||
| + | $bandwidthData[] = $bandwidth / 1e6; // Bandbreite in Mbit/s (Umrechnung von Bits auf Mbit) | ||
| + | $jitterData[] = $jitter; | ||
| + | $sentPacketsData[] = $sent_packets; | ||
| + | $receivedPacketsData[] = $received_packets; | ||
| + | $clientIPs[] = $client_ip; | ||
| + | $serverIPs[] = $server_ip; | ||
| + | } | ||
| + | ?> | ||
| + | |||
| + | < | ||
| + | <html lang=" | ||
| + | < | ||
| + | <meta charset=" | ||
| + | <meta name=" | ||
| + | < | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | < | ||
| + | body { | ||
| + | font-family: | ||
| + | margin: 0; | ||
| + | padding: 20px; | ||
| + | display: flex; | ||
| + | flex-direction: | ||
| + | align-items: | ||
| + | } | ||
| + | |||
| + | h1, h2 { | ||
| + | text-align: center; | ||
| + | } | ||
| + | |||
| + | .charts-container { | ||
| + | display: flex; | ||
| + | justify-content: | ||
| + | flex-wrap: wrap; | ||
| + | gap: 20px; | ||
| + | } | ||
| + | |||
| + | .chart-container { | ||
| + | width: 45%; /* Jedes Diagramm nimmt 45% der Breite ein */ | ||
| + | min-width: 300px; /* Mindestbreite für jedes Diagramm */ | ||
| + | } | ||
| + | |||
| + | canvas { | ||
| + | width: 100% !important; | ||
| + | height: auto !important; | ||
| + | } | ||
| + | |||
| + | @media (max-width: 768px) { | ||
| + | .chart-container { | ||
| + | width: 100%; /* Auf kleineren Bildschirmen jedes Diagramm auf 100% der Breite setzen */ | ||
| + | } | ||
| + | } | ||
| + | |||
| + | table { | ||
| + | width: 100%; | ||
| + | border-collapse: | ||
| + | margin-top: 20px; | ||
| + | text-align: center; | ||
| + | } | ||
| + | |||
| + | table, th, td { | ||
| + | border: 1px solid #ddd; | ||
| + | } | ||
| + | |||
| + | th, td { | ||
| + | padding: 8px; | ||
| + | } | ||
| + | |||
| + | th { | ||
| + | background-color: | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | <div class=" | ||
| + | <!-- Diagramm für Bandbreite --> | ||
| + | <div class=" | ||
| + | < | ||
| + | <canvas id=" | ||
| + | </ | ||
| + | |||
| + | <!-- Diagramm für Jitter --> | ||
| + | <div class=" | ||
| + | < | ||
| + | <canvas id=" | ||
| + | </ | ||
| + | |||
| + | <!-- Diagramm für gesendete und empfangene Pakete --> | ||
| + | <div class=" | ||
| + | < | ||
| + | <canvas id=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <!-- Tabelle mit den Werten --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | </ | ||
| + | < | ||
| + | <?php for ($i = 0; $i < count($fileNames); | ||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | <?php endfor; ?> | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | // Bandbreiten-Diagramm | ||
| + | var ctx1 = document.getElementById(' | ||
| + | var bandwidthChart = new Chart(ctx1, { | ||
| + | type: ' | ||
| + | data: { | ||
| + | labels: <?php echo json_encode($fileNames); | ||
| + | datasets: [{ | ||
| + | label: ' | ||
| + | data: <?php echo json_encode($bandwidthData); | ||
| + | backgroundColor: | ||
| + | borderColor: | ||
| + | borderWidth: | ||
| + | }] | ||
| + | }, | ||
| + | options: { | ||
| + | responsive: true, | ||
| + | scales: { | ||
| + | y: { | ||
| + | beginAtZero: | ||
| + | } | ||
| + | }, | ||
| + | plugins: { | ||
| + | datalabels: { | ||
| + | display: true, // Werte werden immer angezeigt | ||
| + | align: ' | ||
| + | anchor: ' | ||
| + | font: { | ||
| + | weight: ' | ||
| + | size: 12 | ||
| + | }, | ||
| + | color: '# | ||
| + | formatter: function(value) { | ||
| + | return value.toFixed(2); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | // Jitter-Diagramm | ||
| + | var ctx2 = document.getElementById(' | ||
| + | var jitterChart = new Chart(ctx2, { | ||
| + | type: ' | ||
| + | data: { | ||
| + | labels: <?php echo json_encode($fileNames); | ||
| + | datasets: [{ | ||
| + | label: ' | ||
| + | data: <?php echo json_encode($jitterData); | ||
| + | backgroundColor: | ||
| + | borderColor: | ||
| + | borderWidth: | ||
| + | }] | ||
| + | }, | ||
| + | options: { | ||
| + | responsive: true, | ||
| + | scales: { | ||
| + | y: { | ||
| + | beginAtZero: | ||
| + | } | ||
| + | }, | ||
| + | plugins: { | ||
| + | datalabels: { | ||
| + | display: true, // Werte werden immer angezeigt | ||
| + | align: ' | ||
| + | anchor: ' | ||
| + | font: { | ||
| + | weight: ' | ||
| + | size: 12 | ||
| + | }, | ||
| + | color: '# | ||
| + | formatter: function(value) { | ||
| + | return value.toFixed(2); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | |||
| + | // Gesendete/ | ||
| + | var ctx3 = document.getElementById(' | ||
| + | var packetsChart = new Chart(ctx3, { | ||
| + | type: ' | ||
| + | data: { | ||
| + | labels: <?php echo json_encode($fileNames); | ||
| + | datasets: [ | ||
| + | { | ||
| + | label: ' | ||
| + | data: <?php echo json_encode($sentPacketsData); | ||
| + | backgroundColor: | ||
| + | borderColor: | ||
| + | borderWidth: | ||
| + | }, | ||
| + | { | ||
| + | label: ' | ||
| + | data: <?php echo json_encode($receivedPacketsData); | ||
| + | backgroundColor: | ||
| + | borderColor: | ||
| + | borderWidth: | ||
| + | } | ||
| + | ] | ||
| + | }, | ||
| + | options: { | ||
| + | responsive: true, | ||
| + | scales: { | ||
| + | y: { | ||
| + | beginAtZero: | ||
| + | } | ||
| + | }, | ||
| + | plugins: { | ||
| + | datalabels: { | ||
| + | display: true, // Werte werden immer angezeigt | ||
| + | align: ' | ||
| + | anchor: ' | ||
| + | font: { | ||
| + | weight: ' | ||
| + | size: 12 | ||
| + | }, | ||
| + | color: '# | ||
| + | formatter: function(value) { | ||
| + | return value; | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | </ | ||
| </ | </ | ||