File:
0.02.13a/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: