File: 0.02.14a/server/bin/tester.sh (View as HTML)

  1: #!/usr/bin/php -q
  2: <?php
  3: if ((isset($argc))&&(isset($argv)))
  4: 	{
  5: 	if ($argc>1)
  6: 		{
  7: 		$nfilter=$argv[1];
  8: 		}
  9: 	else $nfilter="";
 10: 	}
 11: require("include.php");
 12: $dbt="";
 13: function db($txt,$nl=true)
 14: {
 15: global $dbt;
 16: echo $txt;
 17: $dbt.=$txt;
 18: if ($nl) 
 19: 	{
 20: 	echo "\n";
 21: 	$dbt.=" <br>\n";
 22: 	}
 23: }
 24: $NATS->Start();
 25: if ($nfilter!="") $st=": Node ".$nfilter;
 26: else $st="";
 27: db("NATS Tester Script Starting".$st);
 28: 
 29: $highalertlevel=-1;
 30: $talertc=0;
 31: 
 32: // check if already running
 33: $cq="SELECT startx FROM fntestrun WHERE fnode=\"".ss($nfilter)."\" AND finishx=0";
 34: $cr=$NATS->DB->Query($cq);
 35: if ($NATS->DB->Num_Rows($cr)>0)
 36: 	{
 37: 	$NATS->Event("Tester Already Running: Aborted",1,"Tester","Error");
 38: 	db("Tester Already Running: Aborted");
 39: 	$NATS->Stop();
 40: 	exit();
 41: 	}
 42: 
 43: $gq="INSERT INTO fntestrun(startx,fnode) VALUES(".time().",\"".ss($nfilter)."\")";
 44: $NATS->DB->Query($gq);
 45: $trid=$NATS->DB->Insert_Id();
 46: db("Test ID: ".$trid." (Started at ".nicedt(time()).")");
 47: $NATS->Event("Tester ".$trid." Started",5,"Tester","Start");
 48: 
 49: db(" ");
 50: 
 51: if ($nfilter=="") $q="SELECT * FROM fnnode WHERE nodeenabled=1";
 52: else
 53: 	{
 54: 	$q="SELECT * FROM fnnode WHERE nodeid=\"".ss($nfilter)."\" AND nodeenabled=1";
 55: 	}
 56: $r=$NATS->DB->Query($q);
 57: 
 58: 
 59: while ($row=$NATS->DB->Fetch_Array($r))
 60: 	{
 61: 	$alertlevel=0;
 62: 	$alerts=array();
 63: 	$alertc=0;
 64: 	db("NodeID: ".$row['nodeid']);
 65: 	$NATS->Event("Tester ".$trid." Node ".$row['nodeid'],10,"Tester","Node");
 66: 
 67: 	$ptr=0;
 68: 	$pal=0;
 69: 	if ($row['pingtest'])
 70: 		{
 71: 		db(" Ping Test: Yes");
 72: 		$NATS->Event("Tester ".$trid." Pinging Node ".$row['nodeid'],10,"Tester","Ping");
 73: 		$ptr=PingTest($row['hostname']);
 74: 		$NATS->Event("Tester ".$trid." Ping Node ".$row['nodeid']." Returned ".$ptr,10,"Tester","Ping");
 75: 		db(" Ping Returned: ".$ptr);
 76: 		if ( ($ptr<=0) && ($NATS->Cfg->Get("test.icmp.trytwice","0")=="1") )
 77: 			{
 78: 			// try again...
 79: 			db(" Trying Ping Again");
 80: 			$NATS->Event("Tester ".$trid." Ping X2 Node ".$row['nodeid'],10,"Tester","Ping");
 81: 			$ptr=PingTest($row['hostname']);
 82: 			$NATS->Event("Tester ".$trid." Ping Node ".$row['nodeid']." Returned ".$ptr,10,"Tester","Ping");
 83: 			db(" Ping Returned: ".$ptr);
 84: 			}
 85: 			
 86: 		if ($ptr<=0) 
 87: 			{
 88: 			$alertlevel=2;
 89: 			db(" Ping Test: Failed");
 90: 			$alerts[$alertc++]="ping failed";
 91: 			$pal=2;
 92: 			}
 93: 		else db(" Ping Test: Passed");
 94: 		
 95: 		// pingtest output bodge
 96: 		// is there a test entry for ICMP
 97: 		$fq="SELECT localtestid FROM fnlocaltest WHERE nodeid=\"".$row['nodeid']."\" AND testtype=\"ICMP\"";
 98: 		$fr=$NATS->DB->Query($fq);
 99: 		$ltid_icmp="";
100: 		if ($irow=$NATS->DB->Fetch_Array($fr))
101: 			{ // exists
102: 			$uq="UPDATE fnlocaltest SET alertlevel=".$pal.",lastrunx=".time()." WHERE localtestid=".$irow['localtestid'];
103: 			$ltid_icmp=$irow['localtestid'];
104: 			//echo $uq;
105: 			$NATS->DB->Query($uq);
106: 			}
107: 		else
108: 			{ // doesn't exist
109: 			$uq="INSERT INTO fnlocaltest(nodeid,testtype,alertlevel,lastrunx) VALUES(\"".$row['nodeid']."\",\"ICMP\",".$pal.",".time().")";
110: 			//echo $uq;
111: 			$NATS->DB->Query($uq);
112: 			$ltid_icmp=$NATS->DB->Insert_Id();
113: 			}
114: 		$NATS->DB->Free($fr);
115: 		
116: 		// record the ICMP bodge-test here
117: 		$rq="INSERT INTO fnrecord(testid,recordx,testvalue,alertlevel,nodeid) VALUES(\"L".$ltid_icmp."\",".time().",".$ptr.",".$pal.",\"".$row['nodeid']."\")";
118: 		$NATS->DB->Query($rq);
119: 		//echo $rq." ".$NATS->DB->Affected_Rows()."\n";
120: 		
121: 		}
122: 	else
123: 		{ // further ICMP bodge - update to -1 or do nothing if the test doesn't exist
124: 		$uq="UPDATE fnlocaltest SET alertlevel=-1,lastrunx=".time()." WHERE nodeid=\"".$row['nodeid']."\" AND testtype=\"ICMP\"";
125: 		$NATS->DB->Query($uq);
126: 		}
127: 
128: 	if (($row['pingfatal'])&&($ptr<=0))
129: 		{
130: 		db(" Ping Fatal: Yes - Not Continuing");
131: 		$NATS->Event("Tester ".$trid." Ping Fatal for Node ".$row['nodeid'],10,"Tester","Ping");
132: 		}
133: 	else
134: 		{ // do the tests
135: 
136: 		db("Doing Local Tests");
137: 		$NATS->Event("Tester ".$trid." Testing Node ".$row['nodeid'],10,"Tester","Test");
138: 		$q="SELECT * FROM fnlocaltest WHERE nodeid=\"".$row['nodeid']."\" AND testtype!=\"ICMP\"";
139: 		$res=$NATS->DB->Query($q);
140: 		while ($lrow=$NATS->DB->Fetch_Array($res))
141: 			{
142: 			db(" Test: ".$lrow['testtype']." (".$lrow['testparam'].")");
143: 			$NATS->Event("Tester ".$trid." Node ".$row['nodeid']." Doing ".$lrow['testtype']."(".$lrow['testparam'].")",10,"Tester","Test");
144: 			$result=DoTest($lrow['testtype'],$lrow['testparam'],$row['hostname']);
145: 			$NATS->Event("Tester ".$trid." Node ".$row['nodeid']." Result ".$result." from ".$lrow['testtype']."(".$lrow['testparam'].")",10,"Tester","Test");
146: 			db(" Result: ".$result);
147: 			
148: 			// evaluation
149: 			if ($lrow['simpleeval']==1) $lvl=SimpleEval($lrow['testtype'],$result);
150: 			else $lvl=nats_eval("L".$lrow['localtestid'],$result);
151: 			
152: 			db(" Eval: ".$lvl);
153: 			if ($lvl>$alertlevel) $alertlevel=$lvl;
154: 			if ($lvl>0)
155: 				{
156: 				$s=$lrow['testtype']."/".substr($lrow['testparam'],0,5)." ";
157: 				if ($lvl>1) $s.="failed";
158: 				else $s.="warning";
159: 				$alerts[$alertc++]=$s;
160: 				}
161: 				
162: 			// record it
163: 			if ($lrow['testrecord']==1)
164: 				{
165: 				$tid="L".$lrow['localtestid'];
166: 				$iq="INSERT INTO fnrecord(testid,nodeid,alertlevel,testvalue,recordx) VALUES(";
167: 				$iq.="\"".$tid."\",\"".$row['nodeid']."\",".$lvl.",".$result.",".time().")";
168: 				$NATS->DB->Query($iq);
169: 				db(" Recording Test");
170: 				}
171: 				
172: 			// update localtest record
173: 			$uq="UPDATE fnlocaltest SET lastrunx=".time().",alertlevel=".$lvl." WHERE localtestid=".$lrow['localtestid'];
174: 			$NATS->DB->Query($uq);
175: 			}
176: 		$NATS->Event("Tester ".$trid." Finished Node ".$row['nodeid'],10,"Tester","Node");
177: 		}
178: 
179: 	db("Highest Alert Level: ".$alertlevel);
180: 	db("Alert Count        : ".$alertc);
181: 	$als="";
182: 	foreach($alerts as $al) $als.=$al.", ";
183: 	db("Alerts: ".$als);
184: 
185: 	$NATS->SetAlerts($row['nodeid'],$alertlevel,$alerts);
186: 
187: 	db(" ");
188: 	
189: 	if ($alertlevel>$highalertlevel) $highalertlevel=$alertlevel;
190: 	$talertc+=$alertc;
191: 	
192: 	}
193: 
194: 
195: 
196: db("Finished Tests... Finishing Off");
197: db("Summary: Tester ".$trid." Highest Level ".$highalertlevel.", Alerts ".$talertc);
198: $uq="UPDATE fntestrun SET finishx=".time().",routput=\"".ss($dbt)."\" WHERE trid=".$trid;
199: $NATS->DB->Query($uq);
200: 
201: 
202: $NATS->Event("Tester ".$trid." Highest Level ".$highalertlevel.", Alerts ".$talertc,7,"Tester","Stat");
203: $NATS->Event("Tester ".$trid." Finished",5,"Tester","Stop");
204: 
205: // in here for now...
206: $NATS->ActionFlush();
207: 
208: $NATS->Stop();
209: db("NATS Stopped... Finished");
210: ?>
211: 
212: