Ryanhub - file viewer
filename: html/api/services/health/ping.php
branch: main
back to repo
<?php
// basic health checks: routing, db, auth

$result = [
	'routing' => ['status' => 'ok'],
];

// db check
$dbCheck = ['status' => 'unknown'];
try {
	require_once __DIR__ . '/../../lib/db.php';
	// simple query to verify connection
	$pdo->query('SELECT 1');
	$dbCheck['status'] = 'ok';
} catch (Throwable $e) {
	$dbCheck['status'] = 'error';
	$dbCheck['error'] = $e->getMessage();
}
$result['db'] = $dbCheck;

// auth check: verify api_keys table is present and has at least one non-revoked key
$authCheck = ['status' => 'unknown'];
if (isset($pdo) && $dbCheck['status'] === 'ok') {
	try {
		$q = $pdo->query('SELECT 1 FROM api_keys WHERE revoked=0 LIMIT 1');
		if ($q && $q->fetch()) {
			$authCheck['status'] = 'ok';
		} else {
			$authCheck['status'] = 'warn';
			$authCheck['details'] = 'no active api_keys found';
		}
	} catch (Throwable $e) {
		$authCheck['status'] = 'error';
		$authCheck['error'] = $e->getMessage();
	}
} else {
	$authCheck['status'] = 'error';
	$authCheck['error'] = 'no db connection';
}
$result['auth'] = $authCheck;

// overall status
$overall = 'ok';
foreach ([$dbCheck, $authCheck] as $c) {
	if (($c['status'] ?? '') === 'error') { $overall = 'fail'; break; }
	if (($c['status'] ?? '') === 'warn') { $overall = 'degraded'; }
}
$result['status'] = $overall;

json($result);