aboutsummaryrefslogtreecommitdiff
path: root/cli/health.php
blob: 2e0687f0cb56e5203b96959a0ca4175aab8692ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env php
<?php
declare(strict_types=1);

if (php_sapi_name() !== 'cli') {
	echo 'Error: This script may only be invoked from command line!', PHP_EOL;
	die(3);
}

$options = getopt('', ['url::', 'connect_timeout::', 'timeout::']);
$address = is_string($options['url'] ?? null) ? $options['url'] : 'http://localhost/api/';
$ch = curl_init($address);
if ($ch === false) {
	fwrite(STDERR, 'Error: Failed to initialize cURL!' . PHP_EOL);
	die(4);
}
curl_setopt_array($ch, [
	CURLOPT_CONNECTTIMEOUT => is_numeric($options['connect_timeout'] ?? null) ? (int)$options['connect_timeout'] : 3,
	CURLOPT_TIMEOUT => is_numeric($options['timeout'] ?? null) ? (int)$options['timeout'] : 5,
	CURLOPT_ACCEPT_ENCODING => '',	//Enable all encodings
	CURLOPT_HTTPHEADER => [
		'Connection: close',
	],
	CURLOPT_RETURNTRANSFER => true,
]);
$content = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($httpCode !== 200 || !is_string($content)) {
	die(1);
}

$content = rtrim($content, "\n\r");
if (!str_starts_with($content, '<!DOCTYPE html>') || !str_ends_with($content, '</html>') || !str_contains($content, '/scripts/api.js')) {
	die(2);
}