61 lines
2.1 KiB
PHP
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;
|
|
} |