Compare commits

...

2 Commits

Author SHA1 Message Date
069e550a3f
Refactor metric retrieval and display
Improved handling of submetrics for better data organization and presentation. Updated metric values based on retrieved data, ensuring accurate representation in the metrics template file.
2024-06-03 23:47:40 +02:00
41f2ddea37
Reorder conditional for CLI check, then URI comparison.
- Reordered the condition to first check for CLI mode before URI comparison.
2024-06-03 23:41:42 +02:00
2 changed files with 51 additions and 43 deletions

View File

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

View File

@ -1,8 +1,10 @@
{% for key, elem in config %}
{% if elem.help is defined and elem.help is not empty %}
# HELP {{ key }} {{ elem.help }}
{% for key, metric in config %}
{% if metric.help is defined and metric.help is not empty %}
# HELP {{ key }} {{ metric.help }}
{% endif %}
# TYPE {{ key }} gauge
{{ key }} {{ elem.value }}
{% for subkey, submetric in metric.submetrics %}
{{ 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 %}