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: ?>