Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / teamspeak / ts3v2_ @ c8d89f42

Historique | Voir | Annoter | Télécharger (8,17 ko)

1 aacf3b2c Marc Urben
#!/usr/bin/perl -w
2
# ts3v2_ (perl)
3
# Munin Plugin for Teamspeak3 Servers
4
# displays the number of connected users on TS3 servers
5
# and average transferrate per second over 5 min.
6
#
7
# You can use it with symlinks for overview and explicit ids.
8
# Also you can configure the following variables:
9
#  host
10
#  port
11
#
12
# by Marc Urben, www.oxi.ch or www.oom.ch
13
#
14
# Based on Tim Wulkau's script. Thank you!
15
# www.wulkau.de
16
#
17
#######################################################
18 d92232de -
# 02.10.10 - v0.3
19
#		    -now works again with 3.0.0-beta29 
20 aacf3b2c Marc Urben
#
21
# 18.04.10 - v0.2
22
#           -transfer mode added
23
#
24
# 13.04.10 - v0.1
25
#           -initial release
26
#
27
######################################################
28
 
29
#%# family=auto
30
#%# capabilities=autoconf suggest
31
 
32
use strict;
33
use Net::Telnet;
34
 
35
# CONFIG HERE!
36 d92232de -
my $hostname =  $ENV{host} || "188.40.110.119";    # serveraddress
37 aacf3b2c Marc Urben
my $port =      $ENV{port} || 10011;      # querryport
38
my $filename =  "ts3v2_";
39
 
40
# SCRIPT START!
41
#init telnet connection
42
my $name = ""; my $server = ""; my @num; my $id = 0; my $i = 0; my $myserver; my $transfer;
43
my $telnet = new Net::Telnet(Timeout=>1, Errmode=>"return", Prompt=>"/\r/");
44
if (!$telnet->open(Host=>$hostname, Port=>$port)) {
45
        die "Server could not be reached, please check your config!";
46
}
47
 
48
#get argument
49
my $argument = "";
50
if ($0 =~ /$filename(\w+)$/i) {
51
        $argument = $1;
52
} elsif ($ARGV[0] ne "suggest" and $ARGV[0] ne "autoconf") {
53
        die "Error: We need to know what serverid you want, so link this plugin as "
54
                .$filename."1, ".$filename."2 or ".$filename."overview.\n";
55
}
56
 
57
#check for overview, transfer or single server mode
58
my $mode = "";
59 c8d89f42 Marenz
if ($argument eq "overview" or $argument eq "transfer" or (defined $ARGV[0] and ($ARGV[0] eq "suggest" or $ARGV[0] eq "autoconf"))) {
60 aacf3b2c Marc Urben
        if ($argument eq "overview") {
61
                $mode = "o";
62
        } elsif($argument eq "transfer") {
63
                $mode = "t";
64
        }
65 d92232de -
        $telnet->waitfor("/Welcome/");
66 aacf3b2c Marc Urben
        $telnet->cmd("serverlist");
67
        my $line = $telnet->getline(Timeout=>1);
68
        my @servers = split(/\|/, $line);
69
        foreach (@servers) {
70
                if ($_ =~ m/virtualserver_id=(\d+) virtual/) {
71
                        push(@num, $1);
72
                } else {
73
                        die "ERROR: server string not recognized!\n";
74
                }
75
        }
76
        $telnet->waitfor("/error id=0 msg=ok/");
77
} elsif ($argument =~ /^[+-]?\d+$/ ) {
78
        $mode = "s";
79
        $server = $argument;
80
} else {
81
        die "ERROR: unknown plugin mode: $argument\n";
82
}
83
 
84
#check for config mode
85
if (exists $ARGV[0] and $ARGV[0] eq "autoconf") {
86
        print "yes";
87
        exit 0;
88
} elsif (exists $ARGV[0] and $ARGV[0] eq "suggest") {
89
        print "overview\n";
90
        print "transfer\n";
91
        foreach (@num) {
92
                print $_."\n";
93
        }
94
        exit 0;
95
} elsif (exists $ARGV[0] and $ARGV[0] eq "config") {
96
        if ($mode eq "s") {
97
                #single server mode
98 d92232de -
                $telnet->waitfor("/Welcome/");
99 aacf3b2c Marc Urben
                $telnet->cmd("use sid=".$server);
100
                $telnet->waitfor("/error id=0 msg=ok/");
101
                $telnet->cmd("serverinfo");
102
                my $line = $telnet->getline(Timeout=>1);
103
 
104
                if ($line =~ m/virtualserver_id=(\d+) virtual/) {
105
                        my $id = $1;
106
                } else {
107
                        die "ERROR: server string not recognized!\n";
108
                }
109
                if ($line =~ m/virtualserver_name=(.*) virtualserver_welcomemessage/) {
110
                        $name = $1;
111
                        $name =~ s/\\s/ /g;
112
                } else {
113
                        die "ERROR: server string not recognized!\n";
114
                }
115
                $telnet->waitfor("/error id=0 msg=ok/");
116
 
117
                print "graph_title Teamspeak Users ".$name."\n";
118
                print "graph_vlabel Connected Teamspeak Users\n";
119
                print "graph_category Teamspeak\n";
120
                print "graph_info This graph shows the number of connected users on a Teamspeak3 server\n";
121
                print "users.label Users\n";
122
                print "users.info Connected users to ".$name."\n";
123
                print "users.type GAUGE\n";
124
 
125
                exit 0;
126
        } elsif ($mode eq "o") {
127
                #overview mode
128
                print "graph_title Teamspeak Users Overview\n";
129
                print "graph_vlabel Connected Teamspeak Users\n";
130
                print "graph_category Teamspeak\n";
131
                print "graph_info This graph shows the number of connected users on a Teamspeak3 server\n";
132
 
133
                foreach (@num) {
134 d92232de -
                        $telnet->waitfor("/Welcome/");
135 aacf3b2c Marc Urben
                        $telnet->cmd("use sid=".$_);
136
                        $telnet->waitfor("/error id=0 msg=ok/");
137
                        $telnet->cmd("serverinfo");
138
                        my $line = $telnet->getline(Timeout=>1);
139
                        if ($line =~ m/virtualserver_name=(.*) virtualserver_welcomemessage/) {
140
                                $name = $1;
141
                                $name =~ s/\\s/ /g;
142
                        } else {
143
                                die "ERROR: server string not recognized!\n";
144
                        }
145
                        $telnet->waitfor("/error id=0 msg=ok/");
146
                        print $_.".label ".$name."\n";
147
                        print $_.".info Users connected on ".$name."\n";
148
                        print $_.".type GAUGE\n";
149
                }
150
                exit 0;
151
        } elsif ($mode eq "t") {
152
                #transfer mode
153
                print "graph_title Teamspeak Transfer Overview\n";
154
                print "graph_vlabel Teamspeak Transfer\n";
155
                print "graph_category Teamspeak\n";
156
                print "graph_info This graph shows the Teamspeak3 Transfer Overview\n";
157
                print "transfer.label ~ Transfer per second\n";
158
                print "transfer.info Transfer per second over 5 min\n";
159
                print "transfer.type DERIVE\n";
160
                exit 0;
161
        }
162
} else {
163
        #go go magic, go!
164
        if ($mode eq "s") {
165
                #single mode
166 d92232de -
                $telnet->waitfor("/Welcome/");
167 aacf3b2c Marc Urben
                $telnet->cmd("use sid=".$server);
168
                $telnet->waitfor("/error id=0 msg=ok/");
169
                $telnet->cmd("serverinfo");
170
 
171
                my $line = $telnet->getline(Timeout=>1);
172
                if ($line =~ m/virtualserver_clientsonline=(\d+) /) {
173
                        print "users.value ".($1-1)."\n";
174
                } else {
175
                        print "users.value 0\n";
176
                }
177
                $telnet->waitfor("/error id=0 msg=ok/");
178
        } elsif ($mode eq "o") {
179
                #overview mode
180
                for (@num) {
181 d92232de -
                        $telnet->waitfor("/Welcome/");
182 aacf3b2c Marc Urben
                        $telnet->cmd("use sid=".$_);
183
                        $telnet->waitfor("/error id=0 msg=ok/");
184
                        $telnet->cmd("serverinfo");
185
 
186
                        my $line = $telnet->getline(Timeout=>1);
187
                        if ($line =~ m/virtualserver_clientsonline=(\d+) /) {
188
                                print $_.".value ".($1-1)."\n";
189
                        } else {
190
                                print $_.".value 0\n";
191
                        }
192
                        $telnet->waitfor("/error id=0 msg=ok/");
193
                }
194
        } elsif ($mode eq "t") {
195 d92232de -
                $telnet->waitfor("/Welcome/");
196 aacf3b2c Marc Urben
                $telnet->cmd("hostinfo");
197
                my @tsave;
198
                my $line = $telnet->getline(Timeout=>1);
199
                if ($line =~ m/connection_bytes_received_total=(\d+) connection_bandwidth_sent_last_second_total/) {
200
                        $transfer = $1;
201
                        print "transfer.value ".(($transfer-($transfer%300))/300)."\n";
202
                } else {
203
                        die "ERROR: server string not recognized!\n";
204
                }
205
                $telnet->waitfor("/error id=0 msg=ok/");
206
 
207
        }
208
}
209
 
210
#close telnet connection
211
$telnet->close;
212 d92232de -
exit;