52 lines
1.6 KiB
PHP
52 lines
1.6 KiB
PHP
<?php
|
|
|
|
use GuzzleHttp\Promise\Utils;
|
|
|
|
require_once("../vendor/autoload.php");
|
|
|
|
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . "/../");
|
|
$dotenv->safeLoad();
|
|
|
|
$targets = explode(",", $_ENV['TARGETS']);
|
|
# trim whitespace from each target
|
|
$targets = array_map('trim', $targets);
|
|
|
|
# For each $target, resolve the target to IP addresses
|
|
foreach($targets as $target) {
|
|
$targetIps[$target] = gethostbynamel($target) ?: [];
|
|
$targetIps[$target] = array_values($targetIps[$target]);
|
|
}
|
|
# For each $target, Create a guzzle request to get the status of each target
|
|
$guzzle = new GuzzleHttp\Client();
|
|
$promises = [];
|
|
foreach ($targets as $target) {
|
|
$url = "http://$target:80/";
|
|
$promises[$target] = $guzzle->getAsync($url);
|
|
}
|
|
# Wait for all the requests to complete
|
|
$responses = Utils::settle($promises)->wait();
|
|
$rollup = true;
|
|
$json = [];
|
|
foreach($responses as $target => $response) {
|
|
if(!isset($response['value']) || $response['value']->getStatusCode() != 200) {
|
|
$rollup = false;
|
|
if ($response['reason'] instanceof \Exception) {
|
|
$json[$target] = ['Status' => 'ERROR', 'Reason' => $response['reason']->getMessage()];
|
|
} else {
|
|
$json[$target] = ['Status' => "ERROR", 'Reason' => 'Unknown'];
|
|
}
|
|
} else {
|
|
$json[$target] = json_decode($response['value']->getBody()->getContents(), true);
|
|
}
|
|
$json[$target]['IP'] = $targetIps[$target];
|
|
|
|
}
|
|
if(!$rollup) {
|
|
header("HTTP/1.0 500 Internal Server Error");
|
|
}
|
|
header('Content-Type: application/json; charset=utf-8');
|
|
echo json_encode([
|
|
'Status' => $rollup ? "OK" : "ERROR",
|
|
'Hostname' => gethostname(),
|
|
'Targets' => $json,
|
|
]);
|