custom-prometheus-exporter/index.php
Jeroen De Meerleer 1dfddd64ba
Refactor Guzzle HTTP requests for flexibility and proxy support
Restructured Guzzle HTTP requests to allow for additional options like proxy support, enhancing flexibility in handling different types of requests.
2024-06-03 13:33:43 +02:00

58 lines
1.4 KiB
PHP

<?php
require 'vendor/autoload.php';
require 'config.php';
if($_SERVER["REQUEST_URI"] == '/metrics') {
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['httpurl'])) {
$client = new GuzzleHttp\Client();
$options = [];
if (isset($c['proxy'])) {
$options['proxy'] = $c['proxy'];
}
$res = $client->request('GET', $c['httpurl'], $options);
$output = $res->getBody()->getContents();
} elseif(isset($c['httpresponsetime'])) {
$client = new GuzzleHttp\Client();
$output = NULL;
$options = [
'on_stats' => function (GuzzleHttp\TransferStats $stats) use (&$output) {
$output = $stats->getTransferTime();
}
];
if (isset($c['proxy'])) {
$options['proxy'] = $c['proxy'];
}
$res = $client->request('GET', $c['httpresponsetime'], $options);
}
if(isset($c['jsonelem'])) {
$c['value'] = getArrayValue($c['jsonelem'], json_decode($output, true));
} else {
$c['value'] = $output;
}
}
$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) {
$elem = explode('.', $elem);
$new_array = $array;
foreach ($elem as $i) {
$new_array = $new_array[$i];
}
return $new_array;
}