File: 0.00.0a/bin/tester.sh (View as Code)

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