|
|
|
@ -3,15 +3,6 @@ require_once('../vendor/autoload.php');
|
|
|
|
|
require_once('help.php'); // provides $help_texts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$host = 'localhost';
|
|
|
|
|
$port = 10011;
|
|
|
|
|
$user = rawurlencode('serveradmin');
|
|
|
|
|
$password = rawurlencode('4NReP1Wf');
|
|
|
|
|
$ssh = TRUE;
|
|
|
|
|
|
|
|
|
|
$uri = 'serverquery://'.$user.':'.$password.'@'.$host.':'.$port.'/';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// initialize the Prometheus registry
|
|
|
|
|
$registry = new \Prometheus\CollectorRegistry(new \Prometheus\Storage\InMemory());
|
|
|
|
|
$namespace = 'ts3';
|
|
|
|
@ -20,47 +11,64 @@ $virtualserver_label_keys = [
|
|
|
|
|
'virtualserver_port',
|
|
|
|
|
'virtualserver_unique_identifier'
|
|
|
|
|
];
|
|
|
|
|
$totals = [
|
|
|
|
|
'virtualserver_uptime'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// set ${namespace}_up for exporter status
|
|
|
|
|
$up = $registry->getOrRegisterGauge(
|
|
|
|
|
$namespace,
|
|
|
|
|
'up',
|
|
|
|
|
$help_texts['up'],
|
|
|
|
|
[]
|
|
|
|
|
);
|
|
|
|
|
$up->set(1, []);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// open a connection to the server
|
|
|
|
|
$ts3 = TeamSpeak3::factory($uri);
|
|
|
|
|
$host = '192.168.178.55';
|
|
|
|
|
$port = 10011;
|
|
|
|
|
$user = rawurlencode('serveradmin');
|
|
|
|
|
$password = rawurlencode('4NReP1Wf');
|
|
|
|
|
|
|
|
|
|
// loop over all virtualservers, because some statistics (e.g. packet loss)
|
|
|
|
|
// are tracked per virtualserver
|
|
|
|
|
foreach($ts3->serverList() as $virtualserver) {
|
|
|
|
|
$infos = array_map(function($info_raw) {
|
|
|
|
|
return is_object($info_raw) ? $info_raw->toString() : $info_raw;
|
|
|
|
|
}, $virtualserver->getInfo());
|
|
|
|
|
$uri = 'serverquery://'.$user.':'.$password.'@'.$host.':'.$port.'/';
|
|
|
|
|
|
|
|
|
|
// fill $virtualserver_label_values
|
|
|
|
|
foreach($virtualserver_label_keys as $virtualserver_label_key) {
|
|
|
|
|
$value = $infos[$virtualserver_label_key];
|
|
|
|
|
$virtualserver_label_values[] = $infos[$virtualserver_label_key];
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
// open a connection to the server
|
|
|
|
|
$ts3 = TeamSpeak3::factory($uri);
|
|
|
|
|
|
|
|
|
|
foreach($infos as $name => $data) {
|
|
|
|
|
// gauge only supports floats
|
|
|
|
|
// $infos/$data is a mix of int, string and NULL
|
|
|
|
|
if(preg_match('/^\d*(\.\d*)?$/', $data)) {
|
|
|
|
|
$gauge = $registry->getOrRegisterGauge(
|
|
|
|
|
$namespace,
|
|
|
|
|
$name,
|
|
|
|
|
array_key_exists($name, $help_texts) ? $help_texts[$name] : 'no help text available',
|
|
|
|
|
preg_match('/^virtualserver_/', $name) ? $virtualserver_label_keys : []
|
|
|
|
|
);
|
|
|
|
|
$gauge->set(
|
|
|
|
|
(float) $data,
|
|
|
|
|
preg_match('/^virtualserver_/', $name) ? $virtualserver_label_values : []
|
|
|
|
|
);
|
|
|
|
|
// loop over all virtualservers, because some statistics (e.g. packet loss)
|
|
|
|
|
// are tracked per virtualserver
|
|
|
|
|
foreach($ts3->serverList() as $virtualserver) {
|
|
|
|
|
$infos = array_map(function($info_raw) {
|
|
|
|
|
return is_object($info_raw) ? $info_raw->toString() : $info_raw;
|
|
|
|
|
}, $virtualserver->getInfo());
|
|
|
|
|
|
|
|
|
|
// fill $virtualserver_label_values
|
|
|
|
|
foreach($virtualserver_label_keys as $virtualserver_label_key) {
|
|
|
|
|
$virtualserver_label_values[] = $infos[$virtualserver_label_key];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach($infos as $name => $data) {
|
|
|
|
|
// gauge only supports floats
|
|
|
|
|
// $infos/$data is a mix of int, string and NULL
|
|
|
|
|
if(preg_match('/^\d*(\.\d*)?$/', $data)) {
|
|
|
|
|
$gauge = $registry->getOrRegisterGauge(
|
|
|
|
|
$namespace,
|
|
|
|
|
$name,
|
|
|
|
|
array_key_exists($name, $help_texts) ? $help_texts[$name] : 'no help text available',
|
|
|
|
|
preg_match('/^virtualserver_/', $name) ? $virtualserver_label_keys : []
|
|
|
|
|
);
|
|
|
|
|
$gauge->set(
|
|
|
|
|
(float) $data,
|
|
|
|
|
preg_match('/^virtualserver_/', $name) ? $virtualserver_label_values : []
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $e) {
|
|
|
|
|
// something failed, set ${namespace}_up to 0
|
|
|
|
|
$up->set(0, []);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// render all metrics as HTML and output them
|
|
|
|
|
// render all metrics and output them
|
|
|
|
|
$renderer = new \Prometheus\RenderTextFormat();
|
|
|
|
|
$result = $renderer->render($registry->getMetricFamilySamples());
|
|
|
|
|
|
|
|
|
|