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