#!/usr/bin/perl
use strict;
# use module
use XML::Simple;
use Data::Dumper;
use LWP::UserAgent;
use Getopt::Std;
use RRDs;
my $interval=0;
my $rrd\\_file="/var/rrd/streams-2011.rrd";
our($opt\\_r,$opt\\_q,$opt\\_i,$opt\\_s);
getopts('rqi:s:');
# Command-line options:
#
# -i Specifies polling interval
# -q Silent operation (for running in a cron job)
# -r Outputs to RRD
# -s Specifies server to poll
# Set default interval
if (!$opt\\_i) { $interval = 10; } else { $interval = $opt\\_i; }
!$opt\\_s && die('Please specify a server to query');
while (1) {
my $ua = new LWP::UserAgent;
$ua->timeout(10);
# Set up connection
my $wowza\\_url = "http://$opt\\_s:1935/connectioncounts.xml";
my $wowza\\_request = new HTTP::Request GET => $wowza\\_url;
my $wowza\\_result = $ua->request($wowza\\_request);
# create object
my $hlssum = 0;
my $rtspsum = 0;
my $flashsum = 0;
my $iphonesum = 0;
my @streamcount = 0;
my %namecount = 0;
if($wowza\\_result->is\\_success) {
my $wowza\\_xml = new XML::Simple;
my $wowza\\_data = $wowza\\_xml->XMLin($wowza\\_result->content);
my $loopindex = 0;
#Loop through all Streams
for my $stream (@{$wowza\\_data->{VHost}->{Application}->{ApplicationInstance}->{Stream}})
{
$loopindex++;
$flashsum += $stream->{SessionsFlash};
$hlssum += $stream->{SessionsCupertino};
$rtspsum += $stream->{SessionsRTSP};
$streamcount[$loopindex] = $stream->{SessionsFlash} + $stream->{SessionsCupertino} + $stream->{SessionsRTSP};
$namecount{$stream->{Name}} = $streamcount[$loopindex];
}
} else {
!$opt\\_q && print " [ERR] ";
}
# You'll need to alter the %namecount hashes here to accomodate for your own stream names.
$opt\\_r && RRDs::update("/var/rrd/streams-2011.rrd","N:$namecount{'mobile-1'}:$namecount{'mobile-2'}:$hlssum:$rtspsum:$flashsum:$namecount{'ipad.smil'}:$namecount{'mobile.smil'}");
if (!$opt\\_q) { $opt\\_r && print "[RRD] "; }
!$opt\\_q && print "[ F: $flashsum: H $hlssum : R $rtspsum ]";
!$opt\\_q && print "[ Low: $namecount{'mobile-1'} High: $namecount{'mobile-2'} ]";
!$opt\\_q && print "[ iOS: $namecount{'ipad.smil'} Roku: $namecount{'mobile.smil'} ]";
!$opt\\_q && print "[ StreamClass | High: $namecount{'playlist-high'} Low: $namecount{'playlist-low'} ]n";
sleep($interval);
}