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: