File: 1.08.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: //if ($NATS->Cfg->Get("dev.links",0)==1) 108: //{ 109: // Utility Links 110: for ($a=0; $a<3; $a++) 111: { 112: $ulink="ulink".$a; 113: $utitle=$ulink."_title"; 114: $uurl=$ulink."_url"; 115: if (isset($_REQUEST[$ulink])) $ulinkv=1; 116: else $ulinkv=0; 117: $q.=",".$ulink."=".$ulinkv.","; 118: $q.=$utitle."=\"".ss($_REQUEST[$utitle])."\","; 119: $q.=$uurl."=\"".ss($_REQUEST[$uurl])."\""; 120: } 121: //} 122: 123: 124: 125: $q.=" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 126: //echo $q; 127: $NATS->DB->Query($q); 128: 129: if ($NATS->DB->Affected_Rows()<=0) 130: { 131: echo "Failed to Save Changes or Nothing Changed
";
132: $poplist[]="Failed to Save or Nothing Changed"; 133: } 134: else 135: { 136: echo "Saved Changes
";
137: $poplist[]="Saved Changes"; 138: } 139: 140: // Update Interval If Changed 141: if ( isset($_REQUEST['testinterval']) && isset($_REQUEST['original_testinterval']) && 142: ( $_REQUEST['testinterval'] != $_REQUEST['original_testinterval'] ) ) 143: $NATS->InvalidateNode($_REQUEST['nodeid']); 144: 145: // Update Nodeside if Newly Enabled and empty... 146: if ( isset($_REQUEST['original_nsenabled']) && ($_REQUEST['original_nsenabled']==0) && ($nsenabled==1) ) 147: { 148: $q="SELECT nskey FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 149: $r=$NATS->DB->Query($q); 150: if ($row=$NATS->DB->Fetch_Array($r)) 151: { 152: if ($row['nskey']=="") // generate one 153: { 154: $allow="abcdef0123456789"; 155: $len=64; 156: $alen=strlen($allow); 157: mt_srand(microtime()*1000000); 158: $key=""; 159: for ($a=0; $a<$len; $a++) 160: $key.=$allow[mt_rand(0,$alen-1)]; 161: $uq="UPDATE fnnode SET nskey=\"".$key."\" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 162: $NATS->DB->Query($uq); 163: } 164: $NATS->DB->Free($r); 165: } 166: } 167: 168: } 169: else if ($_REQUEST['action']=="invalidate") 170: { 171: $_REQUEST['showoptions']=1; 172: $NATS->InvalidateNode($_REQUEST['nodeid'],true); 173: } 174: else if ($_REQUEST['action']=="nodesiderefresh") 175: { 176: $_REQUEST['showoptions']=1; 177: $res=$NATS->NodeSide_Pull($_REQUEST['nodeid']); 178: if ($res===false) 179: { 180: $poplist[]="Error Fetching Nodeside Data"; 181: echo "Error Fetching Nodeside Data

";
182: } 183: else 184: { 185: $poplist[]="Nodeside Data Refreshed"; 186: echo "Refreshed Nodeside Data

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

";
261: 262: 263: $q="SELECT * FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" LIMIT 0,1"; 264: $r=$NATS->DB->Query($q); 265: if (!$row=$NATS->DB->Fetch_Array($r)) 266: { 267: echo "No such node.

";
268: Screen_Footer(); 269: exit(); 270: } 271: $NATS->DB->Free($r); 272: 273: $title="Node Settings"; 274: Start_Round($title,600); 275: echo "
"; 276: echo "
"; 277: echo ""; 278: 279: echo ""; 280: echo ""; 281: 282: echo ""; 287: 288: echo ""; 293: 294: echo ""; 299: 300: echo ""; 305: 306: echo ""; 318: 319: echo ""; 322: 323: echo ""; 351: 352: echo ""; 366: echo ""; 367: 368: echo ""; 376: 377: echo ""; 394: 395: echo ""; 401: echo "402: 403: echo ""; 413: 414: echo ""; 422: 423: echo ""; 424: 425: echo ""; 433: 434: echo ""; 442: 443: echo ""; 444: 445: echo ""; 455: echo ""; 456: 457: if ($nodeside) 458: { 459: echo ""; 463: 464: echo ""; 465: if ($row['nspullenabled']==1) $s=" checked"; 466: else $s=""; 467: echo ""; 470: 471: echo ""; 480: 481: echo ""; 485: 486: echo ""; 487: if ($row['nspushenabled']==1) $s=" checked"; 488: else $s=""; 489: echo ""; 492: 493: echo ""; 497: 498: echo ""; 500: 501: if ($row['nspullenabled']==1) 502: { 503: echo ""; 507: } 508: 509: echo ""; 518: 519: echo ""; 523: 524: } 525: 526: echo ""; 527: 528: // New Utility Links 529: //if ($NATS->Cfg->Get("dev.links",0)==1) // ABOVE AS WELL!! 530: //{ 531: echo ""; 551: 552: 553: echo ""; 554: //} 555: 556: 557: echo ""; 561: echo "
283: NodeID 284: :"; 285: echo $row['nodeid']; 286: echo "
289: Node Name 290: :"; 291: echo ""; 292: echo "
295: Hostname 296: :"; 297: echo ""; 298: echo "
301: Description 302: :"; 303: echo ""; 304: echo "
307: Node Icon 308: :"; 309: echo " [ Show Icons ]"; 316: echo " [ Show/Hide Icons ]"; 317: echo "
"; 320: echo "
";
321: echo "
324: Master Node :"; 325: echo " ".hlink("Node:Master")."\n"; 350: echo "
353: Skip if Master :"; 354: echo " ".hlink("MasterNode:Ping")."\n"; 365: echo "

369: Node Enabled 370: :"; 371: if ($row['nodeenabled']==1) $s=" checked"; 372: else $s=""; 373: echo ""; 374: echo " ".hlink("Node:Enabled"); 375: echo "
378: Test Schedule 379: :"; 380: echo ""; 391: $NATS->DB->Free($sr); 392: echo " ".hlink("Schedule"); 393: echo "
396: Test Interval 397: :"; 398: echo " "; 399: echo "Minutes ".hlink("Node:TestInterval"); 400: echo "
404: Test Due 405: :"; 406: if ($row['nextrunx']>0) echo nicedt($row['nextrunx']); 407: else echo "Now"; 408: echo "
";
409: echo nicenextx($row['nextrunx']); 410: echo " Check ASAP "; 411: echo hlink("Node:CheckASAP",12); 412: echo "
415: Alerts Active 416: :"; 417: if ($row['nodealert']==1) $s=" checked"; 418: else $s=""; 419: echo ""; 420: echo " ".hlink("Node:AlertActive"); 421: echo "

426: Ping Test 427: :"; 428: if ($row['pingtest']==1) $s=" checked"; 429: else $s=""; 430: echo ""; 431: echo " ".hlink("Node:PingTest"); 432: echo "
435: Require Ping 436: :"; 437: if ($row['pingfatal']==1) $s=" checked"; 438: else $s=""; 439: echo ""; 440: echo " ".hlink("Node:RequirePing"); 441: echo "

446: Node-Side Testing 447: :"; 448: if ($row['nsenabled']==1) $nodeside=true; 449: else $nodeside=false; 450: if ($nodeside) $s=" checked"; 451: else $s=""; 452: echo ""; 453: echo " ".hlink("Nodeside"); 454: echo "
Node Key :"; 460: echo ""; 461: echo " ".hlink("Nodeside:Key"); 462: echo "
Pull Enabled : "; 468: echo hlink("Nodeside:PullEnabled"); 469: echo "
Pull URL :"; 472: echo ""; 473: if ($row['nsurl']!="") 474: { 475: $uri=$row['nsurl']."?nodekey=".$row['nskey']."&noupdates=1"; 476: echo " Debug Raw Output"; 477: } 478: echo " ".hlink("Nodeside:URL"); 479: echo "
Pull Interval :"; 482: echo ""; 483: echo " Minutes ".hlink("Nodeside:Interval"); 484: echo "
Push Enabled : "; 490: echo hlink("Nodeside:PushEnabled"); 491: echo "
Push IP :"; 494: echo ""; 495: echo " ".hlink("Nodeside:PushIP"); 496: echo "
Last Data :"; 499: echo nicedt($row['nslastx'])." - ".dtago($row['nslastx'])."
Next Pull Due :"; 504: if ($row['nsnextx']>0) echo nicedt($row['nsnextx'])." - ".nicenextx($row['nsnextx']); 505: else echo "Now"; 506: echo "
Catalogue :"; 510: $nsq="SELECT COUNT(nstestid) FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\""; 511: $nsr=$NATS->DB->Query($nsq); 512: if ($nsrow=$NATS->DB->Fetch_Array($nsr)) 513: { 514: echo $nsrow['COUNT(nstestid)']." Node-Side Monitors"; 515: } 516: $NATS->DB->Free($nsr); 517: echo "
Refresh Now :"; 520: if ($row['nspullenabled']==1) echo "Refresh (Pull) Now"; 521: else echo "Pull Method Disabled"; 522: echo "

Utility Links ".hlink("UtilLinks",12)." :"; 532: echo ""; 533: echo ""; 534: for ($a=0; $a<3; $a++) // auto loop through them 535: { 536: $ulink="ulink".$a; 537: $utitle=$ulink."_title"; 538: $uurl=$ulink."_url"; 539: echo "\n"; 548: } 549: echo "
 TitleURL
"; 540: if ($row[$ulink]) $s=" checked"; 541: else $s=""; 542: echo ""; 543: echo ""; 544: echo ""; 545: echo ""; 546: echo ""; 547: echo "
";
550: echo "

"; 558: echo " Cancel Changes"; 559: echo "

";
560: echo "
";
562: echo "
";
563: echo "Show / Hide Node Options"; 564: echo "\n"; 567: End_Round(); 568: 569: if (isset($_REQUEST['show_icons'])) 570: { 571: echo "

";
572: ShowIcons(); 573: echo "

";
574: } 575: 576: //echo "
";
577: 578: echo "

";
579: $title="Node Tests"; 580: Start_Round($title,600); 581: echo ""; 582: $q="SELECT * FROM fnlocaltest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testtype!=\"ICMP\" ORDER BY localtestid ASC"; 583: $r=$NATS->DB->Query($q); 584: while ($row=$NATS->DB->Fetch_Array($r)) 585: { 586: echo ""; 595: 596: echo ""; 603: } 604: 605: if ($nodeside) 606: { 607: $q="SELECT * FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testenabled=1 ORDER BY testtype"; 608: $r=$NATS->DB->Query($q); 609: while ($row=$NATS->DB->Fetch_Array($r)) 610: { 611: echo ""; 618: 619: echo ""; 626: } 627: $NATS->DB->Free($r); 628: } 629: 630: echo "
";
631: echo "\n"; 632: echo ""; 633: echo ""; 634: echo ""; 657: 658: if ($nodeside) 659: { 660: echo "
";
661: echo ""; 662: echo ""; 663: echo ""; 675: } 676: 677: echo "
"; 587: 588: echo ""; 589: if (strlen($row['testparam'])>10) $tp=substr($row['testparam'],0,8).".."; 590: else $tp=$row['testparam']; 591: if ($row['testname']=="") echo lText($row['testtype'])." (".$tp.")"; 592: else echo $row['testname']; 593: echo ""; 594: echo " "; 597: echo " "; 598: echo ""; 599: echo ""; 600: 601: echo "  Last Tested: ".dtago($row['lastrunx']).""; 602: echo "
"; 612: 613: echo ""; 614: if ($row['testname']=="") echo $row['testdesc']; 615: else echo $row['testname']; 616: echo ""; 617: echo " "; 620: echo " "; 621: echo ""; 622: echo ""; 623: 624: echo "  Last Tested: ".dtago($row['lastrunx']).""; 625: echo "
 
Add Test : "; 649: 650: // one day will do fancy JS option here but for now moved to the edit 651: //echo " "; 652: echo ""; 653: echo ""; 654: 655: echo ""; 656: echo "
Add Node-side Monitor :"; 673: echo " "; 674: echo "
";
678: End_Round(); 679: echo "

";
680: 681: $title="Alert Actions ".hlink("AlertAction",12); 682: Start_Round($title,600); 683: echo ""; 684: echo ""; 685: echo ""; 686: $q="SELECT aaid,aname FROM fnalertaction"; 687: $r=$NATS->DB->Query($q); 688: $c=0; 689: while ($row=$NATS->DB->Fetch_Array($r)) 690: { 691: // has link? 692: $lq="SELECT nalid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND aaid=".ss($row['aaid'])." LIMIT 0,1"; 693: $lr=$NATS->DB->Query($lq); 694: if ($NATS->DB->Num_Rows($lr)>0) $s=" checked"; 695: else $s=""; 696: $NATS->DB->Free($lr); 697: echo ""; 699: } 700: $NATS->DB->Free($r); 701: echo ""; 702: echo "
"; 698: echo "".$row['aaid']." - ".$row['aname']."
";
703: End_Round(); 704: ?> 705:

706: 707: 708: Screen_Footer(); 709: ?> 710: