X-Git-Url: https://git-public.kairo.at/?p=php-utility-classes.git;a=blobdiff_plain;f=include%2Fclasses%2Frrdstat.php-class;h=015d5750f8423aef34d42ab04cd9b6ed5bb69a97;hp=470a131ceac6ca214d4f531948589b07196abfdb;hb=fe34d2fe76f7d1f69347e9fd6bc4535b60faec7f;hpb=31df2e13256aaf55e28d49646faa06b5762d9a96 diff --git a/include/classes/rrdstat.php-class b/include/classes/rrdstat.php-class index 470a131..015d575 100644 --- a/include/classes/rrdstat.php-class +++ b/include/classes/rrdstat.php-class @@ -23,7 +23,7 @@ class rrdstat { if (!is_null($this->rrd_file)) { if (!is_writeable($this->rrd_file)) { if (!file_exists($this->rrd_file)) { - if (touch($this->rrd_file)) { $this->create(); } + if (@touch($this->rrd_file)) { $this->create(); } else { trigger_error('RRD file can not be created', E_USER_WARNING); } } else { @@ -138,9 +138,10 @@ class rrdstat { } } } - $output = array(); $return_var = null; - exec($create_cmd, $output, $return_var); - if ($return_var) { trigger_error('rrd create returned with value '.$return_var, E_USER_WARNING); } + $return = `$create_cmd 2>&1`; + if (strpos($return, 'ERROR') !== false) { + trigger_error($this->rrd_file.' - rrd create error: '.$return, E_USER_WARNING); + } else { $this->status = 'ok'; } } @@ -153,9 +154,12 @@ class rrdstat { if (!is_null($evalcode)) { ob_start(); eval($evalcode); - $upvals = explode("\n", ob_get_contents()); + $ret = ob_get_contents(); + if (strlen($ret)) { $upvals = explode("\n", $ret); } ob_end_clean(); } + $walkfunc = create_function('&$val,$key', '$val = is_numeric($val)?$val:"U";'); + array_walk($upvals, $walkfunc); } else { foreach ($this->rrd_fields as $ds) { @@ -192,10 +196,17 @@ class rrdstat { $upvals[] = is_null($val)?'U':$val; } } - $update_cmd = 'rrdtool update '.$this->rrd_file.' N:'.implode(':', $upvals); - $output = array(); $return_var = null; - exec($update_cmd, $output, $return_var); - if ($return_var) { trigger_error('rrd update returned with value '.$return_var, E_USER_WARNING); } + $return = null; + if (count($upvals)) { + $update_cmd = 'rrdtool update '.$this->rrd_file.' N:'.implode(':', $upvals); + $return = `$update_cmd 2>&1`; + } + + if (strpos($return, 'ERROR') !== false) { + trigger_error($this->rrd_file.' - rrd update error: '.$return, E_USER_WARNING); + $success = false; + } + else { $success = true; } return ($return_var == 0); } @@ -216,7 +227,7 @@ class rrdstat { $return = `$fetch_cmd 2>&1`; if (strpos($return, 'ERROR') !== false) { - trigger_error('rrd fetch error: '.$return, E_USER_WARNING); + trigger_error($this->rrd_file.' - rrd fetch error: '.$return, E_USER_WARNING); $fresult = false; } else { @@ -308,8 +319,8 @@ class rrdstat { $duration = isset($gconf['duration'])?$gconf['duration']:396*86400; // 365+31 days $slice = isset($gconf['slice'])?$gconf['slice']:86400; // 1 day // vertical lines at month borders - $addSpecial .= ' VRULE:'.strtotime(date('Y-01-01')).'#FF0000'; - $addSpecial .= ' VRULE:'.strtotime(date('Y-01-01').' -1 year').'#FF0000'; + $addSpecial .= ' VRULE:'.strtotime(date('Y-01-01 12:00:00')).'#FF0000'; + $addSpecial .= ' VRULE:'.strtotime(date('Y-01-01 12:00:00').' -1 year').'#FF0000'; } else { $duration = isset($gconf['duration'])?$gconf['duration']:$this->rrd_step*500; // 500 steps @@ -345,6 +356,7 @@ class rrdstat { if (!isset($gconf['show_legend'])) { $gconf['show_legend'] = true; } } if (isset($erow['stack'])) { $grow['stack'] = ($erow['stack'] == true); } + if (isset($erow['desc'])) { $grow['desc'] = $erow['desc']; } $graphrows[] = $grow; } } @@ -394,7 +406,7 @@ class rrdstat { else { foreach ($graphrows as $grow) { if (isset($grow['gType']) && strlen($grow['gType'])) { - $textprefix = isset($grow['legend'])?$grow['legend']:$grow['name']; + $textprefix = isset($grow['desc'])?$grow['desc']:(isset($grow['legend'])?$grow['legend']:$grow['name']); // XXX: use lines below once we have rrdtol 1.2 // $graphrows[] = array('dType'=>'VDEF', 'name'=>$grow['name'].'_last', 'rpn_expr'=>$grow['name'].',LAST'); // $specialrows[] = array('sType'=>'PRINT', 'name'=>$grow['name'].'_last', 'text'=>'%3.2lf%s'); @@ -457,7 +469,7 @@ class rrdstat { $return = `$graph_cmd 2>&1`; if (strpos($return, 'ERROR') !== false) { - trigger_error('rrd graph error: '.$return, E_USER_WARNING); + trigger_error($this->rrd_file.' - rrd graph error: '.$return, E_USER_WARNING); $return = $graph_cmd."\n\n".$return; } $return = 'file:'.$fname."\n".$return; @@ -500,7 +512,7 @@ class rrdstat { $out .= '

'.$ptitle.'

'; if (!isset($pconf['show_update']) || $pconf['show_update']) { - $out .= '

Last Update: '.date('Y-m-d H:i:s', $this->last_update()).'

'; + $out .= '

Last Update: '.(is_null($this->last_update())?'unknown':date('Y-m-d H:i:s', $this->last_update())).'

'; } if (in_array($this->status, array('ok','readonly'))) {