diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index 008e540179..df66e7bf2c 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,10 @@ +2009-04-06 Evi Vanoost + + * reporting/fgraph.php: Simplified agent access to reduce looping + + * reporting/pChart/pChart.class: Found problem where the graph was + looping with certain data when the Scale1 was exactly 1 + 2009-04-06 Sancho Lerena * godmode/setup/setup.php diff --git a/pandora_console/reporting/fgraph.php b/pandora_console/reporting/fgraph.php index 1adefd4cd9..bb0881bcf5 100644 --- a/pandora_console/reporting/fgraph.php +++ b/pandora_console/reporting/fgraph.php @@ -430,11 +430,8 @@ function graphic_agentmodules ($id_agent, $width, $height) { function graphic_agentaccess ($id_agent, $width, $height, $period = 0) { global $config; - /* BROKEN: Need to fix, it gets 100% CPU of Apache !!!*/ - $data = array(); -/* - + $resolution = $config["graph_res"] * ($period * 2 / $width); // Number of "slices" we want in graph $interval = (int) ($period / $resolution); @@ -443,52 +440,30 @@ function graphic_agentaccess ($id_agent, $width, $height, $period = 0) { $periodtime = floor ($period / $interval); $time = array (); $data = array (); + for ($i = 0; $i < $interval; $i++) { - $time[$i]['timestamp_bottom'] = $datelimit + ($periodtime * $i); - $time[$i]['timestamp_top'] = $datelimit + ($periodtime * ($i + 1)); - $data[$time[$i]['timestamp_bottom']] = 0; + $bottom = $datelimit + ($periodtime * $i); + $top = $datelimit + ($periodtime * ($i + 1)); + $data[$bottom] = (int) get_db_sql ("SELECT COUNT(*) FROM tagent_access WHERE + id_agent = ".$id_agent." AND + utimestamp > ".$bottom." AND + utimestamp < ".$top); } - - $result = get_db_all_rows_filter ('tagent_access', - array ('id_agent' => $id_agent, - "utimestamp > $datelimit", - "utimestamp < $date"), - array ('utimestamp')); - - if ($result === false) - $result = array (); - - -// SEEMS that problem is below -// it get's 100% cpu on apache and problem is localed here, I don't exactly -// why or what is happening here, but i'm sure that the problem is here. - - $max_value = 0; - foreach ($result as $access) { - $utimestamp = $access['utimestamp']; - for ($i = 0; $i < $interval; $i++) { - if ($utimestamp <= $time[$i]['timestamp_top'] && $utimestamp >= $time[$i]['timestamp_bottom']) { - $data[$time[$i]['timestamp_bottom']]++; - $max_value = max ($max_value, $data[$time[$i]['timestamp_bottom']]); - } - } - } - */ $engine = get_graph_engine ($period); $engine->width = $width; $engine->height = $height; - $engine->data = &$data; - $engine->max_value = $max_value; + $engine->data = $data; + $engine->max_value = max ($data); $engine->show_title = false; $engine->fontpath = $config['fontpath']; $engine->xaxis_interval = floor ($width / 72); - $engine->yaxis_interval = $max_value; + $engine->yaxis_interval = max ($data); $engine->xaxis_format = 'date'; $engine->watermark = false; $engine->show_grid = false; - + $engine->single_graph (); } diff --git a/pandora_console/reporting/pChart/pChart.class b/pandora_console/reporting/pChart/pChart.class index 21a24d4cb3..fa9fbd1e2e 100644 --- a/pandora_console/reporting/pChart/pChart.class +++ b/pandora_console/reporting/pChart/pChart.class @@ -1,17 +1,17 @@ -VMax - $this->VMin ) / $Factor / 2; $Scale4 = ( $this->VMax - $this->VMin ) / $Factor / 4; - if ( $Scale1 > 1 && $Scale1 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale1); $Scale = 1;} - if ( $Scale2 > 1 && $Scale2 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale2); $Scale = 2;} + if ( $Scale1 >= 1 && $Scale1 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale1); $Scale = 1;} + if ( $Scale2 >= 1 && $Scale2 <= $MaxDivs && !$ScaleOk) { $ScaleOk = TRUE; $Divisions = floor($Scale2); $Scale = 2;} if (!$ScaleOk) { if ( $Scale2 > 1 ) { $Factor = $Factor * 10; } @@ -950,8 +950,8 @@ $YPos = $YPos - $this->DivisionHeight; } - /* Vertical lines */ - if (!$DrawVerticals) + /* Vertical lines */ + if (!$DrawVerticals) return; if ( $this->GAreaXOffset == 0 ) { $XPos = $this->GArea_X1 + $this->DivisionWidth + $this->GAreaXOffset; $ColCount = $this->DataCount-2; } @@ -1078,70 +1078,70 @@ $ID++; } } - function drawOverlayBarGraphH($Data,$DataDescription,$Alpha=50) - { - /* Validate the Data and DataDescription array */ - $this->validateDataDescription("drawOverlayBarGraphH",$DataDescription); - $this->validateData("drawOverlayBarGraphH",$Data); - - $LayerWidth = $this->GArea_X2-$this->GArea_X1; - $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; - - $GraphID = 0; - foreach ( $DataDescription["Values"] as $Key2 => $ColName ) - { - $ID = 0; - foreach ( $DataDescription["Description"] as $keyI => $ValueI ) - { - if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; - } - - $this->Layers[$GraphID] = imagecreatetruecolor($LayerWidth,$LayerHeight); - $C_White = imagecolorallocate($this->Layers[$GraphID],255,255,255); - $C_Black = imagecolorallocate($this->Layers[$GraphID],0,0,0); - $C_Graph = imagecolorallocate($this->Layers[$GraphID],$this->Palette[$GraphID]["R"],$this->Palette[$GraphID]["G"],$this->Palette[$GraphID]["B"]); - imagefilledrectangle($this->Layers[$GraphID],0,0,$LayerWidth,$LayerHeight,$C_White); - imagecolortransparent($this->Layers[$GraphID],$C_White); - - $XWidth = $this->DivisionWidth / 4; - $XPos = $this->GAreaXOffset; - $YZero = $LayerHeight - ((0-$this->VMin) * $this->DivisionRatio); - $XLast = -1; $PointsCount = 2; - $XZero = 0; - $YPad = 20; //$LayerHeight / count($Data); - $YHeight = 8; - $YPos = $YHeight; - $Divisi = ($LayerWidth / ($this->VMax - $this->VMin)); - foreach ( $Data as $Key => $Values ) - { - if ( isset($Data[$Key][$ColName]) ) - { - $Value = $Data[$Key][$ColName]; - $XPos = (($Value-$this->VMin) * $Divisi) ; - - imagefilledrectangle($this->Layers[$GraphID],$XPos,$YPos+$YHeight,$XZero,$YPos-$YHeight,$C_Graph); - imagettftext($this->Layers[$GraphID],$this->FontSize,0,$XZero+2,$YPos+4,$C_Black,$this->FontName, $Data[$Key][$DataDescription["Position"]]." (".round($Value,2).")"); - - $X1 = floor($XPos - $XWidth + $this->GArea_X1); $Y1 = floor($YPos+$this->GArea_Y1) + .2; - $X2 = floor($XPos + $XWidth + $this->GArea_X1); - if ( $X1 <= $this->GArea_X1 ) { $X1 = $this->GArea_X1 + 1; } - if ( $X2 >= $this->GArea_X2 ) { $X2 = $this->GArea_X2 - 1; } - if ( $this->BuildMap ) - $this->addToImageMap($X1,min($Y1,$Y2),$X2,max($Y1,$Y2),$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"oBar"); - - $this->drawLine($X1,$Y1,$X2,$Y1,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); - } - $YPos= $YPos + $YPad; - } - - $GraphID++; - } - - for($i=0;$i<=($GraphID-1);$i++) - { - imagecopymerge($this->Picture,$this->Layers[$i],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); - imagedestroy($this->Layers[$i]); - } + function drawOverlayBarGraphH($Data,$DataDescription,$Alpha=50) + { + /* Validate the Data and DataDescription array */ + $this->validateDataDescription("drawOverlayBarGraphH",$DataDescription); + $this->validateData("drawOverlayBarGraphH",$Data); + + $LayerWidth = $this->GArea_X2-$this->GArea_X1; + $LayerHeight = $this->GArea_Y2-$this->GArea_Y1; + + $GraphID = 0; + foreach ( $DataDescription["Values"] as $Key2 => $ColName ) + { + $ID = 0; + foreach ( $DataDescription["Description"] as $keyI => $ValueI ) + { + if ( $keyI == $ColName ) { $ColorID = $ID; }; $ID++; + } + + $this->Layers[$GraphID] = imagecreatetruecolor($LayerWidth,$LayerHeight); + $C_White = imagecolorallocate($this->Layers[$GraphID],255,255,255); + $C_Black = imagecolorallocate($this->Layers[$GraphID],0,0,0); + $C_Graph = imagecolorallocate($this->Layers[$GraphID],$this->Palette[$GraphID]["R"],$this->Palette[$GraphID]["G"],$this->Palette[$GraphID]["B"]); + imagefilledrectangle($this->Layers[$GraphID],0,0,$LayerWidth,$LayerHeight,$C_White); + imagecolortransparent($this->Layers[$GraphID],$C_White); + + $XWidth = $this->DivisionWidth / 4; + $XPos = $this->GAreaXOffset; + $YZero = $LayerHeight - ((0-$this->VMin) * $this->DivisionRatio); + $XLast = -1; $PointsCount = 2; + $XZero = 0; + $YPad = 20; //$LayerHeight / count($Data); + $YHeight = 8; + $YPos = $YHeight; + $Divisi = ($LayerWidth / ($this->VMax - $this->VMin)); + foreach ( $Data as $Key => $Values ) + { + if ( isset($Data[$Key][$ColName]) ) + { + $Value = $Data[$Key][$ColName]; + $XPos = (($Value-$this->VMin) * $Divisi) ; + + imagefilledrectangle($this->Layers[$GraphID],$XPos,$YPos+$YHeight,$XZero,$YPos-$YHeight,$C_Graph); + imagettftext($this->Layers[$GraphID],$this->FontSize,0,$XZero+2,$YPos+4,$C_Black,$this->FontName, $Data[$Key][$DataDescription["Position"]]." (".round($Value,2).")"); + + $X1 = floor($XPos - $XWidth + $this->GArea_X1); $Y1 = floor($YPos+$this->GArea_Y1) + .2; + $X2 = floor($XPos + $XWidth + $this->GArea_X1); + if ( $X1 <= $this->GArea_X1 ) { $X1 = $this->GArea_X1 + 1; } + if ( $X2 >= $this->GArea_X2 ) { $X2 = $this->GArea_X2 - 1; } + if ( $this->BuildMap ) + $this->addToImageMap($X1,min($Y1,$Y2),$X2,max($Y1,$Y2),$DataDescription["Description"][$ColName],$Data[$Key][$ColName].$DataDescription["Unit"]["Y"],"oBar"); + + $this->drawLine($X1,$Y1,$X2,$Y1,$this->Palette[$ColorID]["R"],$this->Palette[$ColorID]["G"],$this->Palette[$ColorID]["B"]); + } + $YPos= $YPos + $YPad; + } + + $GraphID++; + } + + for($i=0;$i<=($GraphID-1);$i++) + { + imagecopymerge($this->Picture,$this->Layers[$i],$this->GArea_X1,$this->GArea_Y1,0,0,$LayerWidth,$LayerHeight,$Alpha); + imagedestroy($this->Layers[$i]); + } } /* Draw the graph title */ function drawTitle($XPos,$YPos,$Value,$R,$G,$B,$XPos2=-1,$YPos2=-1,$Shadow=FALSE) @@ -2949,9 +2949,9 @@ { if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } - if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } + if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } - if ( $Radius == 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B); return; } + if ( $Radius == 0 ) { $this->drawRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B); return; } $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); @@ -2990,7 +2990,7 @@ if ( $R < 0 ) { $R = 0; } if ( $R > 255 ) { $R = 255; } if ( $G < 0 ) { $G = 0; } if ( $G > 255 ) { $G = 255; } if ( $B < 0 ) { $B = 0; } if ( $B > 255 ) { $B = 255; } - + if ( $Radius == 0 ) { $this->drawFilledRectangle($X1,$Y1,$X2,$Y2,$R,$G,$B); return; } $C_Rectangle = $this->AllocateColor($this->Picture,$R,$G,$B); @@ -3563,6 +3563,6 @@ { echo "[FATAL] ".$Message."\r\n"; exit(); - } + } -?> +?>