All pastes #2014938 Raw Edit

Elbandi

public text v1 · immutable
#2014938 ·published 2010-12-09 18:04 UTC
rendered paste body
#!/usr/bin/perl -w
# teamspeak_user.pl
# Munin Plugin for Teamspeak3 Servers
# displays the number of connected users on TS3 servers

# Configuration variables:
#
#       serveraddress   - host (default "localhost")
#       queryport       - port (default "10011")
#       serverids       - list virtualserver ids to monitor. E.g. "env.serverids 1 2 5 7"
#       username        - only set if the default queryuser hasn´t enough rights (default "")
#       password        - only set if the default queryuser hasn´t enough rights (default "")


#######################################################
#
# 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;

my $hostname = $ENV{serveraddress} || "localhost";
my $port = $ENV{queryport} || 10011;
my @serverids = exists $ENV{'serverids'} ? split(' ', $ENV{'serverids'}) : (1);

my $username = $ENV{username} || "";
my $password = $ENV{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;