| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | #!/usr/bin/env php
 | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  |     ///
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     //      A small script to grab the realtime statistics from a ShoutCast server
 | 
					
						
							|  |  |  |     //      Needed commands: php
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     //      Install:
 | 
					
						
							|  |  |  |     //              Edit the shoutcast.conf file
 | 
					
						
							|  |  |  |     //              Add a crontab (every 5 min) for:
 | 
					
						
							| 
									
										
										
										
											2014-10-08 19:07:58 +00:00
										 |  |  |     //              /opt/librenms/scripts/shoutcast.php makeCache
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     //              Add the following to your snmpd.conf file:
 | 
					
						
							| 
									
										
										
										
											2014-10-08 19:07:58 +00:00
										 |  |  |     //              extend shoutcast /opt/librenms/scripts/shoutcast.php
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     //      Version 1.1 By:
 | 
					
						
							|  |  |  |     //              All In One - Dennis de Houx <info@all-in-one.be>
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///
 | 
					
						
							|  |  |  |     ///////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     // START SETTINGS ///
 | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-11-05 09:33:32 +10:00
										 |  |  | 	$config		= "/opt/librenms/scripts/shoutcast.conf"; | 
					
						
							|  |  |  | 	$cache		= "/opt/librenms/scripts/shoutcast.cache"; | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     // END SETTINGS ///
 | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///
 | 
					
						
							| 
									
										
										
										
											2012-05-25 12:24:34 +00:00
										 |  |  |     // DO NOT EDIT BENETH THIS LINE
 | 
					
						
							| 
									
										
										
										
											2012-05-25 11:29:53 +00:00
										 |  |  |     ///
 | 
					
						
							|  |  |  |     ///////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Do NOT run this script through a web browser */ | 
					
						
							|  |  |  | 	if (!isset($_SERVER["argv"][0]) || isset($_SERVER['REQUEST_METHOD']) || isset($_SERVER['REMOTE_ADDR'])) { | 
					
						
							|  |  |  | 	    die('<span style="color: #880000; text-weight: bold; font-size: 1.3em;">This script is only meant to run at the command line.</span>'); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2011-10-02 09:41:55 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	$cmd	= (isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : ""); | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	function get_data($host, $port) { | 
					
						
							|  |  |  | 	    $fp		= @fsockopen($host, $port, &$errno, &$errstr, 5); | 
					
						
							|  |  |  | 	    if(!$fp) { $connect = 0; } | 
					
						
							|  |  |  | 	    if (!isset($connect)) { | 
					
						
							|  |  |  | 		fputs($fp, "GET /7.html HTTP/1.0\r\n" | 
					
						
							|  |  |  | 		    . "User-Agent: All In One - SHOUTcast Stats Parser" | 
					
						
							|  |  |  | 		    . " (Mozilla Compatible)\r\n\r\n"); | 
					
						
							|  |  |  | 		while (!feof($fp)) { | 
					
						
							|  |  |  | 		    $rawdata	= fgets($fp, 1024); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		fclose($fp); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    preg_match('/body>(.*)<\/body/', $rawdata, $matches); | 
					
						
							|  |  |  | 	    $res	= explode(',', $matches[1], 7); | 
					
						
							|  |  |  | 	    $res[7]	= $host; | 
					
						
							|  |  |  | 	    $res[8]	= $port; | 
					
						
							|  |  |  | 	    return $res; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function get_list($config) { | 
					
						
							|  |  |  | 	    if (file_exists($config)) { | 
					
						
							|  |  |  | 		$servers		= file($config); | 
					
						
							|  |  |  | 		$data			= array(); | 
					
						
							|  |  |  | 		foreach ($servers as $item=>$server) { | 
					
						
							|  |  |  | 		    list($host, $port)	= split(":", $server, 2); | 
					
						
							|  |  |  | 		    array_push($data, get_data(trim($host), trim($port))); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return $data; | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function doSNMPv2($vars) { | 
					
						
							|  |  |  | 	    $res = array(); | 
					
						
							|  |  |  | 	    foreach ($vars as $items=>$server) { | 
					
						
							| 
									
										
										
										
											2015-02-22 16:45:40 +00:00
										 |  |  |                 $var = array(); | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 		$var['bitrate']		= (isset($server['5']) ? (($server['5'] / 8) * 1000) : "0"); | 
					
						
							|  |  |  | 		//$var['bitrate']		= (isset($server['5']) ? ($server['5'] * 1024) : "0");
 | 
					
						
							|  |  |  | 		$var['traf_in']		= (isset($server['1']) ? ($var['bitrate'] * $server['1']) : "0"); | 
					
						
							|  |  |  | 		$var['traf_out']	= (isset($server['0']) ? ($var['bitrate'] * $server['0']) : "0"); | 
					
						
							|  |  |  | 		$var['current']		= (isset($server['0']) ? $server['0'] : "0"); | 
					
						
							|  |  |  | 		$var['status']		= (isset($server['1']) ? $server['1'] : "0"); | 
					
						
							|  |  |  | 		$var['peak']		= (isset($server['2']) ? $server['2'] : "0"); | 
					
						
							|  |  |  | 		$var['max']		= (isset($server['3']) ? $server['3'] : "0"); | 
					
						
							|  |  |  | 		$var['unique']		= (isset($server['4']) ? $server['4'] : "0"); | 
					
						
							|  |  |  | 		$host			= (isset($server['7']) ? $server['7'] : "unknown"); | 
					
						
							|  |  |  | 		$port			= (isset($server['8']) ? $server['8'] : "unknown"); | 
					
						
							|  |  |  | 		$tmp			= $host.":".$port; | 
					
						
							|  |  |  | 		foreach ($var as $item=>$value) { | 
					
						
							|  |  |  | 		    $tmp .= ";".$value; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		array_push($res, $tmp); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    return $res; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function makeCacheFile($data, $cache) { | 
					
						
							|  |  |  | 	    $fp = fopen($cache, 'w'); | 
					
						
							|  |  |  | 	    foreach ($data as $item=>$value) { | 
					
						
							|  |  |  | 		fwrite($fp, $value."\n"); | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	    fclose($fp); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	function readCacheFile($cache) { | 
					
						
							|  |  |  | 	    if (file_exists($cache)) { | 
					
						
							|  |  |  | 		$data		= file($cache); | 
					
						
							|  |  |  | 		foreach ($data as $item=>$value) { | 
					
						
							|  |  |  | 		    echo trim($value)."\n"; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	    } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-02 09:41:55 +00:00
										 |  |  | 	if ($cmd == "makeCache") { | 
					
						
							| 
									
										
										
										
											2011-09-28 23:24:28 +00:00
										 |  |  | 	    $servers	= get_list($config); | 
					
						
							|  |  |  | 	    $data	= doSNMPv2($servers); | 
					
						
							|  |  |  | 	    makeCacheFile($data, $cache); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 	    readCacheFile($cache); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ?>
 |