mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-22 22:25:23 +00:00
Code cleanning/refactoring // Stats for root server and virtual servers
This commit is contained in:
parent
d025504545
commit
a8819e1993
1 changed files with 193 additions and 148 deletions
|
@ -1,185 +1,230 @@
|
|||
#!/usr/bin/php
|
||||
<?php
|
||||
/*
|
||||
: << =cut
|
||||
|
||||
=head1 NAME
|
||||
|
||||
murmur_ice_users
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This plugin monitors users on a Mumble server (a.k.a. murmur).
|
||||
It uses PHP and ICE to to query murmur. On debian, you can install mumble-server-web
|
||||
to get the dependencies installed and set up.
|
||||
|
||||
|
||||
=head1 CONFIGURATION
|
||||
|
||||
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
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Thomas Léveil
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
Permission to use, copy, and modify this software with or without fee
|
||||
is hereby granted, provided that this entire notice is included in
|
||||
all source code copies of any software which is or includes a copy or
|
||||
modification of this software.
|
||||
|
||||
THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
|
||||
IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
|
||||
REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
|
||||
MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
|
||||
PURPOSE.
|
||||
|
||||
=head1 CONTRIBUTE
|
||||
|
||||
find this plugin on github at http://github.com/VolatileMesh/munin-plugins
|
||||
|
||||
=head1 MAGIC MARKERS
|
||||
|
||||
#%# family=contrib
|
||||
#%# capabilities=autoconf
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
1.1
|
||||
|
||||
=head1 CHANGELOG
|
||||
|
||||
=head2 1.0 - 2009/05/04
|
||||
|
||||
initial release
|
||||
|
||||
=head2 1.1 - 2011/01/13
|
||||
|
||||
fix to make it work with murmur v1.2.2
|
||||
|
||||
|
||||
=cut
|
||||
/**
|
||||
** =head1 NAME
|
||||
**
|
||||
** murmur_ice_users
|
||||
**
|
||||
** =head1 DESCRIPTION
|
||||
**
|
||||
** This plugin monitors users on a Mumble server (a.k.a. murmur).
|
||||
** It uses PHP and ICE to to query murmur. On debian, you can install mumble-server-web
|
||||
** to get the dependencies installed and set up.
|
||||
**
|
||||
**
|
||||
** =head1 CONFIGURATION
|
||||
**
|
||||
** 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
|
||||
** env.IceProfile xxxxx
|
||||
** env.IceSecret xxxxx
|
||||
**
|
||||
** =head1 AUTHOR
|
||||
**
|
||||
** Original Author Thomas L<>veil
|
||||
** Modification by DisasteR - 2011/04/19
|
||||
**
|
||||
** =head1 LICENSE
|
||||
**
|
||||
** Permission to use, copy, and modify this software with or without fee
|
||||
** is hereby granted, provided that this entire notice is included in
|
||||
** all source code copies of any software which is or includes a copy or
|
||||
** modification of this software.
|
||||
**
|
||||
** THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
|
||||
** IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
|
||||
** REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
|
||||
** MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
|
||||
** PURPOSE.
|
||||
**
|
||||
**
|
||||
** =head1 MAGIC MARKERS
|
||||
**
|
||||
** #%# family=contrib
|
||||
** #%# capabilities=autoconf
|
||||
**
|
||||
**
|
||||
** =head1 VERSION
|
||||
**
|
||||
** 1.2
|
||||
**
|
||||
** =head1 CHANGELOG
|
||||
**
|
||||
** =head2 1.0 - 2009/05/04
|
||||
**
|
||||
** initial release
|
||||
**
|
||||
** =head2 1.1 - 2011/01/13
|
||||
**
|
||||
** fix to make it work with murmur v1.2.2
|
||||
**
|
||||
** =head3 1.2 - 2011/04/19
|
||||
**
|
||||
** Code cleaning and refactoring
|
||||
** Stats for root server and Virtual Servers
|
||||
**
|
||||
** =cut
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
$host = "127.0.0.1";
|
||||
$port = "6502";
|
||||
$IceProfile = 'Murmur123';
|
||||
$IceSecret = array( 'secret' => '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();
|
||||
}
|
||||
do_count();
|
||||
}
|
||||
|
||||
switch ($argv[1])
|
||||
{
|
||||
case 'autoconf':
|
||||
do_autoconf();
|
||||
break;
|
||||
{
|
||||
case 'autoconf':
|
||||
do_autoconf();
|
||||
break;
|
||||
|
||||
case 'config':
|
||||
do_config();
|
||||
break;
|
||||
case 'config':
|
||||
do_config();
|
||||
break;
|
||||
|
||||
default:
|
||||
do_count();
|
||||
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()
|
||||
{
|
||||
global $ICE, $host, $port;
|
||||
try
|
||||
$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)
|
||||
{
|
||||
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);
|
||||
$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()
|
||||
{
|
||||
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);
|
||||
do_config_header();
|
||||
do_config_data();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
function do_count()
|
||||
{
|
||||
global $ICE, $host, $port;
|
||||
|
||||
$totalMaxUsers="U";
|
||||
$totalConnectedUsers="U";
|
||||
global $ICE, $IceSecret;
|
||||
|
||||
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);
|
||||
|
||||
$tree = $s->getTree();
|
||||
//print_r($tree);
|
||||
$connectedUsers = countConnectedUsers($s->getTree());
|
||||
$totalConnectedUsers += $connectedUsers;
|
||||
}
|
||||
|
||||
$totalMaxUsers="0";
|
||||
$totalConnectedUsers="0";
|
||||
|
||||
fwrite(STDOUT, "maxusers.value ".$totalMaxUsers."\n");
|
||||
fwrite(STDOUT, "online.value ".$totalConnectedUsers."\n");
|
||||
exit(0);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
fwrite(STDERR, $e."\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
$metaServer = IceConnect();
|
||||
$AdefaultConf = $metaServer->getDefaultConf();
|
||||
|
||||
$AvirtualServer = $metaServer->getAllServers();
|
||||
|
||||
function countConnectedUsers($channelTree)
|
||||
{
|
||||
$count = intval(count($channelTree->users));
|
||||
|
||||
if (isset($channelTree->children))
|
||||
foreach ($AvirtualServer as $numserver=>$s)
|
||||
{
|
||||
foreach ($channelTree->children as $c)
|
||||
{
|
||||
$count += countConnectedUsers($c);
|
||||
}
|
||||
$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");
|
||||
}
|
||||
|
||||
return $count;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Loading…
Add table
Add a link
Reference in a new issue