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 | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/src/usr/local/www/diag_logs_filter_summary.php b/src/usr/local/www/diag_logs_filter_summary.php new file mode 100644 index 0000000..331df0d --- /dev/null +++ b/src/usr/local/www/diag_logs_filter_summary.php @@ -0,0 +1,249 @@ +<?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. +*/ + +/* + pfSense_BUILDER_BINARIES: + pfSense_MODULE: filter +*/ + +$pgtitle = gettext("Status").": ".gettext("System logs").": ".gettext("Firewall Log Summary"); +$shortcut_section = "firewall"; +require_once("guiconfig.inc"); +include_once("filter_log.inc"); + +$filter_logfile = "{$g['varlog_path']}/filter.log"; +$lines = 5000; +$entriesperblock = 5; + +$filterlog = conv_log_filter($filter_logfile, $lines, $lines); +$gotlines = count($filterlog); +$fields = array( + '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")); + +$summary = array(); +foreach (array_keys($fields) as $f) { + $summary[$f] = array(); +} + +$totals = array(); + +function cmp($a, $b) { + if ($a == $b) { + return 0; + } + return ($a < $b) ? 1 : -1; +} + +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>"; + $k = array_keys($summary[$stat]); + $total = 0; + $numentries = 0; + for ($i = 0; $i < $num; $i++) { + if ($k[$i]) { + $total += $summary[$stat][$k[$i]]; + $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}"; + } elseif (substr_count($outstr, '/') == 1) { + list($proto, $port) = explode('/', $outstr); + $service = getservbyport($port, strtolower($proto)); + if ($service) { + $outstr .= ": {$service}"; + } + } + print "<tr><td>{$outstr}</td><td width=\"50\" align=\"right\">{$summary[$stat][$k[$i]]}</td></tr>"; + } + } + $leftover = $gotlines - $total; + if ($leftover > 0) { + print "<tr><td>Other</td><td width=\"50\" align=\"right\">{$leftover}</td></tr>"; + } + print "</table>"; +} + +function pie_block($summary, $stat, $num) { + global $gotlines, $fields; + 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++) { + 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"; + } + } + $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 " ],\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"; +} + +foreach ($filterlog as $fe) { + $specialfields = array('srcport', 'dstport'); + foreach (array_keys($fields) as $field) { + if (!in_array($field, $specialfields)) { + $summary[$field][$fe[$field]]++; + } + } + /* Handle some special cases */ + if ($fe['srcport']) { + $summary['srcport'][$fe['proto'].'/'.$fe['srcport']]++; + } else { + $summary['srcport'][$fe['srcport']]++; + } + if ($fe['dstport']) { + $summary['dstport'][$fe['proto'].'/'.$fe['dstport']]++; + } else { + $summary['dstport'][$fe['dstport']]++; + } +} + +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> + +<?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); +?> + </td> + </tr> + <tr> + <td class="tabnavtbl"> +<?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); +?> + </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.")?> + +<?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> |