blob: 3e5ade5f39f7a4666d28047834a1f9128f34df87 [file] [log] [blame]
<?php
define('DEBUG',0);
define('SPACE',3.5);
define('YOFFSET',179);
define('XOFFSET', 40);
define('FONT', 3);
define('BARWIDTH', 79);
//this is the server we want to draw for(full path)
$serv = $_REQUEST['server'];
//check to see if someone passed in a request for a specific year
if( isset($_REQUEST['year']) && $_REQUEST['year'] != '' && is_numeric($_REQUEST['year']) && $_REQUEST['year'] >= 2007 && $_REQUEST['year'] <= 3000 ){
$year = $_REQUEST['year'];
}else{ //if whatever the passed failed the above get the current year so that we can open the files.
$year = date ('Y');
}
//break down the request string so that the name can be extracted
$name = explode('/',$serv);
header("Content-type: image/png");
$im = imagecreate(1000, 200);
//now compute the y offset based on the font height
$fonthieght = (imagefontheight( FONT ))/2;
$fontwidth = imagefontwidth( FONT );
//Allocate colors
$white = imagecolorallocate($im, 255, 255, 255);
$red = imagecolorallocate($im, 240, 70, 70);
$blue = imagecolorallocate($im, 70, 70, 240);
$green = imagecolorallocate($im, 70, 240, 70);
$black = imagecolorallocate($im, 0, 0, 0);
// Background
imagefilledrectangle($im, 0, 0, imagesx($im), imagesy($im), $white);
// Title
$title = "Load for: " . end($name) . " over the last 12 months of $year";
//compute the middle of the image(i know it should be 'static')
$title_x = (imagesx($im)/2 - 40) - (strlen($title)) ;
//now compute the y offset based on the font height
$title_y = ($fonthieght - 4);
imagestring($im, FONT, $title_x, $title_y, $title, $black);
$index = 0;
$maxload= 0;
$minload= 10000;
for($monthloop=1; $monthloop <= 12; $monthloop++) {
$month_name = date( 'M', mktime( 0,0,0,$monthloop,1,$year));
// open the data file for today.
$data = @file( $serv ."/" . $year . "/" . $month_name . "/loadavgfor." . $month_name);
if ( $data !== false ){
$monthavg[$monthloop] = $data[0];
} else {
$monthavg[$monthloop] = 0;
}
// $textx = XOFFSET + $monthloop * BARWIDTH;
// imagestring($im, FONT, $textx, 50, $monthavg[$monthloop], $black);
$maxload = ( $monthavg[$monthloop] < $maxload) ? $maxload : $monthavg[$monthloop];
if ( $monthavg[$monthloop] != 0 )
$minload = ( $monthavg[$monthloop] > $minload) ? $minload : $monthavg[$monthloop];
}
//clean up max vaule
$maxload = round( $maxload, 2);
$minload = round( $minload, 2);
$mult = (YOFFSET - 15)/$maxload;
//now compute the y offset based on the font height
$title_y = YOFFSET + $fonthieght;
for( $monthloop=1; $monthloop <= 12; $monthloop++) {
//find out where the hell this item goes
$datax = XOFFSET + (($monthloop-1) * BARWIDTH );
$load_y = YOFFSET - ( $monthavg[$monthloop] * $mult);
imagefilledrectangle($im, $datax, $load_y, $datax+BARWIDTH, YOFFSET, $blue);
//now write the month
$month_name = date( 'M', mktime( 0,0,0,$monthloop,1,$year));
$title_x = $datax + 36.5;
imagestring($im, FONT, $title_x, $title_y, $month_name, $black);
}
//now work out where the end of the graph will be
$title_x = XOFFSET + 12 * BARWIDTH;
//now a line to mark the right side end
imageline($im, $title_x, 10, $title_x, 180, $black);
//draw a base line to seperate the lower text
imageline($im, 40, 180, $title_x, 180, $black);
//display the max value
$max_y = (YOFFSET - ($maxload * $mult )) - $fonthieght;
imagestring($im, FONT, 0, $max_y, $maxload, $red);
$max_y = $max_y + $fonthieght;
imageline($im, 40, $max_y, $title_x,$max_y, $black);
//the min value
$min_y = (YOFFSET - ($minload * $mult )) - $fonthieght;
imagestring($im, FONT, 0, $min_y, $minload, $green);
$min_y = $min_y + $fonthieght;
imageline($im, 40, $min_y, $title_x,$min_y, $black);
//now one to seperate the scale
imageline($im, XOFFSET-1, 10, XOFFSET-1, 180, $black);
//draw some ticks for the load scale
$loadscale = $maxload /5;
for( $mark = 1; $mark <= 4; $mark++) {
$scale =YOFFSET -( $loadscale * $mult * $mark);
if ( ( $scale > ($max_y - ($fonthieght*2)) ) && ( $scale < ($max_y + ($fonthieght*2)) ) ){
continue;
}
else if ( ( $scale > ($min_y - ($fonthieght*2)) ) && ( $scale < ($min_y + ($fonthieght*2)) ) ){
continue;
}
imageline($im, 35, $scale, 990, $scale, $black);
imagestring($im, FONT, 0, ($scale- $fonthieght), round( ($loadscale * $mark), 2), $black);
}
// Display image
imagepng($im);
// Release allocated resources
imagedestroy($im);
?>