File: 0.02.14a/server/base/tests.inc.php (View as HTML)

  1: <?php // tests.inc.php
  2:  function icmpChecksum($data)
  3:     {
  4:     if (strlen($data)%2)
  5:     $data .= "\x00";
  6:     
  7:     $bit = unpack('n*', $data);
  8:     $sum = array_sum($bit);
  9:     
 10:     while ($sum >> 16)
 11:     $sum = ($sum >> 16) + ($sum & 0xffff);
 12:     
 13:     return pack('n*', ~$sum);
 14:     }
 15: function PingTest($host)
 16: 	{
 17:     // Make Package
 18:     $type= "\x08";
 19:     $code= "\x00";
 20:     $checksum= "\x00\x00";
 21:     $identifier = "\x00\x00";
 22:     $seqNumber = "\x00\x00";
 23:     $data= "FreeNATS";
 24:     $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
 25:     $checksum = icmpChecksum($package); // Calculate the checksum
 26:     $package = $type.$code.$checksum.$identifier.$seqNumber.$data;
 27:     
 28:     // Create Socket
 29:     $socket = @socket_create(AF_INET, SOCK_RAW, 1);
 30:     	//or die(socket_strerror(socket_last_error()));
 31:     if (!$socket) return 0;
 32:     
 33:     // Set Non-Blocking
 34:     @socket_set_nonblock($socket);
 35:     	
 36:     // Connect Socket
 37:     $sconn=@socket_connect($socket, $host, null);
 38:     if (!$sconn) return 0;
 39:     
 40:     // Start Timer
 41:     $startTime = microtime(true);
 42:     
 43:     // Send Data
 44:     @socket_send($socket, $package, strLen($package), 0);
 45:     
 46:     // Read Data
 47:     $keepon=true;
 48:     if (isset($NATS)) $timeout=$NATS->Cfg->Get("test.icmp.timeout",10);
 49:     else $timeout=10;
 50:     while( (!(@socket_read($socket, 255))) && $keepon)
 51:     	{ // basically just kill time
 52:     	// consider putting some sort of sleepy thing here to lower load but would f* with figures!
 53:     	
 54:     	if ( (microtime(true) - $startTime) > $timeout )
 55:     		$keepon=false;
 56: 		}
 57:     	
 58: 	if ($keepon) // didn't time out - read data
 59:     	{
 60: 	    @socket_close($socket);
 61:     	return round(microtime(true) - $startTime, 4);
 62:     	}
 63:     	
 64:     // Socket timed out
 65:     socket_close($socket);
 66:     return 0;
 67: 	}
 68: 
 69: function WebTest($url)
 70: 	{
 71: 	$fp=@fopen($url,"r");
 72: 	if ($fp<=0) return 0;
 73: 	$ctr=0;
 74: 	while ($body=@fgets($fp,1024)) $ctr+=sizeof($body);
 75: 	@fclose($fp);
 76: 	return $ctr;
 77: 	}
 78: 	
 79: function DoTest($test,$param,$hostname="")
 80: {
 81: switch ($test)
 82: 	{
 83: 	case "web":
 84: 		return WebTest($param);
 85: 		break;
 86: 	case "tcp":
 87: 		$fp=@fsockopen($hostname,$param);
 88: 		if ($fp<=0) return 0;
 89: 		@fclose($fp);
 90: 		return 1;
 91: 		break;
 92: 	case "wtime":
 93: 		$startTime=microtime(true);
 94: 		$r=WebTest($param);
 95: 		$elapsedTime=round(microtime(true)-$startTime,4);
 96: 		if ($r<=0) return -1;
 97: 		return $elapsedTime;
 98: 		break;
 99: 	case "testloop":
100: 		return $param;
101: 		break;
102: 	}
103: return -1;
104: }
105: 
106: function SimpleEval($test,$result)
107: {
108: switch($test)
109: 	{
110: 	case "ping":
111: 		if ($result<=0) return 2;
112: 		return 0;
113: 	case "web":
114: 		if ($result<=0) return 2;
115: 		return 0;
116: 	case "tcp":
117: 		if ($result==1) return 0;
118: 		return 2;
119: 	case "wtime":
120: 		if ($result<0) return 2;
121: 		return 0;
122: 	}
123: return -1;
124: }
125: 
126: function aText($al)
127: {
128: switch($al)
129: 	{
130: 	case -1: return "Untested";
131: 	case 0: return "Passed";
132: 	case 1: return "Warning";
133: 	case 2: return "Failed";
134: 	default: return "Unknown";
135: 	}
136: }
137: ?>