diff options
Diffstat (limited to 'src/usr/local/www/diag_logs_filter_summary.php')
-rw-r--r-- | src/usr/local/www/diag_logs_filter_summary.php | 353 |
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 |