File: 1.04.2a/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: $q.="masterid=\"".ss($_REQUEST['masterid'])."\","; 88: $q.="masterjustping=".ss($_REQUEST['masterjustping']).","; 89: 90: if (isset($_REQUEST['nsurl'])) $q.="nsurl=\"".ss($_REQUEST['nsurl'])."\","; 91: if (isset($_REQUEST['nskey'])) $q.="nskey=\"".ss($_REQUEST['nskey'])."\","; 92: if (isset($_REQUEST['nspuship'])) $q.="nspuship=\"".ss($_REQUEST['nspuship'])."\","; 93: if (isset($_REQUEST['nsinterval'])) 94: { 95: $q.="nsinterval=".ss($_REQUEST['nsinterval']).","; 96: // Also use this text field as the indication that ns data is provided at all 97: if (isset($_REQUEST['nspullenabled'])) $set=1; 98: else $set=0; 99: $q.="nspullenabled=".$set.","; 100: if (isset($_REQUEST['nspushenabled'])) $set=1; 101: else $set=0; 102: $q.="nspushenabled=".$set.","; 103: } 104: 105: $q.="hostname=\"".ss($_REQUEST['hostname'])."\""; 106: 107: $q.=" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 108: //echo $q; 109: $NATS->DB->Query($q); 110: 111: if ($NATS->DB->Affected_Rows()<=0) 112: { 113: echo "Failed to Save Changes or Nothing Changed
";
114: $poplist[]="Failed to Save or Nothing Changed"; 115: } 116: else 117: { 118: echo "Saved Changes
";
119: $poplist[]="Saved Changes"; 120: } 121: 122: // Update Interval If Changed 123: if ( isset($_REQUEST['testinterval']) && isset($_REQUEST['original_testinterval']) && 124: ( $_REQUEST['testinterval'] != $_REQUEST['original_testinterval'] ) ) 125: $NATS->InvalidateNode($_REQUEST['nodeid']); 126: 127: // Update Nodeside if Newly Enabled and empty... 128: if ( isset($_REQUEST['original_nsenabled']) && ($_REQUEST['original_nsenabled']==0) && ($nsenabled==1) ) 129: { 130: $q="SELECT nskey FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 131: $r=$NATS->DB->Query($q); 132: if ($row=$NATS->DB->Fetch_Array($r)) 133: { 134: if ($row['nskey']=="") // generate one 135: { 136: $allow="abcdef0123456789"; 137: $len=64; 138: $alen=strlen($allow); 139: mt_srand(microtime()*1000000); 140: $key=""; 141: for ($a=0; $a<$len; $a++) 142: $key.=$allow[mt_rand(0,$alen-1)]; 143: $uq="UPDATE fnnode SET nskey=\"".$key."\" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 144: $NATS->DB->Query($uq); 145: } 146: $NATS->DB->Free($r); 147: } 148: } 149: 150: } 151: else if ($_REQUEST['action']=="invalidate") 152: { 153: $_REQUEST['showoptions']=1; 154: $NATS->InvalidateNode($_REQUEST['nodeid'],true); 155: } 156: else if ($_REQUEST['action']=="nodesiderefresh") 157: { 158: $_REQUEST['showoptions']=1; 159: $res=$NATS->NodeSide_Pull($_REQUEST['nodeid']); 160: if ($res===false) 161: { 162: $poplist[]="Error Fetching Nodeside Data"; 163: echo "Error Fetching Nodeside Data

";
164: } 165: else 166: { 167: $poplist[]="Nodeside Data Refreshed"; 168: echo "Refreshed Nodeside Data

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

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

";
250: Screen_Footer(); 251: exit(); 252: } 253: $NATS->DB->Free($r); 254: 255: $title="Node Settings"; 256: Start_Round($title,600); 257: echo "
"; 258: echo "
"; 259: echo ""; 260: 261: echo ""; 262: echo ""; 263: 264: echo ""; 269: 270: echo ""; 275: 276: echo ""; 281: 282: echo ""; 287: 288: echo ""; 300: 301: echo ""; 304: 305: echo ""; 333: 334: echo ""; 348: echo ""; 349: 350: echo ""; 358: 359: echo ""; 376: 377: echo ""; 383: echo "384: 385: echo ""; 395: 396: echo ""; 404: 405: echo ""; 406: 407: echo ""; 415: 416: echo ""; 424: 425: echo ""; 426: 427: echo ""; 437: echo ""; 438: 439: if ($nodeside) 440: { 441: echo ""; 445: 446: echo ""; 447: if ($row['nspullenabled']==1) $s=" checked"; 448: else $s=""; 449: echo ""; 452: 453: echo ""; 462: 463: echo ""; 467: 468: echo ""; 469: if ($row['nspushenabled']==1) $s=" checked"; 470: else $s=""; 471: echo ""; 474: 475: echo ""; 479: 480: echo ""; 482: 483: if ($row['nspullenabled']==1) 484: { 485: echo ""; 489: } 490: 491: echo ""; 500: 501: echo ""; 505: 506: } 507: 508: echo ""; 509: 510: echo ""; 514: echo "
265: NodeID 266: :"; 267: echo $row['nodeid']; 268: echo "
271: Node Name 272: :"; 273: echo ""; 274: echo "
277: Hostname 278: :"; 279: echo ""; 280: echo "
283: Description 284: :"; 285: echo ""; 286: echo "
289: Node Icon 290: :"; 291: echo " [ Show Icons ]"; 298: echo " [ Show/Hide Icons ]"; 299: echo "
"; 302: echo "
";
303: echo "
306: Master Node :"; 307: echo " ".hlink("Node:Master")."\n"; 332: echo "
335: Skip if Master :"; 336: echo " ".hlink("MasterNode:Ping")."\n"; 347: echo "

351: Node Enabled 352: :"; 353: if ($row['nodeenabled']==1) $s=" checked"; 354: else $s=""; 355: echo ""; 356: echo " ".hlink("Node:Enabled"); 357: echo "
360: Test Schedule 361: :"; 362: echo ""; 373: $NATS->DB->Free($sr); 374: echo " ".hlink("Schedule"); 375: echo "
378: Test Interval 379: :"; 380: echo " "; 381: echo "Minutes ".hlink("Node:TestInterval"); 382: echo "
386: Test Due 387: :"; 388: if ($row['nextrunx']>0) echo nicedt($row['nextrunx']); 389: else echo "Now"; 390: echo "
";
391: echo nicenextx($row['nextrunx']); 392: echo " Check ASAP "; 393: echo hlink("Node:CheckASAP",12); 394: echo "
397: Alerts Active 398: :"; 399: if ($row['nodealert']==1) $s=" checked"; 400: else $s=""; 401: echo ""; 402: echo " ".hlink("Node:AlertActive"); 403: echo "

408: Ping Test 409: :"; 410: if ($row['pingtest']==1) $s=" checked"; 411: else $s=""; 412: echo ""; 413: echo " ".hlink("Node:PingTest"); 414: echo "
417: Require Ping 418: :"; 419: if ($row['pingfatal']==1) $s=" checked"; 420: else $s=""; 421: echo ""; 422: echo " ".hlink("Node:RequirePing"); 423: echo "

428: Node-Side Testing 429: :"; 430: if ($row['nsenabled']==1) $nodeside=true; 431: else $nodeside=false; 432: if ($nodeside) $s=" checked"; 433: else $s=""; 434: echo ""; 435: echo " ".hlink("Nodeside"); 436: echo "
Node Key :"; 442: echo ""; 443: echo " ".hlink("Nodeside:Key"); 444: echo "
Pull Enabled : "; 450: echo hlink("Nodeside:PullEnabled"); 451: echo "
Pull URL :"; 454: echo ""; 455: if ($row['nsurl']!="") 456: { 457: $uri=$row['nsurl']."?nodekey=".$row['nskey']."&noupdates=1"; 458: echo " Debug Raw Output"; 459: } 460: echo " ".hlink("Nodeside:URL"); 461: echo "
Pull Interval :"; 464: echo ""; 465: echo " Minutes ".hlink("Nodeside:Interval"); 466: echo "
Push Enabled : "; 472: echo hlink("Nodeside:PushEnabled"); 473: echo "
Push IP :"; 476: echo ""; 477: echo " ".hlink("Nodeside:URL"); 478: echo "
Last Data :"; 481: echo nicedt($row['nslastx'])." - ".dtago($row['nslastx'])."
Next Pull Due :"; 486: if ($row['nsnextx']>0) echo nicedt($row['nsnextx'])." - ".nicenextx($row['nsnextx']); 487: else echo "Now"; 488: echo "
Catalogue :"; 492: $nsq="SELECT COUNT(nstestid) FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 493: $nsr=$NATS->DB->Query($nsq); 494: if ($nsrow=$NATS->DB->Fetch_Array($nsr)) 495: { 496: echo $nsrow['COUNT(nstestid)']." Node-Side Monitors"; 497: } 498: $NATS->DB->Free($nsr); 499: echo "
Refresh Now :"; 502: if ($row['nspullenabled']==1) echo "Refresh (Pull) Now"; 503: else echo "Pull Method Disabled"; 504: echo "

"; 511: echo " Cancel Changes"; 512: echo "

";
513: echo "
";
515: echo "
";
516: echo "Show / Hide Node Options"; 517: echo "\n"; 520: End_Round(); 521: 522: if (isset($_REQUEST['show_icons'])) 523: { 524: echo "

";
525: ShowIcons(); 526: echo "

";
527: } 528: 529: //echo "
";
530: 531: echo "

";
532: $title="Node Tests"; 533: Start_Round($title,600); 534: echo ""; 535: $q="SELECT * FROM fnlocaltest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testtype!=\"ICMP\" ORDER BY localtestid ASC"; 536: $r=$NATS->DB->Query($q); 537: while ($row=$NATS->DB->Fetch_Array($r)) 538: { 539: echo ""; 548: 549: echo ""; 556: } 557: 558: if ($nodeside) 559: { 560: $q="SELECT * FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testenabled=1"; 561: $r=$NATS->DB->Query($q); 562: while ($row=$NATS->DB->Fetch_Array($r)) 563: { 564: echo ""; 571: 572: echo ""; 579: } 580: $NATS->DB->Free($r); 581: } 582: 583: echo "
";
584: echo "\n"; 585: echo ""; 586: echo ""; 587: echo ""; 610: 611: if ($nodeside) 612: { 613: echo "
";
614: echo ""; 615: echo ""; 616: echo ""; 628: } 629: 630: echo "
"; 540: 541: echo ""; 542: if (strlen($row['testparam'])>10) $tp=substr($row['testparam'],0,8).".."; 543: else $tp=$row['testparam']; 544: if ($row['testname']=="") echo lText($row['testtype'])." (".$tp.")"; 545: else echo $row['testname']; 546: echo ""; 547: echo " "; 550: echo " "; 551: echo ""; 552: echo ""; 553: 554: echo "  Last Tested: ".dtago($row['lastrunx']).""; 555: echo "
"; 565: 566: echo ""; 567: if ($row['testname']=="") echo $row['testdesc']; 568: else echo $row['testname']; 569: echo ""; 570: echo " "; 573: echo " "; 574: echo ""; 575: echo ""; 576: 577: echo "  Last Tested: ".dtago($row['lastrunx']).""; 578: echo "
 
Add Test : "; 602: 603: // one day will do fancy JS option here but for now moved to the edit 604: //echo " "; 605: echo ""; 606: echo ""; 607: 608: echo ""; 609: echo "
Add Node-side Monitor :"; 626: echo " "; 627: echo "
";
631: End_Round(); 632: echo "

";
633: 634: $title="Alert Actions ".hlink("AlertAction",12); 635: Start_Round($title,600); 636: echo ""; 637: echo ""; 638: echo ""; 639: $q="SELECT aaid,aname FROM fnalertaction"; 640: $r=$NATS->DB->Query($q); 641: $c=0; 642: while ($row=$NATS->DB->Fetch_Array($r)) 643: { 644: // has link? 645: $lq="SELECT nalid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND aaid=".ss($row['aaid'])." LIMIT 0,1"; 646: $lr=$NATS->DB->Query($lq); 647: if ($NATS->DB->Num_Rows($lr)>0) $s=" checked"; 648: else $s=""; 649: $NATS->DB->Free($lr); 650: echo ""; 652: } 653: $NATS->DB->Free($r); 654: echo ""; 655: echo "
"; 651: echo "".$row['aaid']." - ".$row['aname']."
";
656: End_Round(); 657: ?> 658:

659: 660: 661: Screen_Footer(); 662: ?> 663: