#!/usr/bin/perl # # 2007-06-26 # Written by Ghost # # 2008-04-16 # Update: Wildcard version # # Requirements: "rcon" command written by [ASY]Zyrain # [ http://trog.qgl.org/browse/docs/code/hl2rcon.c ] # # Configuration variables # # srcdspass - RCON password # srcdsrcon - Path to rcon command (optional) # srcdsplayersmax - Maximum number of players (optional, default: 32) # # Magic markers - optional - used by installation scripts and # munin-config: # #%# family=contrib #%# capabilities=autoconf use strict; my ($HOST, $PORT) = $0 =~ m/.*_([^:]+)_(\d+)$/; exit 1 if (!defined($HOST) || !defined($PORT)); my $PASS = $ENV{srcdspass} || ""; my $RCON = $ENV{srcdsrcon} || "/usr/local/bin/rcon"; my $MAX = $ENV{srcdsplayersmax} || 32; my $COMMAND = "$RCON -a$HOST -p$PORT -P$PASS stats"; my $arg = shift(); if ($arg eq 'config') { print_config(); exit(); } elsif ($arg eq 'autoconf') { unless (test_service() ) { print "yes\n"; } else { print "no\n"; } exit; } my $statline; open (SERVICE, "$COMMAND |") or die ("Could not execute '$COMMAND': $!"); while() { $statline = $_; next if ($statline !~ m/\s*[\w+\.]+\s+[\w+\.]+\s+[\w+\.]+\s+\d+\s+\d+\s+[\w+\.]+\s+\d+/); my ($cpu, $in, $out, $uptime, $users, $fps, $players) = ($statline =~ m/^\s*([\w+\.]+)\s+([\w+\.]+)\s+([\w+\.]+)\s+(\d+)\s+(\d+)\s+([\w+\.]+)\s+(\d+)/); if (defined($players)) { print "players.value $players\n"; } } sub print_config { my $num = 0; print("graph_title Number of players at $HOST:$PORT\n", "graph_args --base 1000\n", "graph_vlabel Players\n", "graph_category SourceDS\n", "graph_info The number of players on Source game server, such as HL2, CS:S and DoD:S.\n"); print ("players.label Players\n", "players.min 0\n", "players.max $MAX\n", "players.type GAUGE\n"); } sub test_service { my $return = 1; system ("$RCON >/dev/null 2>/dev/null"); if ($? == 0) { system ("$COMMAND >/dev/null 2>/dev/null"); if ($? == 0) { print "yes\n"; $return = 0; } else { print "no (could not connect to server $HOST:$PORT, verify address and srcdspass)\n"; } } else { print "no (rcon command not found, see install instructions)\n"; } exit $return; }