Munin plugin Teamspeak 3 Bandwidth

Door MrOizo2005 op vrijdag 25 november 2011 00:30 - Reacties (4)
Categorie: Munin, Views: 3.944

Ik zag opeens dat ik genoeg Karma punten had voor een Tweakers Blog, dus ik dacht wat houd me tegen. Ik zal de blog later wel een beetje opfleuren.

Ik maak zelf al een tijd gebruik van Munin (http://munin-monitoring.org), en de laatste 2 maanden kan ik daar al niks submitten aan plugins. Dus heb ik het besloten om het hier maar neer te zetten. In de hoop dat andere mensen er ook iets aan hebben.

Er bestond al een lange tijd een plugin om teamspeak users te meten en in een grafiek te zetten, maar ik was eigenlijk wel benieuwd naar het data verbruik. Vandaar dat ik even aan de gang ben gegaan.

De plugin is een aangepaste versie van de bestaande teamspeak_users plugin dus grotendeels van de credits gaat ook uit naar hem.

Ik hoop dat me eerste blog post een beetje in smaak valt en wie weet wat er nog komen gaat.


Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/perl -w
# teamspeak_bandwidth.pl
# Munin Plugin for Teamspeak3 bandwidth
# displays the bandwidth on TS3 servers
#
# This plugin is modified from Tim Wulkau (Teamspeak Users) plugin.
# So most of the credits go to him.

#######################################################
#
# by Oizopower
#
# 25.11.11 - v0.1
#            -initial release
#
######################################################

use strict;
use Net::Telnet;

# CONFIG HERE!
my $hostname = "IP VAN DE SERVER";    # serveraddress
my $port = 10011;              # querryport (default: 10011)
my @serverids = (1);           # array of virtualserverids (1,2,3,4,...) 

my $username = "ServerQuery Username";            # only set if the default queryuser hasn?t enough rights (should work without this)
my $password = "ServerQuery Password";

# SCRIPT START!
if ($ARGV[0] and $ARGV[0] eq "autoconf") { print "yes\n"; exit 0; }

if(exists $ARGV[0] and $ARGV[0] eq "config")
{
  print "graph_title Teamspeak Bandwidth\n";
  print "graph_vlabel Teamspeak Bandwidth in MB\n";
  print "graph_category Teamspeak\n";
  print "graph_info This graph shows the bandwidth on a Teamspeak3 server\n";

  foreach my $server (@serverids)
  {
    print "sendID$server.label Send on ServerID $server\n";
    print "sendID$server.type GAUGE\n";

    print "receivedID$server.label Received on ServerID $server\n";
    print "receivedID$server.type GAUGE\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 $received = 0;
    my $send = 0;

    my $line = $telnet->getline(Timeout=>5);
    if ($line =~ m/connection_bytes_received_total=(\d+) /) {
      $received = $1;
    }
    if ($line =~ m/connection_bytes_sent_total=(\d+) /) {
      $send = $1;
    }
    $telnet->waitfor("/error id=0 msg=ok/");
    
    print "sendID$server.value ";
    printf("%.2f", (-($send/1024)/1024));
    print "\n";

    print "receivedID$server.value ";
    printf("%.2f", (($received/1024)/1024));
    print "\n";
  }  
  $telnet->close;
}
exit;