sdl3/examples/ServerManager/Services/HetznerService.php
2025-11-17 13:22:20 +01:00

71 lines
2.2 KiB
PHP

<?php
namespace ServerManager\Services;
use LKDev\HetznerCloud\HetznerAPIClient;
class HetznerService
{
/**
* Load servers from Hetzner API asynchronously
* This function is designed to run in a separate thread
*/
public static function loadServersAsync(string $apiKey): array
{
try {
if (empty($apiKey)) {
return ['error' => 'Kein API-Key konfiguriert'];
}
$hetznerClient = new HetznerAPIClient($apiKey);
$servers = [];
foreach ($hetznerClient->servers()->all() as $server) {
$servers[] = [
'id' => $server->id,
'name' => $server->name,
'status' => $server->status,
'type' => $server->serverType->name,
'ipv4' => $server->publicNet->ipv4->ip,
'docker_status' => 'pending',
'domains' => [],
'needs_reboot' => 'unbekannt',
'updates_available' => 'unbekannt',
'os_version' => 'unbekannt',
];
}
return [
'success' => true,
'servers' => $servers,
'count' => count($servers),
];
} catch (\Exception $e) {
return ['error' => 'Exception: ' . $e->getMessage()];
}
}
/**
* Generate test server data for development
*/
public static function generateTestData(int $count = 63): array
{
$testData = [];
for ($i = 1; $i <= $count; $i++) {
$testData[] = [
'id' => $i,
'name' => "Server-{$i}",
'status' => ($i % 3) === 0 ? 'stopped' : 'running',
'type' => 'cx' . (11 + (($i % 4) * 10)),
'ipv4' => sprintf('192.168.%d.%d', floor($i / 255), $i % 255),
'docker_status' => 'pending',
'domains' => [],
'needs_reboot' => 'nein',
'updates_available' => 'nein',
'os_version' => 'Ubuntu 22.04 LTS',
];
}
return $testData;
}
}