// DOM-Element-Referenzen const navButtons = document.querySelectorAll('.nav-button'); const panels = document.querySelectorAll('.panel'); // Panel-Navigation navButtons.forEach(button => { button.addEventListener('click', () => { const panelId = button.getAttribute('data-panel'); // 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(panelId).classList.add('active'); // Lade Panel-Daten, wenn sie noch nicht geladen wurden if (panelId === 'system' && document.getElementById('system-container').style.display === 'none') { loadSystemInfo(); } else if (panelId === 'network' && document.getElementById('network-container').style.display === 'none') { loadNetworkInfo(); } else if (panelId === 'services' && document.getElementById('services-container').style.display === 'none') { loadServicesInfo(); } }); }); // API-Anfragen async function fetchData(endpoint) { try { const response = await fetch(endpoint); if (!response.ok) { throw new Error(`HTTP-Fehler: ${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 loader = document.getElementById('system-loader'); const container = document.getElementById('system-container'); loader.style.display = 'block'; container.style.display = 'none'; const data = await fetchData('/api/system'); if (!data) { loader.textContent = 'Fehler beim Laden der Systemdaten'; return; } // Betriebssystem-Info document.getElementById('os-info').innerHTML = `
Plattform: ${data.os.platform}
Distribution: ${data.os.distro}
Version: ${data.os.release}
Architektur: ${data.os.arch}
Betriebszeit: ${data.os.uptime}
`; // CPU-Info document.getElementById('cpu-info').innerHTML = `Hersteller: ${data.cpu.manufacturer}
Modell: ${data.cpu.brand}
Geschwindigkeit: ${data.cpu.speed} GHz
Kerne: ${data.cpu.cores} (${data.cpu.physicalCores} physisch)
`; // Speicher-Info document.getElementById('memory-info').innerHTML = `Gesamt: ${data.memory.total}
Verwendet: ${data.memory.used} (${data.memory.usedPercent}%)
Frei: ${data.memory.free}
`; document.getElementById('memory-bar').style.width = `${data.memory.usedPercent}%`; document.getElementById('memory-bar').style.backgroundColor = getColorByPercentage(data.memory.usedPercent); // Festplatten-Info let diskHTML = 'Laufwerk | Typ | Größe | Verwendet | Verfügbar | Nutzung |
---|---|---|---|---|---|
${fs.mount} | ${fs.type} | ${fs.size} | ${fs.used} | ${fs.available} |
|
Name | Status | IPv4 | IPv6 | MAC | Typ | DHCP |
---|---|---|---|---|---|---|
${iface.iface} | ${iface.operstate} | ${iface.ip4 || '-'} | ${iface.ip6 || '-'} | ${iface.mac || '-'} | ${iface.type || '-'} | ${iface.dhcp ? 'Ja' : 'Nein'} |
${data.gateway || 'Nicht verfügbar'}
`; // Netzwerkstatistiken let statsHTML = 'Schnittstelle | Empfangen | Gesendet | Empfangen/s | Gesendet/s |
---|---|---|---|---|
${stat.iface} | ${stat.rx_bytes} | ${stat.tx_bytes} | ${stat.rx_sec} | ${stat.tx_sec} |
Status: ${data.frontend.status}
Name: ${data.frontend.name}
Host: ${data.frontend.host}
Port: ${data.frontend.port}
`; // Backend-Status document.getElementById('backend-status').innerHTML = `Status: ${data.backend.status}
Name: ${data.backend.name}
Host: ${data.backend.host}
Port: ${data.backend.port}
`; // Docker-Container if (data.docker.containers && data.docker.containers.length > 0) { let containersHTML = 'ID | Name | Image | Status | Ports |
---|---|---|---|---|
${container.id} | ${container.name} | ${container.image} | ${container.status} | ${container.ports} |
Keine Docker-Container gefunden
'; } // UI anzeigen loader.style.display = 'none'; container.style.display = 'grid'; } // Netzwerk-Tools document.getElementById('ping-button').addEventListener('click', async () => { const hostInput = document.getElementById('ping-host'); const resultBox = document.getElementById('ping-result'); const host = hostInput.value.trim(); if (!host) { resultBox.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein'; return; } resultBox.textContent = 'Ping wird ausgeführt...'; const data = await fetchData(`/api/ping/${encodeURIComponent(host)}`); if (!data) { resultBox.textContent = 'Fehler beim Ausführen des Ping-Befehls'; return; } resultBox.textContent = data.output || data.error || 'Keine Ausgabe'; }); document.getElementById('traceroute-button').addEventListener('click', async () => { const hostInput = document.getElementById('traceroute-host'); const resultBox = document.getElementById('traceroute-result'); const host = hostInput.value.trim(); if (!host) { resultBox.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein'; return; } resultBox.textContent = 'Traceroute wird ausgeführt...'; const data = await fetchData(`/api/traceroute/${encodeURIComponent(host)}`); if (!data) { resultBox.textContent = 'Fehler beim Ausführen des Traceroute-Befehls'; return; } resultBox.textContent = data.output || data.error || 'Keine Ausgabe'; }); document.getElementById('nslookup-button').addEventListener('click', async () => { const hostInput = document.getElementById('nslookup-host'); const resultBox = document.getElementById('nslookup-result'); const host = hostInput.value.trim(); if (!host) { resultBox.textContent = 'Bitte geben Sie einen Hostnamen oder eine IP-Adresse ein'; return; } resultBox.textContent = 'DNS-Abfrage wird ausgeführt...'; const data = await fetchData(`/api/nslookup/${encodeURIComponent(host)}`); if (!data) { resultBox.textContent = 'Fehler beim Ausführen des NSLookup-Befehls'; return; } resultBox.textContent = data.output || data.error || 'Keine Ausgabe'; }); // Echtzeit-Monitoring mit WebSockets const socket = io(); // CPU- und RAM-Statistiken socket.on('system-stats', data => { // CPU-Anzeige aktualisieren const cpuPercentage = data.cpu.load; document.getElementById('cpu-percentage').textContent = `${cpuPercentage}%`; document.getElementById('cpu-gauge').style.height = `${cpuPercentage}%`; document.getElementById('cpu-gauge').style.backgroundColor = getColorByPercentage(cpuPercentage); // CPU-Kerne anzeigen const cpuCoresContainer = document.getElementById('cpu-cores-container'); if (cpuCoresContainer.childElementCount === 0) { // Erstelle Kern-Anzeigen, falls sie noch nicht existieren data.cpu.cores.forEach((load, index) => { const coreElement = document.createElement('div'); coreElement.className = 'cpu-core'; coreElement.innerHTML = `Gesamt: ${formatBytes(data.memory.total)}
Verwendet: ${formatBytes(data.memory.used)}
Frei: ${formatBytes(data.memory.free)}
`; }); // Netzwerkstatistiken let networkChart; socket.on('network-stats', data => { const networkThroughput = document.getElementById('network-throughput'); let throughputHTML = ''; data.stats.forEach(stat => { throughputHTML += `