Compare commits

..

No commits in common. "069e550a3fda3fd3208b054f9d5eaef48411212f" and "24f1f6c974caa2d9571f74321d57b595e2de28bd" have entirely different histories.

2 changed files with 44 additions and 52 deletions

View File

@ -2,61 +2,55 @@
require 'vendor/autoload.php'; require 'vendor/autoload.php';
require 'config.php'; require 'config.php';
if(php_sapi_name() == 'cli' || $_SERVER["REQUEST_URI"] == '/metrics') { if($_SERVER["REQUEST_URI"] == '/metrics' || php_sapi_name() == 'cli') {
header('Content-Type: text/plain; version=0.0.4'); header('Content-Type: text/plain; version=0.0.4');
foreach ($config as $key => &$metric) { foreach ($config as $key => &$c) {
if (!isset($metric['submetrics'])) { if(isset($c['command'])) {
$metric['submetrics'] = [$metric]; $output=null;
} $retval=null;
foreach ($metric['submetrics'] as $key => &$submetric) { exec($c['command'], $output, $retval);
$output = implode("\n", $output);
} elseif(isset($c['http'])) {
$client = new GuzzleHttp\Client();
if (isset($submetric['command'])) { $options = [];
$output = null; $output = NULL;
$retval = null; if (isset($c['http']['proxy'])) {
exec($submetric['command'], $output, $retval); $options['proxy'] = $c['http']['proxy'];
$output = implode("\n", $output); }
} elseif (isset($submetric['http'])) { if (isset($c['http']['data']) && $c['http']['data'] == 'responsetime') {
$client = new GuzzleHttp\Client(); $options['on_stats'] = function (GuzzleHttp\TransferStats $stats) use (&$output) {
$output = $stats->getTransferTime();
};
}
$options = []; $hasresponse = NULL;
$output = NULL; try{
if (isset($submetric['http']['proxy'])) { $res = $client->request('GET', $c['http']['url'], $options);
$options['proxy'] = $submetric['http']['proxy']; $hasresponse = true;
} } catch(GuzzleHttp\Exception\GuzzleException $e) {
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsetime') { if(method_exists($e, 'getResponse')) {
$options['on_stats'] = function (GuzzleHttp\TransferStats $stats) use (&$output) { $res = $e->getResponse();
$output = $stats->getTransferTime();
};
}
$hasresponse = NULL;
try {
$res = $client->request('GET', $submetric['http']['url'], $options);
$hasresponse = true; $hasresponse = true;
} catch (GuzzleHttp\Exception\GuzzleException $e) { } else {
if (method_exists($e, 'getResponse')) { $hasresponse = false;
$res = $e->getResponse();
$hasresponse = true;
} else {
$hasresponse = false;
}
}
if (isset($submetric['http']['data']) && $submetric['http']['data'] == 'responsebody') {
$output = $res->getBody()->getContents();
} elseif (isset($submetric['http']['data']) && $submetric['http']['data'] == 'hasresponse') {
$output = (int)$hasresponse;
} }
} }
if (isset($submetric['jsonelem'])) { if (isset($c['http']['data']) && $c['http']['data'] == 'responsebody') {
$submetric['value'] = getArrayValue($submetric['jsonelem'], json_decode($output, true)); $output = $res->getBody()->getContents();
} else { } elseif (isset($c['http']['data']) && $c['http']['data'] == 'hasresponse') {
$submetric['value'] = $output; $output = (int)$hasresponse;
} }
if (is_bool($submetric['value'])) $submetric['value'] = $submetric['value'] ? 1 : 0;
} }
if(isset($c['jsonelem'])) {
$c['value'] = getArrayValue($c['jsonelem'], json_decode($output, true));
} else {
$c['value'] = $output;
}
if(is_bool($c['value'])) $c['value'] = $c['value'] ? 1 : 0;
} }
$loader = new \Twig\Loader\FilesystemLoader('templates'); $loader = new \Twig\Loader\FilesystemLoader('templates');

View File

@ -1,10 +1,8 @@
{% for key, metric in config %} {% for key, elem in config %}
{% if metric.help is defined and metric.help is not empty %} {% if elem.help is defined and elem.help is not empty %}
# HELP {{ key }} {{ metric.help }} # HELP {{ key }} {{ elem.help }}
{% endif %} {% endif %}
# TYPE {{ key }} gauge # TYPE {{ key }} gauge
{% for subkey, submetric in metric.submetrics %} {{ key }} {{ elem.value }}
{{ key }}{% if submetric.labels is defined and submetric.labels is not empty %}{{ '{' }}{% for label, value in submetric.labels %}{{ label }}="{{ value }}"{% if not loop.last %},{% endif %}{% endfor %}{{ '}' }}{% endif %} {{ submetric.value }}
{% endfor %}
{% endfor %} {% endfor %}