// DOM-Element-Referenzen const navButtons = document.querySelectorAll('.nav-button'); const panels = document.querySelectorAll('.panel'); // Panel-Navigation navButtons.forEach(button => { button.addEventListener('click', () => { const targetPanel = button.dataset.target; // Aktiven Button und Panel wechseln navButtons.forEach(btn => btn.classList.remove('active')); panels.forEach(panel => panel.classList.remove('active')); button.classList.add('active'); document.getElementById(targetPanel).classList.add('active'); }); }); // Automatische Aktualisierung der Daten const updateInterval = 10000; // 10 Sekunden // Initialisierung und erste Datenladung document.addEventListener('DOMContentLoaded', () => { // Systemdaten laden loadSystemInfo(); // Netzwerkdaten laden loadNetworkInfo(); // Docker-Daten laden loadDockerInfo(); // Backend-Status laden loadBackendStatus(); // Event-Listener für die Netzwerk-Tools document.getElementById('ping-button').addEventListener('click', performPing); document.getElementById('traceroute-button').addEventListener('click', performTraceroute); document.getElementById('nslookup-button').addEventListener('click', performNSLookup); // Automatische Aktualisierung einrichten setInterval(() => { if (document.getElementById('system-panel').classList.contains('active')) { loadSystemInfo(); } else if (document.getElementById('network-panel').classList.contains('active')) { loadNetworkInfo(); } else if (document.getElementById('docker-panel').classList.contains('active')) { loadDockerInfo(); } else if (document.getElementById('backend-panel').classList.contains('active')) { loadBackendStatus(); } }, updateInterval); }); // API-Anfragen async function fetchData(endpoint) { try { const response = await fetch(endpoint); if (!response.ok) { throw new Error(`HTTP-Fehler! Status: ${response.status}`); } return await response.json(); } catch (error) { console.error(`Fehler beim Abrufen von ${endpoint}:`, error); return null; } } // System-Informationen laden async function loadSystemInfo() { const data = await fetchData('/systeminfo'); if (!data) return; // Betriebssystem-Info aktualisieren document.getElementById('platform-info').innerHTML = `
Plattform: ${data.platform}
Python Version: ${data.python_version}
Betriebszeit: ${data.uptime}
`; // Hardware-Info aktualisieren document.getElementById('hardware-info').innerHTML = `Prozessor: ${data.processor}
Architektur: ${data.architecture}
`; // Speicher-Info aktualisieren document.getElementById('memory-info').innerHTML = `Gesamt: ${data.memory.total}
Verwendet: ${data.memory.used} (${data.memory.percent}%)
Frei: ${data.memory.free}
`; document.getElementById('memory-bar').style.width = `${data.memory.percent}%`; document.getElementById('memory-bar').style.backgroundColor = getColorByPercentage(data.memory.percent); // Festplatten-Info aktualisieren document.getElementById('disk-info').innerHTML = `Gesamt: ${data.disk.total}
Verwendet: ${data.disk.used} (${data.disk.percent}%)
Frei: ${data.disk.free}
`; document.getElementById('disk-bar').style.width = `${data.disk.percent}%`; document.getElementById('disk-bar').style.backgroundColor = getColorByPercentage(data.disk.percent); } // Netzwerk-Informationen laden async function loadNetworkInfo() { const data = await fetchData('/network'); if (!data) return; // Netzwerkschnittstellen aktualisieren let interfacesHTML = 'Schnittstelle | IP-Adresse | Netzmaske | Broadcast |
---|---|---|---|
${name} | ${info.ip} | ${info.netmask} | ${info.broadcast} |
${data.gateway}
`; // Aktive Verbindungen aktualisieren if (data.connections && data.connections.length > 0) { let connectionsHTML = 'Lokale Adresse | Remote-Adresse | Status | PID |
---|---|---|---|
${conn.local_address} | ${conn.remote_address} | ${conn.status} | ${conn.pid} |
Keine aktiven Verbindungen gefunden.
'; } } // Docker-Informationen laden async function loadDockerInfo() { const data = await fetchData('/docker'); if (!data) return; // Docker-Status aktualisieren if (data.installed) { document.getElementById('docker-status').innerHTML = `Installiert
Version: ${data.version}
`; // Container aktualisieren if (data.containers && data.containers.length > 0) { let containersHTML = 'ID | Name | Image | Status | Ports |
---|---|---|---|---|
${container.id} | ${container.name} | ${container.image} | ${container.status} | ${container.ports} |
Keine laufenden Container gefunden.
'; } } else { document.getElementById('docker-status').innerHTML = 'Nicht installiert
'; document.getElementById('docker-containers').innerHTML = 'Docker ist nicht installiert oder nicht zugänglich.
'; } } // Backend-Status laden async function loadBackendStatus() { const data = await fetchData('/backend-status'); if (!data) return; let statusHTML = ''; if (data.status === 'online') { statusHTML = `Status: Online
Port: ${data.port}
`; } else if (data.status === 'offline') { statusHTML = `Status: Offline
Port: ${data.port}
Fehlercode: ${data.error_code}
`; } else { statusHTML = `Status: Fehler
Nachricht: ${data.message}
`; } document.getElementById('main-backend-status').innerHTML = statusHTML; } // Netzwerk-Tools async function performPing() { const hostInput = document.getElementById('ping-host'); const resultElement = document.getElementById('ping-result'); const host = hostInput.value.trim(); if (!host) { resultElement.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein.'; return; } resultElement.textContent = 'Ping wird ausgeführt...'; const data = await fetchData(`/ping/${encodeURIComponent(host)}`); if (!data) { resultElement.textContent = 'Fehler beim Ausführen des Ping-Befehls.'; return; } if (data.success) { resultElement.textContent = data.output; } else { resultElement.textContent = `Fehler: ${data.error || 'Unbekannter Fehler'}`; } } async function performTraceroute() { const hostInput = document.getElementById('traceroute-host'); const resultElement = document.getElementById('traceroute-result'); const host = hostInput.value.trim(); if (!host) { resultElement.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein.'; return; } resultElement.textContent = 'Traceroute wird ausgeführt...'; const data = await fetchData(`/traceroute/${encodeURIComponent(host)}`); if (!data) { resultElement.textContent = 'Fehler beim Ausführen des Traceroute-Befehls.'; return; } if (data.success) { resultElement.textContent = data.output; } else { resultElement.textContent = `Fehler: ${data.error || 'Unbekannter Fehler'}`; } } async function performNSLookup() { const hostInput = document.getElementById('nslookup-host'); const resultElement = document.getElementById('nslookup-result'); const host = hostInput.value.trim(); if (!host) { resultElement.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein.'; return; } resultElement.textContent = 'DNS-Abfrage wird ausgeführt...'; const data = await fetchData(`/nslookup/${encodeURIComponent(host)}`); if (!data) { resultElement.textContent = 'Fehler beim Ausführen des NSLookup-Befehls.'; return; } if (data.success) { resultElement.textContent = data.output; } else { resultElement.textContent = `Fehler: ${data.error || 'Unbekannter Fehler'}`; } } // Hilfsfunktionen function getColorByPercentage(percent) { // Farbverlauf von Grün über Gelb nach Rot if (percent < 70) { return 'var(--success-color)'; } else if (percent < 90) { return 'var(--warning-color)'; } else { return 'var(--danger-color)'; } }