File: 0.02.12a/server/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: $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: