2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/other/murmur_ice_users
2011-12-18 15:10:16 +01:00

132 lines
2.5 KiB
PHP
Executable File

#!/usr/bin/php
<?php
/*
Plugin to monitor users on a Mumble server (a.k.a. murmur).
Use ICE to to query murmur.
Origional Author: Thomas Leveil
Contributors: none
Version: 1.0
You can specify a different ip:port in the munin-node config file as follow:
[murmur_ice_users]
env.host 127.0.0.1
env.port 6502
#%# family=contrib
#%# capabilities=autoconf
*/
$host = "127.0.0.1";
$port = "6502";
if (isset($_ENV['host'])) $host = $_ENV['host'];
if (isset($_ENV['port'])) $port = $_ENV['port'];
switch ($argv[1])
{
case 'autoconf':
do_autoconf();
break;
case 'config':
do_config();
break;
default:
do_count();
break;
}
exit(1);
function do_autoconf()
{
global $ICE, $host, $port;
try
{
Ice_loadProfile();
$iceproxy = $ICE->stringToProxy("Meta:tcp -h $host -p $port");
$metaServer = $iceproxy->ice_checkedCast("::Murmur::Meta");
fwrite(STDOUT, "yes\n");
exit(0);
}
catch (Exception $e)
{
fwrite(STDOUT, "no\n");
exit(1);
}
}
function do_config()
{
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, "maxusers.label Maximum number of users allowed\n");
fwrite(STDOUT, "maxusers.type GAUGE\n");
fwrite(STDOUT, "online.label connected users\n");
fwrite(STDOUT, "online.type GAUGE\n");
exit(0);
}
function do_count()
{
global $ICE, $host, $port;
$totalMaxUsers="U";
$totalConnectedUsers="U";
try
{
Ice_loadProfile();
$iceproxy = $ICE->stringToProxy("Meta:tcp -h $host -p $port");
$metaServer = $iceproxy->ice_checkedCast("::Murmur::Meta");
$AdefaultConf = $metaServer->getDefaultConf();
$AvirtualServer = $metaServer->getBootedServers();
$totalMaxUsers = 0;
foreach ($AvirtualServer as $numserver=>$s)
{
$maxusers = $s->getConf('users');
if (!$maxusers) $maxusers = $AdefaultConf['users'];
$totalMaxUsers += intval($maxusers);
$connectedUsers = countConnectedUsers($s->getTree());
$totalConnectedUsers += $connectedUsers;
}
fwrite(STDOUT, "maxusers.value ".$totalMaxUsers."\n");
fwrite(STDOUT, "online.value ".$totalConnectedUsers."\n");
exit(0);
}
catch (Exception $e)
{
fwrite(STDERR, $e."\n");
exit(1);
}
}
function countConnectedUsers($channelTree)
{
$count = intval($channelTree->players);
if (isset($channelTree->children))
{
foreach ($channelTree->children as $c)
{
$count += countConnectedUsers($c);
}
}
return $count;
}
?>