From dc7486cf009ea8990dc3313dd3901d2c7785b91d Mon Sep 17 00:00:00 2001 From: Stanislav Rudenko Date: Sun, 13 Feb 2011 17:15:46 +0100 Subject: [PATCH] Initial version --- plugins/other/shoutcast | 137 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 plugins/other/shoutcast diff --git a/plugins/other/shoutcast b/plugins/other/shoutcast new file mode 100755 index 00000000..4949d63f --- /dev/null +++ b/plugins/other/shoutcast @@ -0,0 +1,137 @@ +#!/usr/local/bin/perl -w +# -*- cperl -*- + +=head1 NAME + +shoutcast online - Munin plugin to show online for shoutcast v1.9.8 + +=head1 CONFIGURATION + +This shows the default configuration of this plugin. You can override +the status URL. + + [shoutcast*] + env.url http://localhost:8000/7.html + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=head1 VERSION + + 1.0 + +=head1 AUTHOR + +Stanislav Rudenko aka Sandel + +=head1 LICENSE + +none + +=cut + +my $ret = undef; + +if (! eval "require LWP::UserAgent;"){ + $ret = "LWP::UserAgent not found"; +} + +my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://localhost:8000/7.html"; + +if ( exists $ARGV[0] and $ARGV[0] eq "autoconf" ) { + if ($ret){ + print "no ($ret)\n"; + exit 0; + } + + my $ua = LWP::UserAgent->new(timeout => 30); + $ua->agent('XML Getter (Mozilla Compatible)'); + + my $request = HTTP::Request->new( 'GET' => $URL ); + $request->protocol('HTTP/1.0'); + + my $response = $ua->request($request); + + unless ($response->is_success and $response->content =~ /<\/head>/im) { + print "no (no shoutcast status on $URL)\n"; + exit 0; + } else { + print "yes\n"; + exit 0; + } +} + +if ( exists $ARGV[0] and $ARGV[0] eq "config" ) { + + # Default Settings + print "graph_title SHOUTcast Online\n"; + print "graph_args --base 1000\n"; + print "graph_category shoutcast\n"; + print "graph_vlabel Connections per \${graph_period}\n"; + + # Max Listeners Allowed to Connect to Server + print "max_connections.draw AREA\n"; + print "max_connections.colour cdcfc4\n"; + print "max_connections.min 0\n"; + print "max_connections.label Max Slots\n"; + print "max_connections.type GAUGE\n"; + + # Peak Listeners + print "ax_used_connections.draw AREA\n"; + print "ax_used_connections.colour ffd660\n"; + print "ax_used_connections.min 0\n"; + print "ax_used_connections.label Peak Listeners\n"; + print "ax_used_connections.type GAUGE\n"; + + # DJ-Online tag must be eq to Peak Listeners + print "djonline_tag.draw AREA\n"; + print "djonline_tag.colour e5ff60\n"; + print "djonline_tag.min 0\n"; + print "djonline_tag.label DJ-Online Tag\n"; + print "djonline_tag.type GAUGE\n"; + + # Max Listeners Connected to Server + print "all_connections.draw LINE1\n"; + print "all_connections.colour a00e95\n"; + print "all_connections.min 0\n"; + print "all_connections.label Listeners\n"; + print "all_connections.type GAUGE\n"; + + # Max Unique Listeners Connected to Server + print "unique_connections.draw LINE1\n"; + print "unique_connections.colour 330099\n"; + print "unique_connections.min 0\n"; + print "unique_connections.label Unique Listeners\n"; + print "unique_connections.type GAUGE\n"; + + exit 0; +} + +#my $ua = LWP::UserAgent->new(timeout => 30); +#my $response = $ua->request(HTTP::Request->new('GET',$URL)); + +my $ua = LWP::UserAgent->new(timeout => 30); +$ua->agent('XML Getter (Mozilla Compatible)'); + +my $request = HTTP::Request->new( 'GET' => $URL ); +$request->protocol('HTTP/1.0'); + +my $response = $ua->request($request); + +#89,1,453,800,87,128,Kitadani Hiroshi - Bushi +#print $response->content . "\n\n"; + +if ( $response->content =~ /<\/head>(\d+),(\d+),(\d+),(\d+),(\d+),(\d+),(.*)<\/body>/s ) { + + my $djonline = ( $7 =~ m/Dj-Online/i ) ? $3 : '0'; + + print "max_connections.value $4\n"; + print "ax_used_connections.value $3\n"; + print "djonline_tag.value $djonline\n"; + print "all_connections.value $1\n"; + print "unique_connections.value $5\n"; +} else { + print "\n"; +}