PHP_AdminTool_Projekt/app/Services/Snmp/SnmpServerStatusService.php
2025-11-17 06:35:41 +01:00

69 lines
2.5 KiB
PHP

<?php
// Strenge Typprüfung für Parameter- und Rückgabetypen aktivieren.
declare(strict_types=1);
namespace App\Services\Snmp;
use RuntimeException;
/**
* Service zur Ermittlung des Serverstatus.
*
* In dieser ersten Version werden noch statische Demo-Daten zurückgegeben.
* Später können hier echte SNMP-Abfragen eingebaut werden, ohne dass sich
* der DashboardController oder die Views ändern müssen.
*/
class SnmpServerStatusService
{
/** @var array<string, mixed> SNMP-spezifische Konfiguration (Host, Community, Timeout, OIDs, etc.) */
private array $config;
/**
* Erwartet den Teilbereich "snmp" aus der allgemeinen Konfiguration (config.php).
*
* @param array<string, mixed> $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<string, mixed> 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;
}
}