// 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 = ''; for (const [name, info] of Object.entries(data.interfaces)) { interfacesHTML += ` `; } interfacesHTML += '
SchnittstelleIP-AdresseNetzmaskeBroadcast
${name} ${info.ip} ${info.netmask} ${info.broadcast}
'; document.getElementById('network-interfaces').innerHTML = interfacesHTML; // DNS-Server aktualisieren let dnsHTML = ''; document.getElementById('dns-servers').innerHTML = dnsHTML; // Gateway aktualisieren document.getElementById('default-gateway').innerHTML = `

${data.gateway}

`; // Aktive Verbindungen aktualisieren if (data.connections && data.connections.length > 0) { let connectionsHTML = ''; for (const conn of data.connections) { connectionsHTML += ` `; } connectionsHTML += '
Lokale AdresseRemote-AdresseStatusPID
${conn.local_address} ${conn.remote_address} ${conn.status} ${conn.pid}
'; document.getElementById('active-connections').innerHTML = connectionsHTML; } else { document.getElementById('active-connections').innerHTML = '

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 = ''; for (const container of data.containers) { containersHTML += ` `; } containersHTML += '
IDNameImageStatusPorts
${container.id} ${container.name} ${container.image} ${container.status} ${container.ports}
'; document.getElementById('docker-containers').innerHTML = containersHTML; } else { document.getElementById('docker-containers').innerHTML = '

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)'; } }