2
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/teamspeak/teamspeak_user
2017-02-23 21:50:22 +01:00

80 lines
2.3 KiB
Perl
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/perl -w
# teamspeak_user.pl
# Munin Plugin for Teamspeak3 Servers
# displays the number of connected users on TS3 servers
#######################################################
#
# by Tim Wulkau - www.wulkau.de
#
# 18.11.10 - v0.4
# -added queryuser login
# -subtract queryclients from usercount (tanks to Jakob Lenfers for the idea)
# 02.10.10 - v0.3
# -fixed welcomemessage error
# 31.01.10 - v0.2
# -fixed multiserver support
# -corrected usercount
# 17.01.10 - v0.1
# -initial release
#
######################################################
use strict;
use Net::Telnet;
# CONFIG HERE!
my $hostname = "localhost"; # serveraddress
my $port = 10011; # querryport (default: 10011)
my @serverids = (1); # array of virtualserverids (1,2,3,4,...)
my $username = ""; # only set if the default queryuser hasn´t enough rights (should work without this)
my $password = "";
# SCRIPT START!
if(exists $ARGV[0] and $ARGV[0] eq "config")
{
print "graph_title Teamspeak User\n";
print "graph_vlabel Connected Teamspeak Users\n";
print "graph_category voip\n";
print "graph_info This graph shows the number of connected users on a Teamspeak3 server\n";
foreach my $server (@serverids)
{
print "$server.label Users on Serverid $server\n";
print "$server.type GAUGE\n";
#print "$server.draw AREA\n";
}
exit 0;
}
else
{
my $telnet = new Net::Telnet(Timeout=>5, Errmode=>"return", Prompt=>"/\r/");
if (!$telnet->open(Host=>$hostname, Port=>$port)) {
die exit;
}
$telnet->waitfor("/Welcome to the TeamSpeak 3 ServerQuery interface/");
foreach my $server (@serverids)
{
$telnet->cmd("use sid=$server");
$telnet->waitfor("/error id=0 msg=ok/");
if($username && $password) {
$telnet->cmd("login $username $password");
$telnet->waitfor("/error id=0 msg=ok/");
}
$telnet->cmd("serverinfo");
my $clients = 0;
my $queryclients = 0;
my $line = $telnet->getline(Timeout=>5);
if ($line =~ m/virtualserver_clientsonline=(\d+) /) {
$clients = $1;
}
if ($line =~ m/virtualserver_queryclientsonline=(\d+) /) {
$queryclients = $1;
}
$telnet->waitfor("/error id=0 msg=ok/");
print "$server.value ".($clients - $queryclients)."\n";
}
$telnet->close;
}
exit;