(int)$db->query('SELECT COUNT(*) FROM licenses')->fetchColumn(), 'licenses_active' => (int)$db->query('SELECT COUNT(*) FROM licenses WHERE revoked_at IS NULL AND download_entitlement_until >= NOW()')->fetchColumn(), 'licenses_expired' => (int)$db->query('SELECT COUNT(*) FROM licenses WHERE revoked_at IS NULL AND download_entitlement_until < NOW()')->fetchColumn(), 'licenses_revoked' => (int)$db->query('SELECT COUNT(*) FROM licenses WHERE revoked_at IS NOT NULL')->fetchColumn(), 'machines_30d' => (int)$db->query('SELECT COUNT(*) FROM license_machines WHERE last_seen >= DATE_SUB(NOW(), INTERVAL 30 DAY)')->fetchColumn(), 'audit_24h' => (int)$db->query('SELECT COUNT(*) FROM audit_log WHERE ts >= DATE_SUB(NOW(), INTERVAL 24 HOUR)')->fetchColumn(), ]; $manifestPath = dirname(__DIR__) . '/manifest/versions.json'; $manifest = is_file($manifestPath) ? json_decode(file_get_contents($manifestPath), true) : null; $buildsDir = dirname(__DIR__) . '/builds'; $zips = is_dir($buildsDir) ? glob("$buildsDir/*.zip") : []; $lastAudit = $db->query('SELECT * FROM audit_log ORDER BY id DESC LIMIT 10')->fetchAll(); Layout::header('Dashboard', 'dashboard'); ?>

Dashboard

Licenses actives
Expirées
Révoquées
Machines vues (30j)
Validations (24h)

État du dépôt de versions

entrée(s) dans le manifest • ZIP(s) dans builds/ • signature manifest : NON SIGNÉ" : "SIGNÉ Ed25519" ?>

Dernière version annoncée : v (publiée le )

Gérer les versions →

Activité récente

Aucune activité enregistrée.

'badge-success', 'validate_invalid', 'validate_revoked', 'machine_limit' => 'badge-danger', 'validate_expired' => 'badge-warning', default => 'badge-secondary', }; ?>
DateÉvénementLicenseIP
—' ?>
Voir tout →