| <?php |
| |
| define('DEBUG',0); |
| define('SPACE',3.5); |
| define('YOFFSET',179); |
| define('XOFFSET', 40); |
| define('CALXOFFSET', 9.36); |
| define('FONT', 3); |
| define('BARWIDTH', 30.64); |
| //this is the server we want to draw for(full path) |
| $serv = $_REQUEST['server']; |
| //this allows us to use this code to draw the current,last5 and last15(1,2,3) |
| //$resolution = $_REQUEST['resolution']; |
| //check that hte request is a number, if it isn't then set it to 0 |
| //if( is_numeric($resolution) === FALSE) |
| $resolution = 2; |
| //check to see if someone passed in a request for a specific month |
| if( isset($_REQUEST['month']) && $_REQUEST['month'] != '' && is_numeric($_REQUEST['month']) && $_REQUEST['month'] >= 1 && $_REQUEST['month'] <= 12 ){ |
| $month = $_REQUEST['month']; |
| }else{ //if whatever the passed failed the above get the current month so that we can open the files. |
| $month = date ('n'); |
| } |
| //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'); |
| } |
| //get the Current month 3 letter short form |
| $month_name = date( 'M', mktime( 0,0,0,$month,1,$year)); |
| |
| //break down the request string so that the name can be extracted |
| $name = explode('/',$serv); |
| //get the number of days in this month |
| $numberofdays = date('t',mktime(0,0,0,$month,1,$year)); |
| |
| 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) . " durring " . $month_name . " " . $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.1; |
| $minload= 10000; |
| |
| //check tha thte request month exists |
| $checkdir = $serv ."/" . $year ."/" . $month_name; |
| if( is_dir( $checkdir ) == true) { |
| if( DEBUG == 1) { |
| $msg="Dir exists!"; |
| imagestring($im, FONT, 50, 20, $msg, $black); |
| } |
| //start the day processing loop |
| for( $days = 1; $days <= $numberofdays; $days++) { |
| // open the data file for today. |
| $day_code = date( 'd', mktime( 0,0,0,$month,$days,$year)); |
| $data = @file( $serv ."/" . $year . "/" . $month_name . "/loadavgfor." . $day_code); |
| if ( $data !== false ){ |
| $count = 0; |
| $total = 0; |
| foreach( $data as $line ) { |
| list( $load_data[$index][0],$load_data[$index][1],$load_data[$index][2],$load_data[$index][3]) = explode(',',rtrim($line)); |
| $total = $total+ $load_data[$index][$resolution]; |
| $count=$count+1; |
| } |
| //compute the average for this day |
| $dayavg[$days] = $total/$count; |
| } else { |
| $dayavg[$days] = 0; |
| } |
| $maxload = ($dayavg[$days] < $maxload) ? $maxload : $dayavg[$days]; |
| if ( $dayavg[$days] != 0 ) |
| $minload = ($dayavg[$days] > $minload) ? $minload : $dayavg[$days]; |
| } |
| //clean up max vaule |
| $maxload = round( $maxload, 2); |
| $minload = round( $minload, 2); |
| $mult = (YOFFSET - 15)/$maxload; |
| |
| $index = 1; |
| for( $days = 1; $days <= $numberofdays; $days++) { |
| //find out wher the hell this item goes |
| $datax = CALXOFFSET + $days * BARWIDTH; |
| $load_y = YOFFSET - ( $dayavg[$days] * $mult); |
| imagefilledrectangle($im, $datax, $load_y, $datax+BARWIDTH, YOFFSET, $blue); |
| $textx = $datax + (15-$fontwidth); |
| imagestring($im, FONT, $textx, 185, $days, $black); |
| if( DEBUG == 1 ){ |
| imagestring($im, FONT, $datax, $minutes, $datax, $black); |
| } |
| } |
| //now work out where the end of the graph will be |
| $title_x = XOFFSET + ( $numberofdays ) * 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); |
| //liine |
| $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); |
| } else { |
| // Background |
| imagefilledrectangle($im, 0, 0, imagesx($im), imagesy($im), $white); |
| // Title |
| $title = "Unable to find the requested data for: " . $month_name . " " . $year; |
| //compute the middle of the image(i know it should be 'static') |
| $title_x = (imagesx($im)/2 ) - (strlen($title)+XOFFSET) ; |
| //now compute the y offset based on the font height |
| $title_y = (imagesy($im)/2 ) - ($fonthieght - 4); |
| imagestring($im, FONT, $title_x, $title_y, $title, $red); |
| // Display image |
| imagepng($im); |
| // Release allocated resources |
| imagedestroy($im); |
| } |
| ?> |