Scripts

Benchmarking tool

Twee kleine functies (benchMark en convertBytes) om je PHP pagina's of scripts te benchmarken op tijd en op gebruik van server geheugen. function benchMark($action, $name = FALSE, $show = FALSE) argumenten: - $action (start, status, stop, short_summary, long_summary) - $name (naam van de benchmark) - $show (als je TRUE mee geeft worden de huidige waarden van deze benchmark getoond, ander geeft retourneerd de functie TRUE) start een benchmark als volgt: benchMark('start','benchmark_naam'); als je tussen tijds wild weten wat de benchmark nu is gebruik je: echo benchMark('status','benchmark_naam', TRUE); stoppen van een benchmark als volgt: benchMark('stop','benchmark_naam'); Als je aan het einde van je script/pagina een overzicht wild hebben van alle benchmarks gebruik je argument $action met de waarde long_summary. echo benchMark('long_summary'); Als je short_summary meegeeft krijg je een totaal terug en ruimt hij de global $benchMarks op, ok leegt hij het ;) echo benchMark('short_summary'); de functie convertBytes is er alleen voor omzetting van de bytes naar de hoogst mogelijke opslageenheid Ik hoop dat dit script jullie kan helpen!

benchMark.php
<?php 
	/*
		Function benchMark 
		- serverside benchmark
		- short_summary will also clean up the global $benchMark
	*/ 
	function benchMark($action, $name = FALSE, $show = FALSE) {
		global $benchMarks;
		$timeNow    = microtime(true);
		$timeDiff   = 0;
		$memoryNow  = memory_get_usage();
		$memoryDiff = 0;
		
		switch($action) {
			case "start": // start benchmark     
				$benchMarks[$name]["start_time"] = $timeNow;
				$benchMarks[$name]["start_memory"] = $memoryNow;
				return (!$show)? TRUE : "Benchmark ".$name." (".$action.") - Time Expired: ".round($timeNow,3)." seconds, Memory Usage: ".convertBytes($memoryNow)."\r\n";
			break;
			case "status": // show status of benchmark til now without stopping it
				$timeDiff = ($timeNow - $benchMarks[$name]["start_time"]);
				$memoryDiff = ($memoryNow - $benchMarks[$name]["start_memory"]);
				return (!$show)? TRUE : "Benchmark ".$name." (".$action.") -  Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
			break;
			case "stop": // stop the benchmark
				$benchMarks[$name]["end_time"] = $timeNow;
				$benchMarks[$name]["end_memory"] = $memoryNow;
				$timeDiff = ($benchMarks[$name]["end_time"] - $benchMarks[$name]["start_time"]);
				$memoryDiff = ($benchMarks[$name]["end_memory"] - $benchMarks[$name]["start_memory"]);
				return (!$show)? TRUE : "Benchmark ".$name." (".$action.") - Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
			break;
			case 'short_summary': // calculate benchmark totals, all benchmark have to be stopted
			case 'long_summary': // show each benchmark (separate), all benchmark have to be stopted
			default:	
				$returnValue = '';
				foreach($benchMarks AS $key => $valueArray) {				
					/* check if items are set */
					if(!isset($valueArray["start_time"])) {
						return 'Benchmark start time not set for '.$key."\r\n";
					} elseif(!isset($valueArray["end_time"])) {
						return 'Benchmark end time not set for '.$key."\r\n";
					} elseif(!isset($valueArray["start_memory"])) {
						return 'Benchmark start memory not set for '.$key."\r\n";
					} elseif(!isset($valueArray["end_memory"])) {
						return 'Benchmark end memory not set for '.$key."\r\n";
					}
					if($action == 'short_summary') {
						$timeDiff += ($valueArray["end_time"] - $valueArray["start_time"]);
						$memoryDiff += ($valueArray["end_memory"] - $valueArray["start_memory"]);
					} elseif($action == 'long_summary') {
						$timeDiff = ($valueArray["end_time"] - $valueArray["start_time"]);
						$memoryDiff = ($valueArray["end_memory"] - $valueArray["start_memory"]);
						$returnValue .= "Benchmark ".$key." (".$action.") - Time Expired: ".round($timeDiff,3)." seconds, Memory Usage: ".convertBytes($memoryDiff)."\r\n";
					} else {
						return 'Benchmark Error: missing action!'."\r\n";
					}
				}
				if($action == 'short_summary') {
					$benchMarks = ''; // little clean up
					return "Benchmark ".$action." - Time Expired: ".round($timeDiff,3)." seconds, Memory usage: ".convertBytes($memoryDiff)."\r\n";
				} elseif($action == 'long_summary') {
					return $returnValue;
				} else {
					return 'Benchmark Error!'."\r\n";
				}
			break;
		}	
	}
	/* 
		Function convertBytes 
		- bytes to the highest storage capacity type) 
	*/
	function convertBytes($size) {
		$unit=array('b','kb','mb','gb','tb','pb');
		return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
	}
?>

Reacties

0
Nog geen reacties.