#!/usr/bin/php 'mumble42' ); if (isset($_ENV['host'])) $host = $_ENV['host']; if (isset($_ENV['port'])) $port = $_ENV['port']; if (isset($_ENV['IceProfile'])) $IceProfile = $_ENV['IceProfile']; if (isset($_ENV['IceScret'])) $IceSecret = array( 'secret' => $_ENV['IceScret'] ); if (count($argv)==1) { do_count(); } switch ($argv[1]) { case 'autoconf': do_autoconf(); break; case 'config': do_config(); break; default: do_count(); break; } exit(1); function IceConnect() { global $ICE, $host, $port, $IceProfile, $IceSecret; try { Ice_loadProfile($IceProfile); $iceproxy = $ICE->stringToProxy("Meta:tcp -h $host -p $port"); $metaServer = $iceproxy->ice_checkedCast("::Murmur::Meta")->ice_context($IceSecret); } catch (Exception $e) { fwrite(STDERR, $e."\n"); exit(1); } return $metaServer; } function do_autoconf() { $metaServer = null; $metaServer = IceConnect(); if ($metaServer != null) { fwrite(STDOUT, "yes\n"); exit(0); } fwrite(STDOUT, "no\n"); exit(1); } function do_config_header() { fwrite(STDOUT, "graph_title Mumble Users\n"); fwrite(STDOUT, "graph_vlabel Connected Users\n"); fwrite(STDOUT, "graph_category VoIP\n"); fwrite(STDOUT, "graph_info This graph shows the number of connected users on a murmur server\n"); fwrite(STDOUT, "total_maxusers.label Maximum allowed users\n"); fwrite(STDOUT, "total_maxusers.type GAUGE\n"); fwrite(STDOUT, "total_online.label Connected users\n"); fwrite(STDOUT, "total_online.type GAUGE\n"); } function do_config_data() { global $ICE, $IceSecret; try { $metaServer = IceConnect(); $AdefaultConf = $metaServer->getDefaultConf(); $AvirtualServer = $metaServer->getAllServers(); foreach ($AvirtualServer as $numserver=>$s) { $serverid = $s->ice_context($IceSecret)->id(); $servename = $s->ice_context($IceSecret)->getConf( 'registername'); $servename = preg_replace('/[^a-zA-Z0-9-#\$%&@\.+=§\/\\\]/', ' ', $servename); $servename = trim(preg_replace('/\s+/', ' ', $servename)); fwrite(STDOUT, "vserver_".$serverid."_maxusers.label ".$servename." Max users\n"); fwrite(STDOUT, "vserver_".$serverid."_maxusers.type GAUGE\n"); fwrite(STDOUT, "vserver_".$serverid."_online.label ".$servename." Connected users\n"); fwrite(STDOUT, "vserver_".$serverid."_online.type GAUGE\n"); } exit(0); } catch (Exception $e) { fwrite(STDERR, $e."\n"); exit(1); } } function do_config() { do_config_header(); do_config_data(); exit(0); } function do_count() { global $ICE, $IceSecret; $totalMaxUsers="0"; $totalConnectedUsers="0"; try { $metaServer = IceConnect(); $AdefaultConf = $metaServer->getDefaultConf(); $AvirtualServer = $metaServer->getAllServers(); foreach ($AvirtualServer as $numserver=>$s) { $maxusers = $s->ice_context($IceSecret)->getConf( 'users' ); if (!$maxusers) $maxusers = $AdefaultConf['users']; $totalMaxUsers += intval($maxusers); if ($s->ice_context( $IceSecret )->isRunning()) { $connectedUsers = count($s->ice_context($IceSecret)->getUsers()); $totalConnectedUsers += intval($connectedUsers); } else $connectedUsers = 0; $serverid = $s->ice_context($IceSecret)->id(); fwrite(STDOUT, "vserver_".$serverid."_maxusers.value ".$maxusers."\n"); fwrite(STDOUT, "vserver_".$serverid."_online.value ".$connectedUsers."\n"); } fwrite(STDOUT, "total_maxusers.value ".$totalMaxUsers."\n"); fwrite(STDOUT, "total_online.value ".$totalConnectedUsers."\n"); exit(0); } catch (Exception $e) { fwrite(STDERR, $e."\n"); exit(1); } } ?>