#!/usr/bin/perl # # Plugin to monitor the number of guests/users on a vbulletin4 forum # Since we are using a regexp, this will work for EN forum only... adapt the regexp if your forum is not using that language. # visual-regexp is a great help for tuning the regexp (package exists on Debian and Ubuntu repositories) # # # Parameters supported: # # config # autoconf # # Configurable variables # # url to online.php, this page is part of vbulletin distribution, pp=1 so the page is fast to load and doesn't give us too many unwanted info # # $Log$ # # # Not sure about those lines... # # Magic markers: #%# family=auto #%# capabilities=autoconf my $ret = undef; if (! eval "require LWP::UserAgent;") { $ret = "LWP::UserAgent not found"; } # CHANGE ME my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://www.url.to/forums/online.php?pp=1"; # We will use this variable, not on this release ;-) my $forum_type = exists $ENV{'type'} ? $ENV{'type'} : "vbulletin"; # same here my %regexp = ("vbulletin"=> "(\d+)[^\d]+(\d+)\sguests\", "punbb" => "", "phpbb" => ""); my $type = undef; my $timeout = 30; if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" ) { if ($ret) { print "no ($ret)\n"; } else { print "yes\n"; } exit 0; } if ( defined $ARGV[0] and $ARGV[0] eq "config" ) { print "graph_title Forum Users\n"; print "graph_args -l 0\n"; print "graph_vlabel current users\n"; print "graph_category forum\n"; print "graph_total Total\n"; print "members.label Members\n"; print "members.draw AREA\n"; print "guests.draw STACK\n"; print "guests.label Guests\n"; exit 0; } my $ua = LWP::UserAgent->new(timeout => $timeout); my $url = sprintf $URL; my $response = $ua->request(HTTP::Request->new('GET',$url)); # part of the output we want to catch :

42 members and 420 guests

--> 42 - 420 if ($response->content =~ /

(\d+)\smembers[^\d]+(\d+)\sguests<\/h1>/im) { print "members.value $1\n"; print "guests.value $2\n"; } else { print "members.value U\n"; print "guests.value U\n"; } # vim:syntax=perl