File:
0.01.2a/base/freenats.inc.php (
View as Code)
1: 2:
3: class TFreeNATS
4: {
5: var $init=false;
6: var $DB;
7: var $Cfg;
8: var $Version="0.01.2";
9: var $Release="a";
10:
11: function Start()
12: {
13: $this->DB=new TNATS_DB();
14: $this->Cfg=new TNATS_Cfg();
15: $this->DB->Connect();
16: $this->Cfg->Load($this->DB);
17: $this->init=true;
18: }
19:
20: function Stop()
21: {
22: $this->DB->Disconnect();
23: $this->init=false;
24: }
25:
26: function Event($logevent,$loglevel=1,$modid="NONE",$catid="NONE")
27: {
28: global $NATS_Session;
29: if ((isset($NATS_Session))&&($NATS_Session->auth)) $username=$NATS_Session->username;
30: else $username="";
31: $l=$this->Cfg->Get("log.level");
32: //echo "** $l **\n";
33: if ( $l=="" ) $l=10; // debug logging if no variable
34: if ( $l < $loglevel ) return false;
35: if (strlen($logevent)>249) $logevent=substr($logevent,0,245)."...";
36: $q="INSERT INTO fnlog(postedx,modid,catid,loglevel,logevent,username) VALUES(".time().",";
37: $q.="\"".ss($modid)."\",\"".ss($catid)."\",".ss($loglevel).",\"".ss($logevent)."\",\"".ss($username)."\")";
38: //echo $q;
39: $this->DB->Query($q);
40: }
41:
42: function AlertAction($nodeid,$alertlevel,$change,$alerttext)
43: {
44: echo "Called for node: ".$nodeid."\n";
45: if ($change==0) return false;
46: //echo $nodeid.":".$alertlevel.":".$change.":".$alerttext."\n";
47: // get all the alertactions for this node id
48: $q="SELECT aaid FROM fnnalink WHERE nodeid=\"".ss($nodeid)."\"";
49: $r=$this->DB->Query($q);
50: while ($arow=$this->DB->Fetch_Array($r))
51: {
52: // get details for this alert action
53: $aq="SELECT * FROM fnalertaction WHERE aaid=".$arow['aaid']." LIMIT 0,1";
54: //echo $aq."\n";
55: $ar=$this->DB->Query($aq);
56: $aa=$this->DB->Fetch_Array($ar);
57: $this->DB->Free($ar);
58: //echo $aa['atype']."FISH\n";
59:
60: // UGGGGGGGG continue!!
61: if ( ($aa['atype']=="") || ($aa['atype']=="Disabled") ) continue;
62: if ( ($aa['awarnings']==0) && ($alertlevel<2) ) continue;
63: if ( ($aa['adecrease']==0) && ($change<1) ) continue;
64:
65: // made it this far
66: $ndata=$aa['mdata']."\n".$nodeid.": ".$alerttext;
67: $uq="UPDATE fnalertaction SET mdata=\"".ss($ndata)."\" WHERE aaid=".$arow['aaid'];
68: //echo $uq."\n";
69: $this->DB->Query($uq);
70: }
71: }
72:
73: function ActionFlush()
74: {
75: global $allowed; // allowed chars from screen in YA BODGE
76: $q="SELECT * FROM fnalertaction WHERE mdata!=\"\"";
77: $r=$this->DB->Query($q);
78: while ($row=$this->DB->Fetch_Array($r))
79: {
80: if ($row['atype']=="email")
81: {
82: if ($row['esubject']==0) $sub="";
83: else if ($row['esubject']==1) $sub="FreeNATS Alert";
84: else $sub="** FreeNATS Alert **";
85: $body="";
86: if ($row['etype']==0) $body=$row['mdata'];
87: else $body="FreeNATS Alert,\r\n".$row['mdata']."\r\n--FreeNATS @ ".nicedt(time());
88: //$tolist=preg_split("[\n\r]",$row['etolist']);
89: $tolist=array();
90: $f=0;
91: $tolist[0]="";
92: for ($a=0; $a 93: {
94: $chr=$row['etolist'][$a];
95: if (strpos($allowed,$chr)==false) // special char
96: {
97: $f++;
98: $tolist[$f]="";
99: }
100: else
101: {
102: $tolist[$f].=$chr;
103: }
104: }
105:
106: foreach($tolist as $toaddr)
107: {
108: $toaddr=nices($toaddr);
109: if ($toaddr!="")
110: {
111: //echo $row['efrom'].":".$toaddr.":".$sub.":".$body."\n\n";
112: //$body="fish";
113: //mail($toaddr,$sub,$body,"From: ".$row['efrom']."\r\n","-f".$row['efrom']);
114: $header="From: ".$row['efrom']."\r\n";
115: //$header="";
116: //$exhead="-f".$row['efrom'];
117: //db("Sending Email: ".$toaddr);
118: mail($toaddr,$sub,$body,$header);
119: $this->Event("Sent alert email to ".$toaddr,4,"Flush","Email");
120: }
121: }
122:
123: // clear mdata as email has been sent
124: $q="UPDATE fnalertaction SET mdata=\"\" WHERE aaid=".$row['aaid'];
125: $this->DB->Query($q);
126:
127: }
128: }
129: }
130:
131: function GetAlerts()
132: {
133: $q="SELECT nodeid,alertlevel FROM fnalert WHERE closedx=0";
134: $r=$this->DB->Query($q);
135: $c=0;
136: $al=array();
137: while ($row=$this->DB->Fetch_Array($r))
138: {
139: $al[$c]['nodeid']=$row['nodeid'];
140: $al[$c]['alertlevel']=$row['alertlevel'];
141: $c++;
142: }
143: if ($c>0) return $al;
144: else return false;
145: }
146:
147: function SetAlerts($nodeid,$alertlevel,$alerts="")
148: {
149: // get current alert level
150: $q="SELECT alertlevel FROM fnnode WHERE nodeid=\"".ss($nodeid)."\"";
151: $r=$this->DB->Query($q);
152: $row=$this->DB->Fetch_Array($r);
153: $this->DB->Free($r);
154: $cal=$row['alertlevel'];
155:
156: if ($alertlevel>$cal)
157: {
158: // trigger alert process
159: }
160:
161: if ($alertlevel!=$cal)
162: {
163: // update table
164: $q="UPDATE fnnode SET alertlevel=".ss($alertlevel)." WHERE nodeid=\"".ss($nodeid)."\"";
165: $this->DB->Query($q);
166: }
167:
168:
169: // ALERTS
170: // is there an existing alert for this node
171: $q="SELECT alertid,alertlevel FROM fnalert WHERE nodeid=\"".ss($nodeid)."\" AND closedx=0";
172: $r=$this->DB->Query($q);
173: if ($row=$this->DB->Fetch_Array($r))
174: { // yes there is
175: // if new alert level is 0 let's close it
176: if ($alertlevel==0)
177: {
178: $q="UPDATE fnalert SET closedx=".time()." WHERE alertid=".$row['alertid'];
179: $this->DB->Query($q);
180: if (is_array($alerts)) $alerts[]="Alert Closed";
181: else
182: {
183: $alerts=array();
184: $alerts[]="Alert Closed";
185: }
186: }
187: $alertid=$row['alertid'];
188: // otherwise update the alert to the new value regardless
189: $q="UPDATE fnalert SET alertlevel=".ss($alertlevel)." WHERE alertid=".$alertid;
190: $this->DB->Query($q);
191: }
192: else
193: { // no there's not
194: if ($alertlevel>0) // only if an actual alert
195: {
196: $q="INSERT INTO fnalert(nodeid,alertlevel,openedx) VALUES(";
197: $q.="\"".ss($nodeid)."\",".ss($alertlevel).",".time().")";
198: $this->DB->Query($q);
199: $alertid=$this->DB->Insert_Id();
200: }
201: }
202: // ALERT LOG with $alertid
203: $t=time();
204: $at="";
205: if (is_array($alerts))
206: {
207: foreach($alerts as $alert)
208: {
209: if ($at!="") $at.=", ";
210: $at.=$alert;
211: //echo $at."\n";
212: $iq="INSERT INTO fnalertlog(alertid,postedx,logentry) VALUES(";
213: $iq.=$alertid.",".$t.",\"".ss($alert)."\")";
214: //echo $iq;
215: $this->DB->Query($iq);
216: }
217: }
218:
219: $this->AlertAction($nodeid,$alertlevel,$alertlevel-$cal,$at);
220:
221:
222:
223: }
224:
225: function NodeAlertLevel($nodeid)
226: {
227: $q="SELECT alertlevel FROM fnnode WHERE nodeid=\"".ss($nodeid)."\"";
228: $r=$this->DB->Query($q);
229: if ($row=$this->DB->Fetch_Array($r)) return $row['alertlevel'];
230: else return -1;
231: }
232:
233: function GroupAlertLevel($groupid)
234: {
235: $lvl=-1;
236: $q="SELECT nodeid FROM fngrouplink WHERE groupid=\"".ss($groupid)."\"";
237: $r=$this->DB->Query($q);
238: while ($row=$this->DB->Fetch_Array($r))
239: {
240: $nl=$this->NodeAlertLevel($row['nodeid']);
241: if ($nl>$lvl) $lvl=$nl;
242: }
243: $this->DB->Free($r);
244: return $lvl;
245: }
246:
247: }
248: ?>