summaryrefslogtreecommitdiffstats
path: root/src/usr/local/www/diag_logs_filter_summary.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/local/www/diag_logs_filter_summary.php')
-rw-r--r--src/usr/local/www/diag_logs_filter_summary.php353
1 files changed, 211 insertions, 142 deletions
diff --git a/src/usr/local/www/diag_logs_filter_summary.php b/src/usr/local/www/diag_logs_filter_summary.php
index 331df0d..8d88310 100644
--- a/src/usr/local/www/diag_logs_filter_summary.php
+++ b/src/usr/local/www/diag_logs_filter_summary.php
@@ -1,31 +1,58 @@
<?php
/*
diag_logs_filter_summary.php
- Copyright (C) 2009 Jim Pingle (jpingle@gmail.com)
- Copyright (C) 2013-2015 Electric Sheep Fencing, LP
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
*/
+/* ====================================================================
+ * Copyright (c) 2004-2015 Electric Sheep Fencing, LLC. All rights reserved.
+ * Copyright (c) 2009 Jim Pingle (jpingle@gmail.com)
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution. (http://www.pfsense.org/).
+ *
+ * 4. The names "pfSense" and "pfSense Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * coreteam@pfsense.org.
+ *
+ * 5. Products derived from this software may not be called "pfSense"
+ * nor may "pfSense" appear in their names without prior written
+ * permission of the Electric Sheep Fencing, LLC.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ *
+ * "This product includes software developed by the pfSense Project
+ * for use in the pfSense software distribution (http://www.pfsense.org/).
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ====================================================================
+ *
+ */
/*
pfSense_BUILDER_BINARIES:
@@ -44,13 +71,16 @@ $entriesperblock = 5;
$filterlog = conv_log_filter($filter_logfile, $lines, $lines);
$gotlines = count($filterlog);
$fields = array(
- 'act' => gettext("Actions"),
+ 'act' => gettext("Actions"),
'interface' => gettext("Interfaces"),
- 'proto' => gettext("Protocols"),
- 'srcip' => gettext("Source IPs"),
- 'dstip' => gettext("Destination IPs"),
- 'srcport' => gettext("Source Ports"),
- 'dstport' => gettext("Destination Ports"));
+ 'proto' => gettext("Protocols"),
+ 'srcip' => gettext("Source IPs"),
+ 'dstip' => gettext("Destination IPs"),
+ 'srcport' => gettext("Source Ports"),
+ 'dstport' => gettext("Destination Ports"));
+
+$segcolors = array("#2484c1", "#65a620", "#7b6888", "#a05d56", "#961a1a", "#d8d23a", "#e98125", "#d0743c", "#635222", "#6ada6a");
+$numcolors = 10;
$summary = array();
foreach (array_keys($fields) as $f) {
@@ -69,8 +99,9 @@ function cmp($a, $b) {
function stat_block($summary, $stat, $num) {
global $g, $gotlines, $fields;
uasort($summary[$stat] , 'cmp');
- print "<table width=\"200\" cellpadding=\"3\" cellspacing=\"0\" border=\"1\" summary=\"source destination ip\">";
- print "<tr><th colspan=\"2\">{$fields[$stat]} ".gettext("data")."</th></tr>";
+ print('<div class="table-responsive">');
+ print('<table class="table table-striped table-hover table-condensed">');
+ print('<tr><th>' . $fields[$stat] . '</th>' . '<th>' . gettext("Data points") . '</th><th></th></tr>');
$k = array_keys($summary[$stat]);
$total = 0;
$numentries = 0;
@@ -80,7 +111,8 @@ function stat_block($summary, $stat, $num) {
$numentries++;
$outstr = $k[$i];
if (is_ipaddr($outstr)) {
- $outstr = "<a href=\"diag_dns.php?host={$outstr}\" title=\"".gettext("Reverse Resolve with DNS")."\"><img border=\"0\" src=\"/themes/{$g['theme']}/images/icons/icon_log.gif\" alt=\"log\" /></a> {$outstr}";
+ print('<tr><td>' . $outstr . '</td>' . '<td>' . $summary[$stat][$k[$i]] . '</td><td><a href="diag_dns.php?host=' . $outstr . '" class="btn btn-xs btn-success" title="' . gettext("Reverse Resolve with DNS") . '">Lookup</a></td></tr>');
+
} elseif (substr_count($outstr, '/') == 1) {
list($proto, $port) = explode('/', $outstr);
$service = getservbyport($port, strtolower($proto));
@@ -88,66 +120,130 @@ function stat_block($summary, $stat, $num) {
$outstr .= ": {$service}";
}
}
- print "<tr><td>{$outstr}</td><td width=\"50\" align=\"right\">{$summary[$stat][$k[$i]]}</td></tr>";
+
+ if(!is_ipaddr($outstr))
+ print('<tr><td>' . $outstr . '</td><td>' . $summary[$stat][$k[$i]] . '</td><td></td></tr>');
}
}
$leftover = $gotlines - $total;
if ($leftover > 0) {
- print "<tr><td>Other</td><td width=\"50\" align=\"right\">{$leftover}</td></tr>";
+ print "<tr><td>Other</td><td>{$leftover}</td><td></td>";
}
print "</table>";
+ print('</div>');
}
-function pie_block($summary, $stat, $num) {
- global $gotlines, $fields;
+// Create the JSON document for the chart to be displayed
+// Todo: Be good to investigate building this with json_encode and friends some time
+function pie_block($summary, $stat, $num, $chartnum) {
+ global $fields, $segcolors, $gotlines, $numcolors;
+?>
+<script>
+var pie = new d3pie("pieChart<?=$chartnum?>", {
+ "header": {
+ "title": {
+ "text": "",
+ "fontSize": 22,
+ "font": "verdana"
+ },
+ "subtitle": {
+ "color": "#999999",
+ "fontSize": 12,
+ "font": "open sans"
+ },
+ "titleSubtitlePadding": 12
+ },
+ "footer": {
+ "color": "#999999",
+ "fontSize": 10,
+ "font": "open sans",
+ "location": "bottom-left"
+ },
+ "size": {
+ "canvasHeight": 400,
+ "canvasWidth": 590,
+ "pieOuterRadius": "88%"
+ },
+ "data": {
+ "sortOrder": "value-desc",
+ "content": [
+<?php
uasort($summary[$stat] , 'cmp');
$k = array_keys($summary[$stat]);
$total = 0;
$numentries = 0;
- print "\n<script type=\"text/javascript\">\n";
- print "//<![CDATA[\n";
- for ($i = 0; $i < $num; $i++) {
+
+ for ($i=0; $i < $num; $i++) {
if ($k[$i]) {
$total += $summary[$stat][$k[$i]];
$numentries++;
- print "var d{$stat}{$i} = [];\n";
- print "d{$stat}{$i}.push([1, {$summary[$stat][$k[$i]]}]);\n";
+ if($i > 0)
+ print(",\r\n");
+
+ print("{");
+ print('"label": "' . $k[$i] . '", "value": ');
+ print($summary[$stat][$k[$i]]);
+ print(', "color": "' . $segcolors[$i % $numcolors] . '"');
+ print("}");
+
}
}
+
$leftover = $gotlines - $total;
- if ($leftover > 0) {
- print "var d{$stat}{$num} = [];\n";
- print "d{$stat}{$num}.push([1, {$leftover}]);\n";
- }
- print "Event.observe(window, 'load', function() {\n";
- print " new Proto.Chart($('piechart{$stat}'),\n";
- print " [\n";
- for ($i = 0; $i < $num; $i++) {
- if ($k[$i]) {
- print " { data: d{$stat}{$i}, label: \"{$k[$i]}\"}";
- if (!(($i == ($numentries - 1)) && ($leftover <= 0))) {
- print ",\n";
- } else {
- print "\n";
- }
- }
- }
if ($leftover > 0) {
- print " { data: d{$stat}{$i}, label: \"Other\"}\n";
+ print(",\r\n");
+ print("{");
+ print('"label": "Other", "value": ');
+ print($leftover);
+ print(', "color": "' . $segcolors[$i % $numcolors] . '"');
+ print("}");
}
- print " ],\n";
- print " {\n";
- print " pies: {show: true, autoScale: true},\n";
- print " legend: {show: true, labelFormatter: lblfmt}\n";
- print " });\n";
- print "});\n";
- print "//]]>\n";
- print "</script>\n";
- print "<table cellpadding=\"3\" cellspacing=\"0\" border=\"0\" summary=\"pie chart\">";
- print "<tr><th><font size=\"+1\">{$fields[$stat]}</font></th></tr>";
- print "<tr><td><div id=\"piechart{$stat}\" style=\"width:450px;height:300px\"></div></td></tr>";
- print "</table>\n";
+?>
+ ]
+ },
+ "labels": {
+ "outer": {
+ "pieDistance": 32
+ },
+ "inner": {
+ "hideWhenLessThanPercentage": 3
+ },
+ "mainLabel": {
+ "fontSize": 11
+ },
+ "percentage": {
+ "color": "#ffffff",
+ "decimalPlaces": 0
+ },
+ "value": {
+ "color": "#adadad",
+ "fontSize": 11
+ },
+ "lines": {
+ "enabled": true
+ },
+ "truncation": {
+ "enabled": true
+ }
+ },
+ "effects": {
+ "pullOutSegmentOnClick": {
+ "effect": "linear",
+ "speed": 400,
+ "size": 8
+ }
+ },
+ "misc": {
+ "gradient": {
+ "enabled": true,
+ "percentage": 100
+ }
+ },
+ "callbacks": {}
+});
+</script>
+<?php
}
foreach ($filterlog as $fe) {
@@ -170,80 +266,53 @@ foreach ($filterlog as $fe) {
}
}
-include("head.inc"); ?>
-<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
-<script src="/javascript/filter_log.js" type="text/javascript"></script>
-<script type="text/javascript" src="/protochart/prototype.js"></script>
-<script type="text/javascript" src="/protochart/ProtoChart.js"></script>
-<!--[if IE]>
-<script type="text/javascript" src="/protochart/excanvas.js">
-</script>
-<![endif]-->
-<script type="text/javascript">
-//<![CDATA[
- function lblfmt(lbl) {
- return '<font size=\"-2\">' + lbl + '<\/font>'
- }
-//]]>
-</script>
+include("head.inc");
+
+$tab_array = array();
+$tab_array[] = array(gettext("System"), false, "diag_logs.php");
+$tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
+$tab_array[] = array(gettext("DHCP"), false, "diag_logs.php?logfile=dhcpd");
+$tab_array[] = array(gettext("Portal Auth"), false, "diag_logs.php?logfile=portalauth");
+$tab_array[] = array(gettext("IPsec"), false, "diag_logs.php?logfile=ipsec");
+$tab_array[] = array(gettext("PPP"), false, "diag_logs.php?logfile=ppp");
+$tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
+$tab_array[] = array(gettext("Load Balancer"), false, "diag_logs.php?logfile=relayd");
+$tab_array[] = array(gettext("OpenVPN"), false, "diag_logs.php?logfile=openvpn");
+$tab_array[] = array(gettext("NTP"), false, "diag_logs.php?logfile=ntpd");
+$tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
+display_top_tabs($tab_array);
+
+$tab_array = array();
+$tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
+$tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
+$tab_array[] = array(gettext("Summary View"), true, "/diag_logs_filter_summary.php");
+display_top_tabs($tab_array, false, 'nav nav-tabs');
+
+$infomsg = sprintf('This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s).', $gotlines, $lines);
+print_info_box($infomsg);
+?>
+
+<script src="d3pie/d3pie.min.js"></script>
+<script src="d3pie/d3.min.js"></script>
-<?php include("fbegin.inc"); ?>
-<table width="100%" border="0" cellpadding="0" cellspacing="0" summary="logs filter summary">
- <tr>
- <td>
<?php
- $tab_array = array();
- $tab_array[] = array(gettext("System"), false, "diag_logs.php");
- $tab_array[] = array(gettext("Firewall"), true, "diag_logs_filter.php");
- $tab_array[] = array(gettext("DHCP"), false, "diag_logs_dhcp.php");
- $tab_array[] = array(gettext("Portal Auth"), false, "diag_logs_auth.php");
- $tab_array[] = array(gettext("IPsec"), false, "diag_logs_ipsec.php");
- $tab_array[] = array(gettext("PPP"), false, "diag_logs_ppp.php");
- $tab_array[] = array(gettext("VPN"), false, "diag_logs_vpn.php");
- $tab_array[] = array(gettext("Load Balancer"), false, "diag_logs_relayd.php");
- $tab_array[] = array(gettext("OpenVPN"), false, "diag_logs_openvpn.php");
- $tab_array[] = array(gettext("NTP"), false, "diag_logs_ntpd.php");
- $tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
- display_top_tabs($tab_array);
+
+$chartnum=0;
+foreach(array_keys($fields) as $field) {
?>
- </td>
- </tr>
- <tr>
- <td class="tabnavtbl">
+<div class="panel panel-default">
+ <div class="panel-heading"><h2 class="panel-title"><?=$fields[$field]?></h2></div>
+ <div class="panel-body">
+ <div id="pieChart<?=$chartnum?>" align="center">
<?php
- $tab_array = array();
- $tab_array[] = array(gettext("Normal View"), false, "/diag_logs_filter.php");
- $tab_array[] = array(gettext("Dynamic View"), false, "/diag_logs_filter_dynamic.php");
- $tab_array[] = array(gettext("Summary View"), true, "/diag_logs_filter_summary.php");
- display_top_tabs($tab_array);
+ pie_block($summary, $field , $entriesperblock, $chartnum);
+ stat_block($summary, $field , $entriesperblock);
+ $chartnum++;
?>
- </td>
- </tr>
- <tr>
- <td>
- <div id="mainarea">
- <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0" align="center" summary="main area">
- <tr>
- <td align="center">
-
-<?php printf (gettext('This is a firewall log summary, of the last %1$s lines of the firewall log (Max %2$s).'), $gotlines, $lines)?><br />
-<?=gettext("NOTE: IE8 users must enable compatibility view.")?>
-
+ </div>
+ </div>
+</div>
<?php
-foreach (array_keys($fields) as $field) {
- pie_block($summary, $field , $entriesperblock);
- echo "<br /><br />";
- stat_block($summary, $field , $entriesperblock);
- echo "<br /><br />";
}
-?>
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
-</table>
-<?php include("fend.inc"); ?>
-</body>
-</html>
+
+include("foot.inc"); \ No newline at end of file
OpenPOWER on IntegriCloud