Files

38 lines
1.9 KiB
PHP

<?php
// ============================================================================
// gardien.php - Échéance du chien de garde d'un bateau (synthèse §51, étape C).
// Lancé par une tâche ponctuelle systemd programmée par Rearmer_gardien() : si aucun signal n'est arrivé depuis le
// seuil, le bateau est déclaré injoignable (TB_Bateaux.Injoignable_depuis = date du dernier signal) et le traitement
// des alertes est demandé (alerte de perte de connexion, étape D).
// Usage : php gardien.php <numéro du bateau>
// ============================================================================
chdir("/var/www/html");
require_once __DIR__ . "/config/config.php";
require_once __DIR__ . "/fonctions_alertes.php";
$id_bateau = (int)($argv[1] ?? 0);
if ($id_bateau <= 0) { fwrite(STDERR, "Usage : php gardien.php <numéro du bateau>\n"); exit(1); }
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli("127.0.0.1", BDD_USER, BDD_PASSWORD, BDD_DATABASE, 3307);
$seuil = Reglage_entier($db, 'Seuil_injoignable', SEUIL_INJOIGNABLE_DEFAUT);
// Garde-fou (signal arrivé pendant le lancement de l'échéance, horloge...) : on revérifie l'ancienneté du dernier signal,
// et on ne déclare la perte qu'une fois (Injoignable_depuis encore NULL) :
$stmt = $db->prepare("UPDATE TB_Bateaux SET Injoignable_depuis = Date_dernier_signal
WHERE Cle_primaire=? AND Injoignable_depuis IS NULL AND Date_dernier_signal IS NOT NULL
AND Date_dernier_signal <= UTC_TIMESTAMP() - INTERVAL ? SECOND");
$stmt->bind_param('ii', $id_bateau, $seuil);
$stmt->execute();
$declare = ($stmt->affected_rows == 1);
$stmt->close();
$db->close();
if ($declare)
{
echo "Bateau {$id_bateau} : aucun signal depuis plus de {$seuil} s - déclaré injoignable.\n";
Demander_traitement_alertes($id_bateau);
}
else echo "Bateau {$id_bateau} : signal récent ou déjà déclaré injoignable - rien à faire.\n";