| <?php |
| /************************************************** |
| * |
| * Name: computeyearly |
| * Function: this is run from cron once per day and generates the currently daily average and then adds that to |
| * the store value and averages the two. Once it has teh new average it writes that to the file. |
| * |
| * I/O: reads and writes the the outputfile(loadavgfor.monthname), and reads from the other loadavg files. |
| * |
| * By: M. Ward |
| * Date: May 30/06 |
| * |
| **************************************************/ |
| |
| //time for some defines |
| define('OUTFILEPREFIX','/loadavgfor.'); |
| define('OUTPATH','/home/data/common/monitor/loadstats/'); |
| define('MONTHNUMBER',date('n')); |
| define('MONTHNAME',date('M')); |
| define('TODAY', date('d')); |
| |
| /************************* |
| * |
| * Name: runcatchup |
| * Function: this function 'catches' up to where we are in the month by processing all of the data available |
| * upto today, and returns the computed average. |
| * |
| * I/O: returns the computed average |
| * |
| *************************/ |
| function runcatchup($hostname) { |
| $monthavg=0; |
| for( $day = 1; $day < TODAY; $day++) { |
| $monthavg=$monthavg+getdayavg(OUTPATH . $hostname . "/" . MONTHNAME . OUTFILEPREFIX . $day ); |
| } |
| return round($monthavg/TODAY, 2); |
| } |
| |
| /************************* |
| * |
| * Name: getdayavg |
| * function: given the name of a file it reads all of the available data contained within and |
| * computes the average for that day. If the file doesn't exist it returns 0 |
| * |
| * I/O: takes the name of the file to be processed, returns the average or 0. |
| * |
| **************************/ |
| function getdayavg($filename) { |
| $filedata = @file( $filename ); |
| #echo "walla: " . $data; |
| if ( $filedata !== false ){ |
| $count = 0; |
| $average = 0; |
| foreach( $filedata as $line ) { |
| list( $time,$current,$lastfive,$lastfifteen) = explode(',',rtrim($line)); |
| $average=$average+$lastfive; |
| $count=$count+1; |
| } |
| return round($average/$count,2); |
| } else { |
| return 0; |
| } |
| } |
| |
| |
| //start the main processing loop |
| $sysname = php_uname('n'); |
| $currentavg = 0; |
| //check to see if we have an output file already |
| if( is_file(OUTPATH . $sysname ."/" . MONTHNAME . OUTFILEPREFIX . MONTHNAME ) == FALSE ){ |
| $currentavg = runcatchup($sysname); |
| } else { |
| //read the current data |
| $filedata = @file( OUTPATH . $sysname ."/" . MONTHNAME . OUTFILEPREFIX . MONTHNAME); |
| $currentavg = rtrim($filedata[0]); |
| } |
| |
| //write to the file |
| $fh = fopen( OUTPATH . $sysname ."/" . MONTHNAME . OUTFILEPREFIX . MONTHNAME, "w+" ); |
| |
| //get todays average |
| $currentavg = round( ($currentavg + getdayavg(OUTPATH . $sysname ."/" . MONTHNAME . OUTFILEPREFIX . TODAY))/2, 2); |
| |
| if (fwrite($fh, $currentavg) === false) { |
| echo "Cannot write to file \n\r"; |
| } |
| |
| fclose($fh); |
| |
| ?> |