diff --git a/plugins/other/radio b/plugins/other/radio new file mode 100755 index 00000000..bd06bed6 --- /dev/null +++ b/plugins/other/radio @@ -0,0 +1,155 @@ +#!/usr/bin/php + "ice", // server-type (ice/shout) + "host" => "192.168.1.5", // server hostname or ip + "port" => 8000, // server port + "mountpoint" => "eclectix.mp3", // mountpoint to check (icecast only) + "name" => "IceCast" // name for use in munin graphs + ), + // SERVER #2 + array( "type" => "shout", // server-type + "host" => "radio.eclectix.de", // server hostname or ip + "port" => 8000, // server port + "name" => "ShoutCast" // name for use in munin graphs + ) + ); + +// -------------- CONFIGURATION END ---------------------------------------------------------------- + + function getIce( $host, $port, $mount, $name ) { + $error = false; + $fp = fsockopen( $host, $port, $errno, $errstr, 10 ); + if ( !$fp ) { + $error = $errstr ."(". $errno .")"; + } else { + fputs( $fp, "GET /status HTTP/1.1\r\n" ); + fputs( $fp, "Host: ". $host ."\r\n" ); + fputs($fp, "User-Agent: Mozilla\r\n"); + fputs( $fp, "Connection: close\r\n\r\n" ); + + $xml = ""; + + while ( !feof( $fp ) ) { + $xml .= fgets( $fp, 512 ); + } + + fclose($fp); + + if ( stristr( $xml, "HTTP/1.0 200 OK" ) == true ) { + $xml = trim( substr( $xml, 42 ) ); + } else { + $error = "Bad login"; + } + if ( !$error ) { + $res = array( "found" => true ); + + $mount = str_replace( ".", "\.", $mount ); + preg_match_all( "/Mount Point : \(\/(". $mount .")\).*?\\Current Listeners:\<\/td\>\(\d*?)\<\/td\>\<\/tr\>\Peak Listeners:\<\/td\>\(\d*?)\<\/td\>\<\/tr\>/s", $xml, $parser ); + + $res["mount"] = $parser[1][0]; + $res["listeners"] = $parser[2][0]; + $res["listeners_peak"] = $parser[3][0]; + $res["name"] = $name; + } else { + $res = $error; + } + } + return $res; + } + + function getShout( $host, $port, $name ) { + $error = false; + $fp = fsockopen( $host, $port, $errno, $errstr, 10 ); + if ( !$fp ) { + $error = $errstr ."(". $errno .")"; + } else { + fputs( $fp, "GET / HTTP/1.0\r\n" ); + fputs($fp, "User-Agent: Mozilla\r\n"); + fputs( $fp, "Connection: close\r\n\r\n" ); + + $xml = ""; + + while ( !feof( $fp ) ) { + $xml .= fgets($fp, 512); + } + fclose( $fp ); + + if ( stristr( $xml, "HTTP/1.0 200 OK" ) == true ) { + $xml = trim( substr( $xml, 42 ) ); + } else { + $error = "Bad login"; + } + if ( !$error ) { + $res = array( "found" => true ); + + preg_match_all( "/.*?Stream Status: \<\/font\>\<\/td\>\\\Stream is up at \d*? kbps with \(\d*?) of \d*? listeners \(\d*? unique\)\<\/b\>\<\/b\>/s", $xml, $parser ); + + $res["listeners"] = $parser[1][0]; + $res["name"] = $name; + + } else { + $res = $error; + } + } + return $res; + } + + switch( $argv[1] ) { + case "config": + echo "graph_title Stream Listeners\n"; + echo "graph_category Network\n"; + echo "graph_vlabel listeners\n"; + echo "graph_hlabel listeners\n"; + echo "graph_args --base 1000 -l 0\n"; + echo "graph_scale no\n"; + echo "graph_order"; + foreach ( $cfg as $c ) { + echo " ". strtolower( $c["name"] ); + } + echo " complete\n"; +// echo "\n"; + echo "graph_info Number of listeners to shout- and / or icecast streams\n"; + foreach ( $cfg as $c ) { + echo strtolower( $c["name"] ) .".info ". $c["name"] ." listeners\n"; + echo strtolower( $c["name"] ) .".label ". strtolower( $c["name"] ) ."\n"; + } + echo "complete.info Complete listeners\n"; + echo "complete.label complete\n"; + break; + default: + $complete = 0; + + foreach ( $cfg as $c ) { + switch ( $c["type"] ) { + case "ice": + $res = getIce( $c["host"], $c["port"], $c["mountpoint"], $c["name"] ); + $complete += $res["listeners"]; + break; + case "shout": + $res = getShout( $c["host"], $c["port"], $c["name"] ); + $complete += $res["listeners"]; + break; + } + echo strtolower($c["name"]) .".value ". $res["listeners"] ."\n"; + } + + echo "complete.value ". $complete ."\n"; + break; + } +?>