![]() ![]() |
weathermap |
Subversion Repositories: |
Compare with Previous - Blame - Download
<?php// Run an external 'MRTG-compatible' script, and return it's values// TARGET !/usr/local/bin/qmailmrtg7 t /var/log/qmail// MRTG Target scripts return 4 lines of text as output:// 'Input' value - interpreted as a byte count (so multiplied by 8)// 'Output' value - interpreted as a byte count (so multiplied by 8)// 'uptime' as a string// 'name of targer' as a string// we ignore the last two// NOTE: Obviously, if you allow anyone to create maps, you are// allowing them to run ANY COMMAND as the user that runs// weathermap, by using this plugin. This might not be a// good thing.// If you want to allow only one command, consider making// your own datasource plugin which only runs that one command.class WeatherMapDataSource_external extends WeatherMapDataSource {function Recognise($targetstring){if(preg_match("/^!(.*)$/",$targetstring,$matches)){return TRUE;}else{return FALSE;}}function ReadData($targetstring, &$map, &$item){$inbw=-1;$outbw=-1;$data_time = 0;if(preg_match("/^!(.*)$/",$targetstring,$matches)){$command = $matches[1];debug("ExternalScript ReadData: Running $command\n");// run the command hereif( ($pipe = popen($command,"r")) === false){warn("ExternalScript ReadData: Failed to run external script.\n");}else{$i=0;while( ($i <5) && ! feof($pipe) ){$lines[$i++] = fgets($pipe,1024);}pclose($pipe);if($i==5){$inbw = floatval($lines[0]);$outbw = floatval($lines[1]);$data_time = time();}else{warn("ExternalScript ReadData: Not enough lines read from external script ($i read, 4 expected)\n");}}}debug ("ExternalScript ReadData: Returning ($inbw,$outbw,$data_time)\n");return( array($inbw, $outbw, $data_time) );}}// vim:ts=4:sw=4:?>