commit version 22.12.12447
This commit is contained in:
@ -0,0 +1,86 @@
|
||||
<?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)
|
||||
{
|
||||
$data[IN] = NULL;
|
||||
$data[OUT] = NULL;
|
||||
$data_time = 0;
|
||||
|
||||
if(preg_match("/^!(.*)$/",$targetstring,$matches))
|
||||
{
|
||||
$command = $matches[1];
|
||||
|
||||
wm_debug("ExternalScript ReadData: Running $command\n");
|
||||
// run the command here
|
||||
if( ($pipe = popen($command,"r")) === false)
|
||||
{
|
||||
wm_warn("ExternalScript ReadData: Failed to run external script. [WMEXT01]\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
$i=0;
|
||||
while( ($i <5) && ! feof($pipe) )
|
||||
{
|
||||
$lines[$i++] = rtrim(fgets($pipe,1024));
|
||||
}
|
||||
pclose($pipe);
|
||||
|
||||
if($i==5)
|
||||
{
|
||||
$data[IN] = floatval($lines[0]);
|
||||
$data[OUT] = floatval($lines[1]);
|
||||
|
||||
$item->add_hint("external_line1",$lines[0]);
|
||||
$item->add_hint("external_line2",$lines[1]);
|
||||
$item->add_hint("external_line3",$lines[2]);
|
||||
$item->add_hint("external_line4",$lines[3]);
|
||||
$data_time = time();
|
||||
}
|
||||
else
|
||||
{
|
||||
wm_warn("ExternalScript ReadData: Not enough lines read from external script ($i read, 4 expected) [WMEXT02]\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wm_debug ("ExternalScript ReadData: Returning (".($data[IN]===NULL?'NULL':$data[IN]).",".($data[OUT]===NULL?'NULL':$data[OUT]).",$data_time)\n");
|
||||
|
||||
return( array($data[IN], $data[OUT], $data_time) );
|
||||
}
|
||||
}
|
||||
|
||||
// vim:ts=4:sw=4:
|
||||
|
||||
?>
|
Reference in New Issue
Block a user