#!/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 Teamspeak\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;