Compare commits

..

No commits in common. "f06c804c249c397f63bed9e6b88dca91cf0a8606" and "b52abb69c79d19d9a99b77aa4255b9e4dac83b4e" have entirely different histories.

3 changed files with 107 additions and 127 deletions

View File

@ -1,17 +1,6 @@
<?php <?php
header('Content-Type: text/plain; version=0.0.4');
if($_SERVER["REQUEST_URI"] == '/metrics') { $config = getenv('CONFIG_FILE');
header('Content-Type: text/plain; version=0.0.4'); $phpbin = getenv('PHP_BINARY');
$config = getenv('CONFIG_FILE'); $output = shell_exec('CONFIG_FILE="' . $config . '" ' . $phpbin . ' ' . $_SERVER['DOCUMENT_ROOT'] . 'script.php');
$phpbin = getenv('PHP_BINARY'); echo $output;
$output = shell_exec('CONFIG_FILE="' . $config . '" ' . $phpbin . ' ' . $_SERVER['DOCUMENT_ROOT'] . 'script.php');
echo $output;
} else {
require_once('vendor/autoload.php');
http_response_code(404);
$loader = new \Twig\Loader\FilesystemLoader('templates');
$twig = new \Twig\Environment($loader, [
'cache' => 'twig_cache',
]);
echo $twig->render('404.twig', ['path' => $_SERVER["REQUEST_URI"]]);
}

View File

@ -14,116 +14,119 @@ if(file_exists($cacheFile)) {
} else { } else {
$oldconfig = []; $oldconfig = [];
} }
foreach ($config as $key => &$metric) {
if (!isset($metric['submetrics'])) {
$metric['submetrics'] = [$metric];
}
foreach ($metric['submetrics'] as $subkey => &$submetric) {
$pid = pcntl_fork();
if ($pid > 0) {
$pids[] = $pid;
} else {
if (isset($submetric['command'])) {
$output = null;
$retval = null;
try {
exec($submetric['command'], $output, $retval);
$output = implode("\n", $output);
} catch (Exception $e) {
$output = '';
}
} elseif (isset($submetric['http'])) {
$client = new GuzzleHttp\Client();
$options = []; if(php_sapi_name() == 'cli' || $_SERVER["REQUEST_URI"] == '/metrics') {
$output = NULL; foreach ($config as $key => &$metric) {
if (isset($submetric['http']['proxy'])) { if (!isset($metric['submetrics'])) {
$options['proxy'] = $submetric['http']['proxy']; $metric['submetrics'] = [$metric];
} }
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsetime') { foreach ($metric['submetrics'] as $subkey => &$submetric) {
$options['on_stats'] = function (GuzzleHttp\TransferStats $stats) use (&$output) { $pid = pcntl_fork();
$output = $stats->getTransferTime(); if ($pid > 0) {
}; $pids[] = $pid;
} } else {
if (isset($submetric['command'])) {
$hasresponse = NULL; $output = null;
try { $retval = null;
$res = $client->request('GET', $submetric['http']['url'], $options); try {
$hasresponse = true; exec($submetric['command'], $output, $retval);
} catch (GuzzleHttp\Exception\GuzzleException $e) { $output = implode("\n", $output);
if (method_exists($e, 'getResponse')) { } catch (Exception $e) {
$res = $e->getResponse();
$hasresponse = true;
} else {
$hasresponse = false;
}
}
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsebody') {
if ($hasresponse) {
$output = $res->getBody()->getContents();
} else {
$output = ''; $output = '';
} }
} elseif ((isset($submetric['http']['statuscode'])) && (isset($submetric['http']['data']) && $submetric['http']['data'] == 'hasresponse')) { } elseif (isset($submetric['http'])) {
if ($hasresponse) { $client = new GuzzleHttp\Client();
$output = $output = (int)in_array($res->getStatusCode(), $submetric['http']['statuscode']);;
} else { $options = [];
$output = 0; $output = NULL;
if (isset($submetric['http']['proxy'])) {
$options['proxy'] = $submetric['http']['proxy'];
}
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsetime') {
$options['on_stats'] = function (GuzzleHttp\TransferStats $stats) use (&$output) {
$output = $stats->getTransferTime();
};
}
$hasresponse = NULL;
try {
$res = $client->request('GET', $submetric['http']['url'], $options);
$hasresponse = true;
} catch (GuzzleHttp\Exception\GuzzleException $e) {
if (method_exists($e, 'getResponse')) {
$res = $e->getResponse();
$hasresponse = true;
} else {
$hasresponse = false;
}
}
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsebody') {
if ($hasresponse) {
$output = $res->getBody()->getContents();
} else {
$output = '';
}
} elseif ((isset($submetric['http']['statuscode'])) && (isset($submetric['http']['data']) && $submetric['http']['data'] == 'hasresponse')) {
if ($hasresponse) {
$output = $output = (int)in_array($res->getStatusCode(), $submetric['http']['statuscode']);;
} else {
$output = 0;
}
} elseif (isset($submetric['http']['data']) && $submetric['http']['data'] == 'hasresponse') {
$output = (int)$hasresponse;
} }
} elseif (isset($submetric['http']['data']) && $submetric['http']['data'] == 'hasresponse') {
$output = (int)$hasresponse;
} }
if (isset($submetric['jsonelem'])) {
$submetric['value'] = getArrayValue($submetric['jsonelem'], json_decode($output, true));
} else {
$submetric['value'] = $output;
}
if (is_bool($submetric['value'])) $submetric['value'] = $submetric['value'] ? 1 : 0;
file_put_contents('/tmp/.metrics.' . $key . '.' . $subkey, $submetric['value']);
exit();
} }
if (isset($submetric['jsonelem'])) {
$submetric['value'] = getArrayValue($submetric['jsonelem'], json_decode($output, true));
} else {
$submetric['value'] = $output;
}
if (is_bool($submetric['value'])) $submetric['value'] = $submetric['value'] ? 1 : 0;
file_put_contents('/tmp/.metrics.' . $key . '.' . $subkey, $submetric['value']);
exit();
} }
} }
} foreach ($pids as $pid) {
foreach ($pids as $pid) { pcntl_waitpid($pid, $none);
pcntl_waitpid($pid, $none);
}
foreach ($config as $key => &$metric) {
foreach ($metric['submetrics'] as $subkey => &$submetric) {
$submetric['value'] = file_get_contents('/tmp/.metrics.' . $key . '.' . $subkey);
if (!empty($oldconfig) && !isset($submetric['value']) && (isset($submetric['fallback']) && !empty($submetric['fallback']))) {
if (!isset($submetric['fallback']['maxage']) || time() < ($oldconfig[$key]['submetrics'][$subkey]['time'] + $submetric['fallback']['maxage'])) {
if ($submetric['fallback']['type'] == 'previous') {
$submetric['value'] = $oldconfig[$key]['submetrics'][$subkey]['value'];
} elseif ($submetric['fallback']['type'] == 'static') {
$submetric['value'] = $submetric['fallback']['value'];
}
$submetric['time'] = $oldconfig[$key]['submetrics'][$subkey]['time'];
} else {
$submetric['value'] = '';
$submetric['time'] = 0;
}
} else {
$submetric['time'] = time();
}
unlink('/tmp/.metrics.' . $key . '.' . $subkey);
} }
foreach ($config as $key => &$metric) {
foreach ($metric['submetrics'] as $subkey => &$submetric) {
$submetric['value'] = file_get_contents('/tmp/.metrics.' . $key . '.' . $subkey);
if (!empty($oldconfig) && !isset($submetric['value']) && (isset($submetric['fallback']) && !empty($submetric['fallback']))) {
if (!isset($submetric['fallback']['maxage']) || time() < ($oldconfig[$key]['submetrics'][$subkey]['time'] + $submetric['fallback']['maxage'])) {
if ($submetric['fallback']['type'] == 'previous') {
$submetric['value'] = $oldconfig[$key]['submetrics'][$subkey]['value'];
} elseif ($submetric['fallback']['type'] == 'static') {
$submetric['value'] = $submetric['fallback']['value'];
}
$submetric['time'] = $oldconfig[$key]['submetrics'][$subkey]['time'];
} else {
$submetric['value'] = '';
$submetric['time'] = 0;
}
} else {
$submetric['time'] = time();
}
unlink('/tmp/.metrics.' . $key . '.' . $subkey);
}
}
file_put_contents($cacheFile, json_encode($config, JSON_PRETTY_PRINT));
$loader = new \Twig\Loader\FilesystemLoader('templates');
$twig = new \Twig\Environment($loader, [
'cache' => 'twig_cache',
]);
echo $twig->render('metrics.twig', ['config' => $config]);
} }
file_put_contents($cacheFile, json_encode($config, JSON_PRETTY_PRINT));
$loader = new \Twig\Loader\FilesystemLoader('templates');
$twig = new \Twig\Environment($loader, [
'cache' => 'twig_cache',
]);
echo $twig->render('metrics.twig', ['config' => $config]);
function getArrayValue($elem, $array) { function getArrayValue($elem, $array) {
$elem = explode('.', $elem); $elem = explode('.', $elem);
$new_array = $array; $new_array = $array;

View File

@ -1,12 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>Page Title</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
</style>
<body>
<h1>404 Uri {{ path }} not found</h1>
<p><a href="/metrics">/metrics</a></p>
</body>
</html>