PHP Classes

File: httperf.php

Recommend this page to a friend!
  Classes of Manuel Lemos   Httperf server stressing and benchmark tool   httperf.php   Download  
File: httperf.php
Role: ???
Content type: text/plain
Description: Class that implements the HTTP server tests a create graphics for the results.
Class: Httperf server stressing and benchmark tool
Evaluate HTTP server performance.
Author: By
Last change:
Date: 24 years ago
Size: 5,741 bytes
 

Contents

Class file image Download
<? /* * httperf.php * * @(#) $Header: /cvsroot/httperf/httperf.php,v 1.6 2000/02/17 23:46:36 mlemos Exp $ * */ class httperf_class { var $httperf_path="httperf"; var $server="localhost"; var $port=80; var $uri="/"; var $hog=0; var $connections=1; var $error=""; var $white_rgb=array(240,240,240); var $black_rgb=array(0,0,0); var $white=0; var $black=0; var $graph=0; var $tick=4; var $gap=2; var $left=8; var $top=8; var $right=8; var $bottom=0; var $width=320; var $height=200; var $font=4; var $decimals=3; Function RunTest($output="") { $results=array(); if(GetType($output)=="string") $output=array(); $command=$this->httperf_path." \"--server=".EscapeShellCmd($this->server)."\" --port=".$this->port." \"--uri=".EscapeShellCmd($this->uri)."\" --num-conns=".$this->connections." ".($this->hog ? " --hog" : ""); exec($command,$output,$result); if($result==0) { if(ereg("^Total: connections ([0-9]+) requests ([0-9]+) replies ([0-9]+) test\\-duration ([0-9]+\\.[0-9]+) s$",$output[3],$values)) $results["duration"]=$values[4]; else $this->error="the httperf command did not output the results in the expected format"; } else $this->error="the execution of the httperf command failed ($command)"; return($results); } Function CreateGraphImage($width,$height) { if(($this->graph=ImageCreate($width,$height))) { $this->white=ImageColorAllocate($this->graph,$this->white_rgb[0],$this->white_rgb[1],$this->white_rgb[2]); $this->black=ImageColorAllocate($this->graph,$this->black_rgb[0],$this->black_rgb[1],$this->black_rgb[2]); ImageInterlace($this->graph,1); ImageFilledRectangle($this->graph,0,0,$width-1,$height-1,$this->white); } else $this->error="Could not create the graph image"; return($this->graph); } Function DrawGraph(&$results) { $connections=count($results); Reset($results); $first=Key($results); Next($results); for($minimum=$maximum=$results[$first]["duration"],$connection=1;$connection<$connections;Next($results),$connection++) { $value=Key($results); if($minimum>$results[$value]["duration"]) $minimum=$results[$value]["duration"]; if($maximum<$results[$value]["duration"]) $maximum=$results[$value]["duration"]; } $last=$value; $amplitude=($maximum==$minimum ? 1 : $maximum-$minimum); $font_height=ImageFontHeight($this->font); $top=$this->top; $bottom=$this->bottom+$this->tick+$font_height+$this->gap; $graph_height=$this->height-$top-$bottom; $font_width=ImageFontWidth($this->font); for($last_value="",$maximum_width=0,$y=$graph_height-$font_height/2;$y>0;$y-=$font_height+$this->gap) { $value=number_format($maximum-$y*$amplitude/($graph_height-1),$this->decimals,".",""); if(strcmp($last_value,$value)) { $value_width=strlen($value)*$font_width; $maximum_width=max($maximum_width,$value_width); $last_value=$value; } } $left=$this->left+$maximum_width+$this->gap+$this->tick; $right=$this->right; $graph_width=$this->width-$left-$right; if($this->CreateGraphImage($graph_width+$left+$right,$graph_height+$top+$bottom)) { ImageLine($this->graph,$left,$top,$left,$top+$graph_height-1,$this->black); ImageLine($this->graph,$left,$top+$graph_height-1,$left+$graph_width-1,$top+$graph_height-1,$this->black); for($last_value="",$y=$graph_height-$font_height/2;$y>0;$y-=$font_height+$this->gap) { $value=number_format($maximum-$y*$amplitude/($graph_height-1),$this->decimals,".",""); if(strcmp($last_value,$value)) { $value_width=strlen($value)*$font_width; $tick_y=$this->top+$y; $tick_x=$left-$this->tick; ImageString($this->graph,$this->font,$this->left+$maximum_width-$value_width,$tick_y-$font_height/2,$value,$this->black); ImageLine($this->graph,$tick_x,$tick_y,$tick_x+$this->tick-1,$tick_y,$this->black); $last_value=$value; } } Reset($results); $first=Key($results); for($last_tick_x=$left,$last_x=0,$last_y=$graph_height-1,$connection=0;$connection<$connections;Next($results),$connection++) { $value=Key($results); $x=($value-$first)*($graph_width-1)/($last-$first); $y=($graph_height-1)-($results[$value]["duration"]-$minimum)*($graph_height-1)/($amplitude); ImageLine($this->graph,$left+$last_x,$top+$last_y,$left+$x,$top+$y,$this->black); $last_x=$x; $last_y=$y; $value_width=($font_width*strlen($value)); $tick_x=$left+$x; $tick_y=$top+$graph_height; $value_x=$tick_x-$value_width/2; if($value_x>$last_tick_x+$this->gap) { ImageLine($this->graph,$tick_x,$tick_y,$tick_x,$tick_y+$this->tick-1,$this->black); $value_y=$tick_y+$this->tick+$this->gap; ImageString($this->graph,$this->font,$value_x,$value_y,$value,$this->black); $last_tick_x=$tick_x+$value_width/2; } } } else $this->error="could not create the graphic image"; return($this->graph); } Function DrawMessage($message) { if($this->graph || $this->CreateGraphImage($this->width,$this->height)) { $fit=intval($this->width/ImageFontWidth($this->font)); for($y=$position=0;$position<strlen($message);$y+=ImageFontHeight($this->font)) { $length=strlen($message)-$position; $next=$position+$length; if($length>$fit) { $length=$fit; if(($space=strrpos(substr($message,$position,$length)," "))>0) { $next=$length=$space; $next=$position+$length+1; } else $next=$position+$length; } ImageString($this->graph,$this->font,0,$y,substr($message,$position,$length),$this->black); $position=$next; } } } Function GenerateGraph() { Header("Content-Type: image/gif"); ImageGif($this->graph); } }; ?>