diff --git a/app/Controllers/DashboardController.php b/app/Controllers/DashboardController.php new file mode 100644 index 0000000..089281e --- /dev/null +++ b/app/Controllers/DashboardController.php @@ -0,0 +1,120 @@ + Vollständige Anwendungskonfiguration (aus config.php) */ + private array $config; + + /** @var SnmpServerStatusService Service, der den Serverstatus (später per SNMP) liefert */ + private SnmpServerStatusService $snmpService; + + /** + * Übergibt die Konfiguration an den Controller und initialisiert den SNMP-Statusservice. + * + * @param array $config Vollständige Konfiguration aus config.php + */ + public function __construct(array $config) + { + // Komplette Config lokal speichern (falls später weitere Werte benötigt werden). + $this->config = $config; + + // Teilbereich "snmp" aus der Konfiguration ziehen. + // Wenn nicht vorhanden, wird ein leeres Array übergeben (der Service prüft das selbst). + $snmpConfig = $config['snmp'] ?? []; + + // SNMP-Service initialisieren, der den Serverstatus liefert. + $this->snmpService = new SnmpServerStatusService($snmpConfig); + } + + /** + * Zeigt das Dashboard an. + * Holt die Serverstatus-Daten aus dem SnmpServerStatusService und übergibt sie an die View. + */ + public function show(): void + { + // Serverstatus über den SNMP-Service ermitteln. + // In der aktuellen Version liefert der Service noch Demo-Daten. + $serverStatus = $this->snmpService->getServerStatus(); + + // Pfad zur Dashboard-View (Template-Datei) ermitteln. + $viewPath = __DIR__ . '/../../public/views/dashboard.php'; + + // Falls die View-Datei (noch) nicht existiert, Fallback-HTML direkt aus dem Controller ausgeben. + if (file_exists($viewPath) === false) { + $this->renderInlineDashboard($serverStatus); + return; + } + + // View-Datei einbinden. Die Variable $serverStatus steht in der View zur Verfügung. + require $viewPath; + } + + /** + * Fallback-Dashboard-Ausgabe direkt aus dem Controller (ohne separate View-Datei). + * Nur als Notlösung gedacht, falls die eigentliche View noch nicht vorhanden ist. + * + * @param array $serverStatus Serverstatus-Daten (Hostname, CPU%, RAM%, etc.) + */ + private function renderInlineDashboard(array $serverStatus): void + { + ?> + + + + + AD Admin Tool – Dashboard + + +

Dashboard

+ +

Serverstatus

+ + +

Logout

+ + + SNMP-spezifische Konfiguration (Host, Community, Timeout, OIDs, etc.) */ + private array $config; + + /** + * Erwartet den Teilbereich "snmp" aus der allgemeinen Konfiguration (config.php). + * + * @param array $snmpConfig Konfiguration für die SNMP-Abfragen + */ + public function __construct(array $snmpConfig) + { + // SNMP-Konfiguration in der Instanz speichern. + $this->config = $snmpConfig; + } + + /** + * Liefert den aktuellen Serverstatus zurück. + * + * In dieser Version werden Demo-Daten auf Basis der Konfiguration erzeugt. + * Später können hier echte SNMP-Queries (z. B. über die PHP-SNMP-Extension) verwendet werden. + * + * @return array Assoziatives Array mit Statuswerten (Hostname, CPU%, RAM%, etc.) + * + * @throws RuntimeException wenn die SNMP-Konfiguration unvollständig ist (z. B. host fehlt) + */ + public function getServerStatus(): array + { + // Hostnamen aus der SNMP-Konfiguration lesen. + $host = (string)($this->config['host'] ?? ''); + + // Ohne Host ist keine sinnvolle Abfrage möglich -> Konfigurationsfehler. + if ($host === '') { + throw new RuntimeException('SNMP-Konfiguration ist unvollständig (host fehlt).'); + } + + // TODO: Später hier echte SNMP-Abfragen einbauen (z. B. snmp2_get/snmp2_walk). + // Die OIDs können aus $this->config['oids'] gelesen werden. + // Für den Anfang verwenden wir dieselben Demo-Werte wie vorher im DashboardController. + $status = [ + 'hostname' => $host, + 'os' => 'Windows Server 2025 Datacenter', + 'uptime' => '3 Tage 12 Stunden', + 'cpu_usage' => 23, // CPU-Auslastung in Prozent (Demo) + 'memory_usage' => 62, // RAM-Auslastung in Prozent (Demo) + 'disk_usage_c' => 71, // Datenträger C in Prozent (Demo) + 'last_update' => date('d.m.Y H:i:s'), // Zeitpunkt der letzten Aktualisierung + ]; + + return $status; + } +}