File: 1.04.1a/server/web/main.php (View as HTML)

  1: <?php
  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: ob_end_flush();
 32: 
 33: if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode'];
 34: else 
 35: 	{
 36: 	$mode="overview";
 37: 	$_REQUEST['mode']="overview";
 38: 	}
 39: 
 40: Screen_Header("Monitoring Configuration",1,0,"","main");
 41: 
 42: if (isset($_REQUEST['message'])) 
 43: 	{
 44: 	echo "<b>".$_REQUEST['message']."</b><br>";
 45: 	$poplist[]=$_REQUEST['message'];
 46: 	}
 47: 	
 48: if (isset($_REQUEST['nodemove'])) $nm=true;
 49: else $nm=false;
 50: 
 51: function dispyn($val)
 52: {
 53: if ($val==0) return "N";
 54: else if ($val==1) return "Y";
 55: else return $val."?";
 56: }
 57: 
 58: ?>
 59: <br>
 60: <?php
 61: if (isset($_REQUEST['check_updates']))
 62: 	{
 63: 	// check for updates
 64: 	$dq="?CheckVersion=".$NATS->Version."&JSMode=1";
 65: 	$dl="http://www.purplepixie.org/freenats/download.php";
 66: 	$du=$dl.$dq;
 67: 	echo "<b>Checking for Updates: ";
 68: 	echo "<script type=\"text/javascript\" src=\"".$du."\"></script>\n";
 69: 	echo "</b><br>";
 70: 	if (!isset($_REQUEST['quiet_check']))
 71: 		{
 72: 		echo "If this test fails you can check on the <a href=http://www.purplepixie.org/freenats/>website</a>.<br>";
 73: 		echo "You are currently running version ";
 74: 		echo $NATS->Version.$NATS->Release.".";
 75: 		echo "<br><i>It is recommended that you check regularly for updates</i><br>";
 76: 		}
 77: 	echo "<br>";
 78: 	}
 79: 
 80: 
 81: if ($mode=="overview")
 82: 	{
 83: 	$t="<b class=\"subtitle\">FreeNATS Overview</b>";
 84: 	Start_Round($t,600);
 85: 	echo "<table width=100% border=0><tr><td align=left width=50%>";
 86: 	$al=$NATS->GetAlerts();
 87: 	if (($al===false)||(count($al)==0))
 88: 		{
 89: 		echo "<b class=\"al0\">No Monitoring Alerts</b>";
 90: 		}
 91: 	else
 92: 		{
 93: 		echo "<a href=monitor.php>";
 94: 		echo "<b class=\"al2\">Monitoring Alerts</b>";
 95: 		echo "</a>";
 96: 		}
 97: 	echo "</td><td align=right><b><a href=main.php?check_updates=1>Check for Updates</a></b></td></tr>";
 98: 	
 99: 	echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
100: 	$fx=time();
101: 	$sx=$fx-(60*60*24);
102: 	echo "<tr><td align=left valign=top>";
103: 	 echo "<b>Monitoring</b><br><br>";
104: 	$nq="SELECT COUNT(nodeid) FROM fnnode";
105: 	$nr=$NATS->DB->Query($nq);
106: 	if ($nrow=$NATS->DB->Fetch_Array($nr)) $nodecount=$nrow['COUNT(nodeid)'];
107: 	else $nodecount=0;
108: 	$NATS->DB->Free($nr);
109: 	$gq="SELECT COUNT(groupid) FROM fngroup";
110: 	$gr=$NATS->DB->Query($gq);
111: 	if ($nrow=$NATS->DB->Fetch_Array($gr)) $groupcount=$nrow['COUNT(groupid)'];
112: 	else $groupcount=0;
113: 	$NATS->DB->Free($gr);
114: 	 echo "<a href=main.php?mode=nodes>".$nodecount." Nodes Configured</a><br><br>";
115: 	 echo "<a href=main.php?mode=groups>".$groupcount." Node Groups</a><br>";
116: 	echo "</td><td align=right valign=top>";
117: 	echo "<b>Common Tasks</b><br><br>";
118: 	echo "<a href=main.php?mode=nodes>Add Nodes</a><br>";
119: 	echo "<a href=admin.php?mode=alertactions>Email Alerting</a><br>";
120: 	echo "<a href=main.php?mode=nodes>Configure Tests</a><br>";
121: 	echo "</td></tr>";
122: 	echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
123: 	echo "<tr><td colspan=2><b>Test Summaries</b><br><br>";
124: 	echo "<a href=summary.test.php?nodeid=*>Today</a> - ";
125: 	echo "<a href=summary.test.php?nodeid=*&startx=".$sx."&finishx=".$fx.">Last 24 Hrs</a> - ";
126: 	echo "<a href=summary.test.php?mode=custom>Custom</a>";
127: 	echo "</td></tr>";
128: 	echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
129: 	echo "<tr><td colspan=2>";
130: 	/*
131: 	echo "<b>Installed Test Modules</b><br><br>";
132: 	echo "<table class=\"nicetable\" width=100%>";
133: 	echo "<tr><td><b>Name</b></td><td><b>Provides</b></td><td><b>Revision</b></td><td><b>Additional</b></td></tr>";
134: 	foreach($NATS->Tests->QuickList as $key => $val)
135: 		{
136: 		echo "<tr><td>";
137: 		echo $NATS->Tests->Tests[$key]->name;
138: 		echo "</td><td>";
139: 		echo $NATS->Tests->Tests[$key]->type;
140: 		echo "</td><td>";
141: 		echo $NATS->Tests->Tests[$key]->revision;
142: 		echo "</td><td>";
143: 		echo $NATS->Tests->Tests[$key]->additional;
144: 		echo "</td></tr>";
145: 		}
146: 	echo "</table>";
147: 	*/
148: 	echo "<b>Monitored Nodes</b><br><br>";
149: 	$q="SELECT nodeid,nodename,alertlevel FROM fnnode WHERE nodeenabled=1 ORDER BY alertlevel DESC, weight ASC";
150: 	$r=$NATS->DB->Query($q);
151: 	$first=true;
152: 	while ($row=$NATS->DB->Fetch_Array($r))
153: 		{
154: 		if ($first) $first=false;
155: 		else echo ", ";
156: 		echo "<a href=node.php?nodeid=".$row['nodeid'].">";
157: 		echo "<b class=\"al".$row['alertlevel']."\">";
158: 		if ($row['nodename']!="") echo $row['nodename'];
159: 		else echo $row['nodeid'];
160: 		echo "</b></a>";
161: 		}
162: 	echo "</td></tr>";
163: 	echo "</table>";
164: 	echo "<br>";
165: 	End_Round();
166: 	echo "<br><br>";
167: 	}
168: 	
169: else if ($mode=="nodes")
170: {
171: 
172: 	if ($nm)
173: 	{
174: 	$q="SELECT nodeid,weight FROM fnnode ORDER BY weight ASC";
175: 	$r=$NATS->DB->Query($q);
176: 	$nml="<span style=\"font-size: 8pt;\">Move Before </span><select name=move_before style=\"font-size: 8pt;\">";
177: 	while ($row=$NATS->DB->Fetch_Array($r))
178: 		{
179: 		$nml.="<option value=".$row['weight'].">".$row['nodeid']."</option>";
180: 		}
181: 	$nml.="</select>";
182: 	$NATS->DB->Free($r);	
183: 	}
184: 	
185: 	Start_Round("<b class=\"subtitle\">Nodes</b> ".hlink("Node",12),600);
186: 	$q="SELECT nodeid,nodename,alertlevel,weight FROM fnnode ORDER BY weight ASC";
187: 	$r=$NATS->DB->Query($q);
188: 	
189: 	echo "<table class=\"nicetablehov\" width=100%>";
190: 	echo "<tr><td><b>Node</b></td><td><b>Options</b></td><td><a href=main.php?mode=nodes&nodemove=1><b>Move</a></b></td></tr>";
191: 	$f=0;
192: 	$l=$NATS->DB->Num_Rows($r);
193: 	while ($row=$NATS->DB->Fetch_Array($r))
194: 		{
195: 		//echo "<tr class=\"nicetablehov\" id=\"noderow_".$row['nodeid']."\" onmouseover=\"highlightrow('noderow_".$row['nodeid']."')\"><td align=left>";
196: 		echo "<tr class=\"nicetablehov\"><td align=left>";
197: 		echo "<a href=node.php?nodeid=".$row['nodeid'].">";
198: 		
199: 		echo "<b class=\"al".$row['alertlevel']."\">";
200: 		echo $row['nodename'];
201: 		echo "</b>";
202: 		
203: 		echo "</a> ";
204: 		echo "(".$row['nodeid'].")";
205: 		echo "</td><td align=left>";
206: 		echo "&nbsp;<a href=node.edit.php?nodeid=".$row['nodeid']."><img src=images/options/application.png border=0 title=\"Edit Options\"></a>";
207: 		echo "&nbsp;";
208: 		echo "<a href=node.action.php?action=delete&nodeid=".$row['nodeid']."><img src=images/options/action_delete.png border=0></a> ";
209: 		echo "</td>";
210: 		
211: 		if ($nm) 
212: 			{
213: 			echo "<form action=node.action.php method=post>";
214: 			echo "<input type=hidden name=nodeid value=".$row['nodeid'].">";
215: 			echo "<input type=hidden name=action value=move_before>";
216: 			}
217: 		
218: 		echo "<td>";
219: 		if ($f==0) echo "<img src=images/arrows/off/arrow_top.png>";
220: 		else 
221: 			{
222: 			echo "<a href=node.action.php?nodeid=".$row['nodeid']."&action=move&dir=up>";
223: 			echo "<img src=\"images/arrows/on/arrow_top.png\" border=0>";
224: 			echo "</a>";
225: 			}
226: 		
227: 		if ($f>=($l-1)) echo "<img src=images/arrows/off/arrow_down.png>";
228: 		else 
229: 			{
230: 			echo "<a href=node.action.php?nodeid=".$row['nodeid']."&action=move&dir=down>";
231: 			echo "<img src=\"images/arrows/on/arrow_down.png\" border=0>";
232: 			echo "</a>";
233: 			}
234: 		
235: 		if ($nm)
236: 			{
237: 			echo "<span style=\"font-size: 8pt;\">&nbsp;[".$row['weight']."]&nbsp;</span>";
238: 			echo $nml;
239: 			echo " <input type=submit value=\"Go\" style=\"font-size: 8pt;\">";
240: 			}
241: 			
242: 		echo "</td>";
243: 		
244: 		if ($nm) echo "</form>"; 
245: 		$f++;
246: 		
247: 		echo "</tr>";
248: 		}
249: 	echo "<tr><td colspan=3>&nbsp;<br></td></tr>";
250: 	echo "<form action=node.action.php><input type=hidden name=action value=create>";
251: 	echo "<tr><td><input type=text name=nodeid size=20 maxlenth=32></td><td colspan=2><input type=submit value=\"Create Node\"> ";
252: 	echo hlink("Node:Create");
253: 	if ($nm) echo " <a href=node.action.php?action=reorderweight>Refresh Weighting</a>";
254: 	echo "</td></tr></form>";
255: 	
256: 	$fx=time();
257: 	$sx=$fx-(60*60*24);
258: 	echo "<tr><td colspan=3><b>Summary: </b><a href=summary.test.php?nodeid=*>Today</a> - ";
259: 	echo "<a href=summary.test.php?nodeid=*&startx=".$sx."&finishx=".$fx.">Last 24 Hrs</a> - ";
260: 	echo "<a href=summary.test.php?mode=custom>Custom</a> - ";
261: 	echo "<a href=main.php?mode=configsummary>Configuration</a></td></tr>";
262: 	
263: 	echo "</table>";
264: 	End_Round();
265: 	}
266: 
267: else if ($mode=="groups")
268: 	{
269: 	
270: 	$t="<b class=\"subtitle\">Node Groups</b> ".hlink("Group",12);
271: 	Start_Round($t,600);
272: 	
273: 	$q="SELECT groupid,groupname FROM fngroup ORDER BY weight ASC";
274: 	$r=$NATS->DB->Query($q);
275: 	$f=0;
276: 	echo "<table class=\"nicetablehov\" width=100%>";
277: 	$l=$NATS->DB->Num_Rows($r);
278: 	while ($row=$NATS->DB->Fetch_Array($r))
279: 		{
280: 		echo "<tr class=\"nicetablehov\">";
281: 		echo "<td><a href=group.php?groupid=".$row['groupid']."><b class=\"al".$NATS->GroupAlertLevel($row['groupid'])."\">".$row['groupname']."</b></a></td>";
282: 		echo "<td><a href=group.edit.php?groupid=".$row['groupid']."><img src=images/options/application.png border=0 title=\"Edit Options\"></a>";
283: 		echo "&nbsp;";
284: 		echo "<a href=group.action.php?action=delete&groupid=".$row['groupid']."><img src=images/options/action_delete.png border=0 title=\"Delete Group\"></a></td>";
285: 		echo "<td>";
286: 		
287: 		if ($f==0) echo "<img src=images/arrows/off/arrow_top.png>";
288: 		else 
289: 			{
290: 			echo "<a href=group.action.php?groupid=".$row['groupid']."&action=move&dir=up>";
291: 			echo "<img src=\"images/arrows/on/arrow_top.png\" border=0>";
292: 			echo "</a>";
293: 			}
294: 		
295: 		if ($f>=($l-1)) echo "<img src=images/arrows/off/arrow_down.png>";
296: 		else 
297: 			{
298: 			echo "<a href=group.action.php?groupid=".$row['groupid']."&action=move&dir=down>";
299: 			echo "<img src=\"images/arrows/on/arrow_down.png\" border=0>";
300: 			echo "</a>";
301: 			}
302: 			
303: 		echo "</td>";
304: 		$f++;
305: 		
306: 		echo "</tr>";
307: 		}
308: 	echo "<tr><td colspan=3>&nbsp;<br></td></tr>";
309: 	echo "<form action=group.action.php method=post>";
310: 	echo "<input type=hidden name=action value=create>";
311: 	echo "<tr><td><input type=text size=20 name=groupname maxlength=120></td><td colspan=2><input type=submit value=\"Create Group\">";
312: 	echo " ".hlink("Group:Create")."</td></tr></form>";
313: 	echo "</table>";
314: 	End_Round();
315: 	}
316: 	
317: else if ($mode=="views")
318: 	{
319: 	$t="<b class=\"subtitle\">Views</b> ".hlink("View",12);
320: 	Start_Round($t,600);
321: 	echo "<table class=\"nicetablehov\" width=100%>";
322: 	// get views...
323: 	$q="SELECT viewid,vtitle FROM fnview";
324: 	$r=$NATS->DB->Query($q);
325: 	while ($row=$NATS->DB->Fetch_Array($r))
326: 		{
327: 		echo "<tr class=\"nicetablehov\"><td>";
328: 		echo "<a href=view.php?viewid=".$row['viewid'].">".$row['vtitle']."</a>";
329: 		echo "</td><td>";
330: 		echo "<a href=view.edit.php?viewid=".$row['viewid']."><img src=images/options/application.png border=0 title=\"Edit View Options\"></a>";
331: 		echo "&nbsp;";
332: 		echo "<a href=view.edit.php?viewid=".$row['viewid']."&action=delete><img src=images/options/action_delete.png border=0 title=\"Delete View\"></a>";
333: 		echo "</td></tr>";
334: 		}
335: 	
336: 	echo "<tr><td colspan=2>&nbsp;<br></td></tr>";
337: 	echo "<form action=view.edit.php method=post><input type=hidden name=action value=create>";
338: 	echo "<tr><td><input type=text name=vtitle size=20 maxlength=64></td><td><input type=submit value=\"Create View\"> ";
339: 	echo hlink("View:Create")."</td></tr></form>";
340: 	echo "</table>";
341: 	End_Round();
342: 	
343: 	echo "<br><br>";
344: 	$t="<b class=\"subtitle\">Availability Reports ".hlink("Report",12)."</b>";
345: 	Start_Round($t,600);
346: 	echo "<b><a href=report.php>Create New Service Availability Report</a></b> ".hlink("Report",12);
347: 	echo "<br><br>";
348: 	
349: 	// reports in here
350: 	$rq="SELECT reportid,reportname FROM fnreport";
351: 	$rr=$NATS->DB->Query($rq);
352: 	if ($NATS->DB->Num_Rows($rr)>0)
353: 		{
354: 		echo "<table class=\"nicetablehov\" width=100%>";
355: 		while ($rep=$NATS->DB->Fetch_Array($rr))
356: 			{
357: 			echo "<tr class=\"nicetablehov\">";
358: 			echo "<td align=left>";
359: 			echo "<a href=report.php?reportid=".$rep['reportid'].">".$rep['reportname']."</a>";
360: 			echo "</td><td align=right>";
361: 			echo "<a href=report.php?mode=delete&reportid=".$rep['reportid'].">";
362: 			echo "<img src=images/options/action_delete.png border=0 title=\"Delete Report ".$rep['reportname']."\">";
363: 			echo "</a>";
364: 			echo "&nbsp;&nbsp;";
365: 			echo "</td></tr>";
366: 			}
367: 		echo "</table>";
368: 		}
369: 	
370: 	End_Round();
371: 	
372: 	}
373: 	
374: else if ($mode=="configsummary")
375: 	{
376: 	$scheds=array();
377: 	$q="SELECT scheduleid,schedulename FROM fnschedule";
378: 	$r=$NATS->DB->Query($q);
379: 	while ($row=$NATS->DB->Fetch_Array($r))
380: 		{
381: 		$scheds[$row['scheduleid']]=$row['schedulename'];
382: 		}
383: 	$NATS->DB->Free($r);
384: 		
385: 	echo "<b class=\"subtitle\">Configuration Summary / Overview</b><br><br>";
386: 	echo "<table width=100% border=1>";
387: 	echo "<tr>";
388: 	echo "<td><b>";
389: 	echo "Node ID";
390: 	echo "</b></td>";
391: 	echo "<td><b>";
392: 	echo "Name";
393: 	echo "</b></td>";
394: 	echo "<td><b>";
395: 	echo "Hostname";
396: 	echo "</b></td>";
397: 	echo "<td><b>";
398: 	echo "Schedule";
399: 	echo "</b></td>";
400: 	echo "<td><b>";
401: 	echo "Enabled";
402: 	echo "</b></td>";
403: 	echo "<td><b>";
404: 	echo "Ping / Required";
405: 	echo "</b></td>";
406: 	echo "<td><b>";
407: 	echo "Interval";
408: 	echo "</b></td>";
409: 	echo "<td><b>";
410: 	echo "Nodeside";
411: 	echo "</b></td>";
412: 	echo "</tr>";
413: 	$q="SELECT * FROM fnnode ORDER BY weight ASC";
414: 	$r=$NATS->DB->Query($q);
415: 	while ($row=$NATS->DB->Fetch_Array($r))
416: 		{
417: 		echo "<tr><td>";
418: 		echo $row['nodeid'];
419: 		echo "</td><td>";
420: 		echo $row['nodename'];
421: 		echo "</td><td>";
422: 		echo $row['hostname'];
423: 		echo "</td><td>";
424: 		if ($row['scheduleid']==0) $s="All Times";
425: 		else if (isset($scheds[$row['scheduleid']])) $s=$scheds[$row['scheduleid']];
426: 		else $s="UNKNOWN";
427: 		echo $s;
428: 		echo "</td><td>";
429: 		echo dispyn($row['nodeenabled']);
430: 		echo "</td><td>";
431: 		echo dispyn($row['pingtest'])." / ".dispyn($row['pingfatal']);
432: 		echo "</td><td>";
433: 		echo $row['testinterval'];
434: 		echo "</td><td>";
435: 		echo dispyn($row['nsenabled']);
436: 		echo "</td>";
437: 		
438: 		echo "</tr>";
439: 		}
440: 	$NATS->DB->Free($r);
441: 	echo "</table><br><br>";
442: 	
443: 	}	
444: 
445: else
446: 	{
447: 	echo "Sorry - unknown mode for main.php";
448: 	}
449: 
450: 
451: echo "<br><br>";
452: 
453: ?>
454: 
455: 
456: <?php
457: Screen_Footer();
458: /* old PhoneHome Ping Tracker - now in screen as a png
459: $t=$NATS->Cfg->Get("freenats.tracker");
460: if ( ($t!="") && ($t>0) )
461: 	$NATS->PhoneHome();
462: */
463: ?>
464: