File: 1.00.6a/server/web/node.edit.php (View as Code)

1: 2: /* ------------------------------------------------------------- 3: This file is part of FreeNATS 4: 5: FreeNATS is (C) Copyright 2008 PurplePixie Systems 6: 7: FreeNATS is free software: you can redistribute it and/or modify 8: it under the terms of the GNU General Public License as published by 9: the Free Software Foundation, either version 3 of the License, or 10: (at your option) any later version. 11: 12: FreeNATS is distributed in the hope that it will be useful, 13: but WITHOUT ANY WARRANTY; without even the implied warranty of 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15: GNU General Public License for more details. 16: 17: You should have received a copy of the GNU General Public License 18: along with FreeNATS. If not, see www.gnu.org/licenses 19: 20: For more information see www.purplepixie.org/freenats 21: -------------------------------------------------------------- */ 22: 23: ob_start(); 24: require("include.php"); 25: $NATS->Start(); 26: if (!$NATS_Session->Check($NATS->DB)) 27: { 28: header("Location: ./?login_msg=Invalid+Or+Expired+Session"); 29: exit(); 30: } 31: if ($NATS_Session->userlevel<5) UL_Error("Edit Node"); 32: ob_end_flush(); 33: Screen_Header("Node Editor",1,1,"","main","nodes"); 34: echo "\n\n\n"; 54: ?> 55:
56: 57: if (isset($_REQUEST['action'])) 58: { 59: if ($_REQUEST['action']=="save_edit") 60: { 61: $_REQUEST['showoptions']=1; 62: if (isset($_REQUEST['nodeenabled'])) $nodeenabled=1; 63: else $nodeenabled=0; 64: if (isset($_REQUEST['pingtest'])) $pingtest=1; 65: else $pingtest=0; 66: if (isset($_REQUEST['pingfatal'])) $pingfatal=1; 67: else $pingfatal=0; 68: if (isset($_REQUEST['nodealert'])) $nodealert=1; 69: else $nodealert=0; 70: if (isset($_REQUEST['testinterval'])) $interval=$_REQUEST['testinterval']; 71: else $interval=0; 72: if (!is_numeric($interval)) $interval=0; 73: 74: if (isset($_REQUEST['nsenabled'])) $nsenabled=1; 75: else $nsenabled=0; 76: 77: $q="UPDATE fnnode SET "; 78: $q.="nodename=\"".ss($_REQUEST['nodename'])."\","; 79: $q.="nodedesc=\"".ss($_REQUEST['nodedesc'])."\","; 80: $q.="testinterval=".ss($interval).","; 81: if (isset($_REQUEST['scheduleid'])) $q.="scheduleid=".ss($_REQUEST['scheduleid']).","; 82: $q.="nodeicon=\"".ss($_REQUEST['nodeicon'])."\","; 83: $q.="nodealert=".ss($nodealert).","; 84: $q.="nodeenabled=".ss($nodeenabled).",pingtest=".ss($pingtest).",pingfatal=".ss($pingfatal).","; 85: $q.="nsenabled=".ss($nsenabled).","; 86: 87: if (isset($_REQUEST['nsurl'])) $q.="nsurl=\"".ss($_REQUEST['nsurl'])."\","; 88: if (isset($_REQUEST['nskey'])) $q.="nskey=\"".ss($_REQUEST['nskey'])."\","; 89: if (isset($_REQUEST['nspuship'])) $q.="nspuship=\"".ss($_REQUEST['nspuship'])."\","; 90: if (isset($_REQUEST['nsinterval'])) 91: { 92: $q.="nsinterval=".ss($_REQUEST['nsinterval']).","; 93: // Also use this text field as the indication that ns data is provided at all 94: if (isset($_REQUEST['nspullenabled'])) $set=1; 95: else $set=0; 96: $q.="nspullenabled=".$set.","; 97: if (isset($_REQUEST['nspushenabled'])) $set=1; 98: else $set=0; 99: $q.="nspushenabled=".$set.","; 100: } 101: 102: $q.="hostname=\"".ss($_REQUEST['hostname'])."\""; 103: 104: $q.=" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 105: //echo $q; 106: $NATS->DB->Query($q); 107: 108: if ($NATS->DB->Affected_Rows()<=0) 109: { 110: echo "Failed to Save Changes or Nothing Changed
";
111: $poplist[]="Failed to Save or Nothing Changed"; 112: } 113: else 114: { 115: echo "Saved Changes
";
116: $poplist[]="Saved Changes"; 117: } 118: 119: // Update Interval If Changed 120: if ( isset($_REQUEST['testinterval']) && isset($_REQUEST['original_testinterval']) && 121: ( $_REQUEST['testinterval'] != $_REQUEST['original_testinterval'] ) ) 122: $NATS->InvalidateNode($_REQUEST['nodeid']); 123: 124: // Update Nodeside if Newly Enabled and empty... 125: if ( isset($_REQUEST['original_nsenabled']) && ($_REQUEST['original_nsenabled']==0) && ($nsenabled==1) ) 126: { 127: $q="SELECT nskey FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 128: $r=$NATS->DB->Query($q); 129: if ($row=$NATS->DB->Fetch_Array($r)) 130: { 131: if ($row['nskey']=="") // generate one 132: { 133: $allow="abcdef0123456789"; 134: $len=64; 135: $alen=strlen($allow); 136: mt_srand(microtime()*1000000); 137: $key=""; 138: for ($a=0; $a<$len; $a++) 139: $key.=$allow[mt_rand(0,$alen-1)]; 140: $uq="UPDATE fnnode SET nskey=\"".$key."\" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 141: $NATS->DB->Query($uq); 142: } 143: $NATS->DB->Free($r); 144: } 145: } 146: 147: } 148: else if ($_REQUEST['action']=="invalidate") 149: { 150: $_REQUEST['showoptions']=1; 151: $NATS->InvalidateNode($_REQUEST['nodeid'],true); 152: } 153: else if ($_REQUEST['action']=="nodesiderefresh") 154: { 155: $_REQUEST['showoptions']=1; 156: $res=$NATS->NodeSide_Pull($_REQUEST['nodeid']); 157: if ($res===false) 158: { 159: $poplist[]="Error Fetching Nodeside Data"; 160: echo "Error Fetching Nodeside Data

";
161: } 162: else 163: { 164: $poplist[]="Nodeside Data Refreshed"; 165: echo "Refreshed Nodeside Data

";
166: } 167: } 168: else if ($_REQUEST['action']=="save_actions") 169: { 170: // build the two lists... 171: $cur=array(); 172: $cc=0; 173: $nl=array(); 174: $nc=0; 175: 176: if (isset($_REQUEST['links'])) 177: { 178: foreach($_REQUEST['links'] as $link) 179: { 180: $nl[$link]['proc']=false; // not processed or existing i.e. outstanding 181: $nl[$link]['aaid']=$link; 182: $nc++; 183: } 184: } 185: 186: $q="SELECT nalid,aaid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 187: $r=$NATS->DB->Query($q); 188: while ($row=$NATS->DB->Fetch_Array($r)) 189: { 190: //echo $row['aaid'].":"; 191: $cur[$row['aaid']]['proc']=false; 192: $cur[$row['aaid']]['nalid']=$row['nalid']; 193: $cur[$row['aaid']]['aaid']=$row['aaid']; 194: $cc++; 195: } 196: 197: // now we have the two lists lets process them 198: foreach($nl as $newone) 199: { 200: if (isset($cur[$newone['aaid']])) // exists - do nothing to both 201: { 202: //echo "
".$newone['aaid'].":";
203: $cur[$newone['aaid']]['proc']=true; 204: $nl[$newone['aaid']]['proc']=true; 205: } 206: // otherwise news are left false to insert and curs false to delete 207: } 208: 209: // so lets do that 210: foreach($nl as $newone) 211: { 212: if ($newone['proc']==false) 213: { 214: //echo $q; 215: $q="INSERT INTO fnnalink(aaid,nodeid) VALUES(".ss($newone['aaid']).",\"".ss($_REQUEST['nodeid'])."\")"; 216: $NATS->DB->Query($q); 217: } 218: } 219: foreach($cur as $curone) 220: { 221: if ($curone['proc']==false) 222: { 223: $q="DELETE FROM fnnalink WHERE nalid=".$curone['nalid']; 224: $NATS->DB->Query($q); 225: //echo $q; 226: } 227: } 228: 229: echo "Saved Alert List Preferences
";
230: $poplist[]="Saved Alert List Preferences"; 231: 232: 233: } 234: 235: } 236: 237: 238: 239: echo "Editing Node: ".$_REQUEST['nodeid']."

";
240: 241: 242: $q="SELECT * FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" LIMIT 0,1"; 243: $r=$NATS->DB->Query($q); 244: if (!$row=$NATS->DB->Fetch_Array($r)) 245: { 246: echo "No such node.

";
247: Screen_Footer(); 248: exit(); 249: } 250: $NATS->DB->Free($r); 251: 252: $title="Node Settings"; 253: Start_Round($title,600); 254: echo "
"; 255: echo "
"; 256: echo ""; 257: 258: echo ""; 259: echo ""; 260: 261: echo ""; 266: 267: echo ""; 272: 273: echo ""; 278: 279: echo ""; 284: 285: echo ""; 296: 297: echo ""; 300: echo ""; 301: 302: echo ""; 310: 311: echo ""; 328: 329: echo ""; 335: echo "336: 337: echo ""; 347: 348: echo ""; 356: 357: echo ""; 358: 359: echo ""; 367: 368: echo ""; 376: 377: echo ""; 378: 379: echo ""; 389: echo ""; 390: 391: if ($nodeside) 392: { 393: echo ""; 397: 398: echo ""; 399: if ($row['nspullenabled']==1) $s=" checked"; 400: else $s=""; 401: echo ""; 404: 405: echo ""; 414: 415: echo ""; 419: 420: echo ""; 421: if ($row['nspushenabled']==1) $s=" checked"; 422: else $s=""; 423: echo ""; 426: 427: echo ""; 431: 432: echo ""; 434: 435: if ($row['nspullenabled']==1) 436: { 437: echo ""; 441: } 442: 443: echo ""; 452: 453: echo ""; 457: 458: } 459: 460: echo ""; 461: 462: echo ""; 466: echo "
262: NodeID 263: :"; 264: echo $row['nodeid']; 265: echo "
268: Node Name 269: :"; 270: echo ""; 271: echo "
274: Hostname 275: :"; 276: echo ""; 277: echo "
280: Description 281: :"; 282: echo ""; 283: echo "
286: Node Icon 287: :"; 288: echo " [ Show Icons ]"; 294: echo " [ Show/Hide Icons ]"; 295: echo "
"; 298: echo "
";
299: echo "

303: Node Enabled 304: :"; 305: if ($row['nodeenabled']==1) $s=" checked"; 306: else $s=""; 307: echo ""; 308: echo " ".hlink("Node:Enabled"); 309: echo "
312: Test Schedule 313: :"; 314: echo ""; 325: $NATS->DB->Free($sr); 326: echo " ".hlink("Schedule"); 327: echo "
330: Test Interval 331: :"; 332: echo " "; 333: echo "Minutes ".hlink("Node:TestInterval"); 334: echo "
338: Test Due 339: :"; 340: if ($row['nextrunx']>0) echo nicedt($row['nextrunx']); 341: else echo "Now"; 342: echo "
";
343: echo nicenextx($row['nextrunx']); 344: echo " Check ASAP "; 345: echo hlink("Node:CheckASAP",12); 346: echo "
349: Alerts Active 350: :"; 351: if ($row['nodealert']==1) $s=" checked"; 352: else $s=""; 353: echo ""; 354: echo " ".hlink("Node:AlertActive"); 355: echo "

360: Ping Test 361: :"; 362: if ($row['pingtest']==1) $s=" checked"; 363: else $s=""; 364: echo ""; 365: echo " ".hlink("Node:PingTest"); 366: echo "
369: Require Ping 370: :"; 371: if ($row['pingfatal']==1) $s=" checked"; 372: else $s=""; 373: echo ""; 374: echo " ".hlink("Node:RequirePing"); 375: echo "

380: Node-Side Testing 381: :"; 382: if ($row['nsenabled']==1) $nodeside=true; 383: else $nodeside=false; 384: if ($nodeside) $s=" checked"; 385: else $s=""; 386: echo ""; 387: echo " ".hlink("Nodeside"); 388: echo "
Node Key :"; 394: echo ""; 395: echo " ".hlink("Nodeside:Key"); 396: echo "
Pull Enabled : "; 402: echo hlink("Nodeside:PullEnabled"); 403: echo "
Pull URL :"; 406: echo ""; 407: if ($row['nsurl']!="") 408: { 409: $uri=$row['nsurl']."?nodekey=".$row['nskey']."&noupdates=1"; 410: echo " Debug Raw Output"; 411: } 412: echo " ".hlink("Nodeside:URL"); 413: echo "
Pull Interval :"; 416: echo ""; 417: echo " Minutes ".hlink("Nodeside:Interval"); 418: echo "
Push Enabled : "; 424: echo hlink("Nodeside:PushEnabled"); 425: echo "
Push IP :"; 428: echo ""; 429: echo " ".hlink("Nodeside:URL"); 430: echo "
Last Data :"; 433: echo nicedt($row['nslastx'])." - ".dtago($row['nslastx'])."
Next Pull Due :"; 438: if ($row['nsnextx']>0) echo nicedt($row['nsnextx'])." - ".nicenextx($row['nsnextx']); 439: else echo "Now"; 440: echo "
Catalogue :"; 444: $nsq="SELECT COUNT(nstestid) FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 445: $nsr=$NATS->DB->Query($nsq); 446: if ($nsrow=$NATS->DB->Fetch_Array($nsr)) 447: { 448: echo $nsrow['COUNT(nstestid)']." Node-Side Monitors"; 449: } 450: $NATS->DB->Free($nsr); 451: echo "
Refresh Now :"; 454: if ($row['nspullenabled']==1) echo "Refresh (Pull) Now"; 455: else echo "Pull Method Disabled"; 456: echo "

"; 463: echo " Cancel Changes"; 464: echo "

";
465: echo "
";
467: echo "
";
468: echo "Show / Hide Node Options"; 469: echo "\n"; 472: End_Round(); 473: 474: if (isset($_REQUEST['show_icons'])) 475: { 476: echo "

";
477: ShowIcons(); 478: echo "

";
479: } 480: 481: //echo "
";
482: 483: echo "

";
484: $title="Node Tests"; 485: Start_Round($title,600); 486: echo ""; 487: $q="SELECT * FROM fnlocaltest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testtype!=\"ICMP\" ORDER BY localtestid ASC"; 488: $r=$NATS->DB->Query($q); 489: while ($row=$NATS->DB->Fetch_Array($r)) 490: { 491: echo ""; 500: 501: echo ""; 508: } 509: 510: if ($nodeside) 511: { 512: $q="SELECT * FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testenabled=1"; 513: $r=$NATS->DB->Query($q); 514: while ($row=$NATS->DB->Fetch_Array($r)) 515: { 516: echo ""; 523: 524: echo ""; 531: } 532: $NATS->DB->Free($r); 533: } 534: 535: echo "
";
536: echo "\n"; 537: echo ""; 538: echo ""; 539: echo ""; 561: 562: if ($nodeside) 563: { 564: echo "
";
565: echo ""; 566: echo ""; 567: echo ""; 579: } 580: 581: echo "
"; 492: 493: echo ""; 494: if (strlen($row['testparam'])>10) $tp=substr($row['testparam'],0,8).".."; 495: else $tp=$row['testparam']; 496: if ($row['testname']=="") echo lText($row['testtype'])." (".$tp.")"; 497: else echo $row['testname']; 498: echo ""; 499: echo " "; 502: echo " "; 503: echo ""; 504: echo ""; 505: 506: echo "  Last Tested: ".dtago($row['lastrunx']).""; 507: echo "
"; 517: 518: echo ""; 519: if ($row['testname']=="") echo $row['testdesc']; 520: else echo $row['testname']; 521: echo ""; 522: echo " "; 525: echo " "; 526: echo ""; 527: echo ""; 528: 529: echo "  Last Tested: ".dtago($row['lastrunx']).""; 530: echo "
 
Add Test : "; 553: 554: // one day will do fancy JS option here but for now moved to the edit 555: //echo " "; 556: echo ""; 557: echo ""; 558: 559: echo ""; 560: echo "
Add Node-side Monitor :"; 577: echo " "; 578: echo "
";
582: End_Round(); 583: echo "

";
584: 585: $title="Alert Actions ".hlink("AlertAction",12); 586: Start_Round($title,600); 587: echo ""; 588: echo ""; 589: echo ""; 590: $q="SELECT aaid,aname FROM fnalertaction"; 591: $r=$NATS->DB->Query($q); 592: $c=0; 593: while ($row=$NATS->DB->Fetch_Array($r)) 594: { 595: // has link? 596: $lq="SELECT nalid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND aaid=".ss($row['aaid'])." LIMIT 0,1"; 597: $lr=$NATS->DB->Query($lq); 598: if ($NATS->DB->Num_Rows($lr)>0) $s=" checked"; 599: else $s=""; 600: $NATS->DB->Free($lr); 601: echo ""; 603: } 604: $NATS->DB->Free($r); 605: echo ""; 606: echo "
"; 602: echo "".$row['aaid']." - ".$row['aname']."
";
607: End_Round(); 608: ?> 609:

610: 611: 612: Screen_Footer(); 613: ?> 614: