Files
netmaker-status-script/api.php
T

61 lines
2.1 KiB
PHP

<?php
// api.php - Backend Logik
$db_file = __DIR__ . '/status.sqlite';
$pdo = new PDO('sqlite:' . $db_file);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// --- Manuelle Bereinigung per Frontend ---
if (isset($_GET['action']) && $_GET['action'] === 'cleanup') {
// FEHLER BEHOBEN: Es muss $pdo heißen, nicht $db!
// Zeitabgleich gefixt: Wir nutzen datetime('now', '-2 minutes'), da der INSERT auch in UTC erfolgt.
$pdo->exec("DELETE FROM nodes WHERE last_seen < datetime('now', '-1 days')");
header('Content-Type: application/json');
echo json_encode(["status" => "success"]);
exit;
}
// Tabelle erstellen, falls nicht existent
$pdo->exec("CREATE TABLE IF NOT EXISTS nodes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
server TEXT,
client TEXT,
status TEXT,
handshake TEXT,
last_seen DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(server, client)
)");
// POST: Daten vom Gateway empfangen
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$data = json_decode(file_get_contents('php://input'), true);
if ($data && isset($data['server']) && isset($data['client'])) {
$stmt = $pdo->prepare("
INSERT INTO nodes (server, client, status, handshake, last_seen)
VALUES (:server, :client, :status, :handshake, datetime('now'))
ON CONFLICT(server, client)
DO UPDATE SET status=:status, handshake=:handshake, last_seen=datetime('now')
");
$stmt->execute([
':server' => $data['server'],
':client' => $data['client'],
':status' => $data['status'],
':handshake' => $data['handshake']
]);
echo json_encode(["success" => true]);
} else {
http_response_code(400);
echo json_encode(["error" => "Invalid payload"]);
}
exit;
}
// GET: Daten an das Frontend (HTML/JS) ausliefern
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
header('Content-Type: application/json');
$stmt = $pdo->query("SELECT * FROM nodes ORDER BY server, client");
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
exit;
}