summaryrefslogtreecommitdiffstats
path: root/usr/local
diff options
context:
space:
mode:
authorRenato Botelho <garga@FreeBSD.org>2013-01-25 15:16:47 -0200
committerRenato Botelho <garga@FreeBSD.org>2013-01-25 15:16:47 -0200
commitc251f8ccc84a7595bb14ccdd9754321c54762eaf (patch)
treef0b4794bce607c2899270919cdf05b1aea244ba4 /usr/local
parent8fcb7cf48fc874c10d0336a3b0891ce128825092 (diff)
downloadpfsense-c251f8ccc84a7595bb14ccdd9754321c54762eaf.zip
pfsense-c251f8ccc84a7595bb14ccdd9754321c54762eaf.tar.gz
Make synamic firewall logs and widget add new rows:
The Dynamic Firewall Log page doesn't add rows, it only updates the php generated rows which means that if it's loaded after the log is cleared, it'll never show any activity. The same occurs for the log widget. This pacth fix this issue moving from absolutely sized spans to tables. It should fix #2763
Diffstat (limited to 'usr/local')
-rw-r--r--usr/local/www/css/table.css4
-rwxr-xr-xusr/local/www/diag_logs_filter_dynamic.php84
-rw-r--r--usr/local/www/javascript/filter_log.js59
-rw-r--r--usr/local/www/widgets/widgets/log.widget.php70
4 files changed, 137 insertions, 80 deletions
diff --git a/usr/local/www/css/table.css b/usr/local/www/css/table.css
index 29ae503..3393db3 100644
--- a/usr/local/www/css/table.css
+++ b/usr/local/www/css/table.css
@@ -40,3 +40,7 @@ if theme changes are needed include a table.css in the /themes/yourtheme/ */
border-left: none;
border-bottom: 2px solid #999999;
}
+.ellipsis {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
diff --git a/usr/local/www/diag_logs_filter_dynamic.php b/usr/local/www/diag_logs_filter_dynamic.php
index 763a7b8..f1b714c 100755
--- a/usr/local/www/diag_logs_filter_dynamic.php
+++ b/usr/local/www/diag_logs_filter_dynamic.php
@@ -81,13 +81,11 @@ include("head.inc");
?>
/* Called by the AJAX updater */
function format_log_line(row) {
- var line = '';
- line = ' <span class="log-action" nowrap>' + row[0] + '</span>';
- line += ' <span class="log-time" nowrap>' + row[1] + '</span>';
- line += ' <span class="log-interface" nowrap>' + row[2] + '</span>';
- line += ' <span class="log-source" nowrap>' + row[3] + '</span>';
- line += ' <span class="log-destination" nowrap>' + row[4] + '</span>';
- line += ' <span class="log-protocol" nowrap>' + row[5] + '</span>';
+ var i = 0;
+ var line = '<td class="listMRlr" nowrap="nowrap" align="center">' + row[i++] + '</td>';
+ while (i < 6) {
+ line += '<td class="listMRr" nowrap="nowrap">' + row[i++] + '</td>';
+ }
return line;
}
</script>
@@ -106,7 +104,6 @@ include("head.inc");
$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("Wireless"), false, "diag_logs_wireless.php");
$tab_array[] = array(gettext("Settings"), false, "diag_logs_settings.php");
display_top_tabs($tab_array);
?>
@@ -114,43 +111,58 @@ include("head.inc");
<tr>
<td>
<div id="mainarea">
- <div class="tabcont">
- <a href="diag_logs_filter.php"><?=gettext("Normal View");?></a> | <?=gettext("Dynamic View");?> | <a href="diag_logs_filter_summary.php"><?=gettext("Summary View");?></a>
- </div>
- <div class="listtopic">
- <?php printf(gettext("Last %s records"),$nentries);?>; <?=gettext("Pause:");?><input valign="middle" type="checkbox" onClick="javascript:toggle_pause();">
- </div>
- <div id="log">
- <div class="log-header">
- <span class="log-action"><?=gettext("Act");?></span>
- <span class="log-time"><?=gettext("Time");?></span>
- <span class="log-interface"><?=gettext("If");?></span>
- <span class="log-source"><?=gettext("Source");?></span>
- <span class="log-destination"><?=gettext("Destination");?></span>
- <span class="log-protocol"><?=gettext("Proto");?></span>
- </div>
- <?php $counter=0; foreach ($filterlog as $filterent): ?>
- <div class="log-entry"<?php echo is_first_row($counter, count($filterlog)); ?>>
- <span class="log-action" nowrap><a href="#" onClick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['act']}"; ?>', outputrule);">
- <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" align="absmiddle" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" /></a></span>
- <span class="log-time" ><?php echo htmlspecialchars($filterent['time']);?></span>
- <span class="log-interface" ><?php echo htmlspecialchars($filterent['interface']);?></span>
- <span class="log-source" ><?php echo htmlspecialchars($filterent['src']);?></span>
- <span class="log-destination" ><?php echo htmlspecialchars($filterent['dst']);?></span>
+ <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
+ <thead>
+ <tr>
+ <td colspan="6" align"left" valign="middle">
+ <a href="diag_logs_filter.php"><?=gettext("Normal View");?></a> | <?=gettext("Dynamic View");?> | <a href="diag_logs_filter_summary.php"><?=gettext("Summary View");?></a>
+ <br/><br/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="6" class="listtopic">
+ <?php printf(gettext("Last %s records"),$nentries);?>; <?=gettext("Pause:");?><input valign="middle" type="checkbox" onClick="javascript:toggle_pause();">
+ </td>
+ </tr>
+ <tr>
+ <td width="10%" class="listhdrr"><?=gettext("Act");?></ td>
+ <td width="10%" class="listhdrr"><?=gettext("Time");?></ td>
+ <td width="15%" class="listhdrr"><?=gettext("If");?></ td>
+ <td width="25%" class="listhdrr"><?=gettext("Source");?></ td>
+ <td width="25%" class="listhdrr"><?=gettext("Destination");?></ td>
+ <td width="15%" class="listhdrr"><?=gettext("Proto");?></ td>
+ </tr>
+ </thead>
+ <tbody id="filter-log-entries">
+ <?php
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr" nowrap="nowrap" align="center">
+ <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['act']}"; ?>', outputrule);">
+ <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" />
+ </a>
+ </td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['time']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['interface']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['src']);?></td>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['dst']);?></td>
<?php
if ($filterent['proto'] == "TCP")
$filterent['proto'] .= ":{$filterent['tcpflags']}";
?>
- <span class="log-protocol" ><?php echo htmlspecialchars($filterent['proto']);?></span>
- </div>
- <?php $counter++; endforeach; ?>
- </div>
+ <td class="listMRr" nowrap="nowrap"><?php echo htmlspecialchars($filterent['proto']);?></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
</div>
</td>
</tr>
</table>
<p><span class="vexpl"><a href="http://doc.pfsense.org/index.php/What_are_TCP_Flags%3F"><?=gettext("TCP Flags"); ?></a>: F - FIN, S - SYN, A or . - ACK, R - RST, P - PSH, U - URG, E - ECE, C - CWR</span></p>
-
<?php include("fend.inc"); ?>
</body>
</html>
diff --git a/usr/local/www/javascript/filter_log.js b/usr/local/www/javascript/filter_log.js
index 49c11a4..43d7d49 100644
--- a/usr/local/www/javascript/filter_log.js
+++ b/usr/local/www/javascript/filter_log.js
@@ -66,7 +66,7 @@ function fetch_new_rules_callback(callback_data) {
new_data_to_add[new_data_to_add.length] = tmp;
}
- update_div_rows(new_data_to_add);
+ update_table_rows(new_data_to_add);
isBusy = false;
}
@@ -80,7 +80,7 @@ function in_arrayi(needle, haystack) {
return false;
}
-function update_div_rows(data) {
+function update_table_rows(data) {
if(isPaused)
return;
@@ -98,26 +98,47 @@ function update_div_rows(data) {
}
data = data.slice(startat, data.length);
- var rows = jQuery('.log-entry-mini');
- if (jQuery(rows).length == 0) {
- rows = jQuery('.log-entry');
- }
+ var rows = jQuery('#filter-log-entries>tr');
+
+ // Number of rows to move by
+ var move = rows.length + data.length - nentries;
+ if (move < 0)
+ move = 0;
+
+ if (isReverse == false) {
+ for (var i = move; i < rows.length; i++) {
+ jQuery(rows[i - move]).html(jQuery(rows[i]).html());
+ }
- for(var x=0; x<data.length; x++) {
- /* if reverse logging is enabled we need to show the
- * records in a reverse order with new items appearing
- * on the top
- */
- if(isReverse == false) {
- for (var i = 1; i < jQuery(rows).length; i++) {
- jQuery(rows[i-1]).html(jQuery(rows[i]).html());
+ var tbody = jQuery('#filter-log-entries');
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = rows.length - move + i;
+ if (rowIndex < rows.length) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).append('<tr>' + data[i] + '</tr>');
}
- } else {
- for (var i = jQuery(rows).length - 1; i > 0; i--) {
- jQuery(rows[i]).html(jQuery(rows[i-1]).html());
+ }
+ } else {
+ for (var i = rows.length - 1; i >= move; i--) {
+ jQuery(rows[i]).html(jQuery(rows[i - move]).html());
+ }
+
+ var tbody = jQuery('#filter-log-entries');
+ for (var i = 0; i < data.length; i++) {
+ var rowIndex = move - 1 - i;
+ if (rowIndex >= 0) {
+ jQuery(rows[rowIndex]).html(data[i]);
+ } else {
+ jQuery(tbody).prepend('<tr>' + data[i] + '</tr>');
}
}
- jQuery('#firstrow').html(data[x]);
+ }
+
+ // Much easier to go through each of the rows once they've all be added.
+ rows = jQuery('#filter-log-entries>tr');
+ for (var i = 0; i < rows.length; i++) {
+ rows[i].className = i % 2 == 0 ? 'listMRodd' : 'listMReven';
}
}
@@ -144,4 +165,4 @@ function toggleListDescriptions(){
}
}
}
-} \ No newline at end of file
+}
diff --git a/usr/local/www/widgets/widgets/log.widget.php b/usr/local/www/widgets/widgets/log.widget.php
index 482e415..61c2acf 100644
--- a/usr/local/www/widgets/widgets/log.widget.php
+++ b/usr/local/www/widgets/widgets/log.widget.php
@@ -104,12 +104,11 @@ else
/* Called by the AJAX updater */
function format_log_line(row) {
- var line = '';
- line = ' <span class="log-action-mini" nowrap>&nbsp;' + row[0] + '&nbsp;</span>';
- line += ' <span class="log-interface-mini" nowrap>' + row[2] + '</span>';
- line += ' <span class="log-source-mini" nowrap>' + row[3] + '</span>';
- line += ' <span class="log-destination-mini" nowrap>' + row[4] + '</span>';
- line += ' <span class="log-protocol-mini" nowrap>' + row[5] + '</span>';
+ var line = '<td class="listMRlr" align="center">' + row[0] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[2] + '">' + row[2] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[3] + '">' + row[3] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[4] + '">' + row[4] + '</td>' +
+ '<td class="listMRr ellipsis" title="' + row[5] + '">' + row[5] + '</td>';
var nentriesacts = "<?php echo $nentriesacts; ?>";
var nentriesinterfaces = "<?php echo $nentriesinterfaces; ?>";
@@ -151,27 +150,48 @@ function format_log_line(row) {
</form>
</div>
-<div class="log-header">
- <span class="log-action-mini-header">Act</span>
- <span class="log-interface-mini-header">IF</span>
- <span class="log-source-mini-header">Source</span>
- <span class="log-destination-mini-header">Destination</span>
- <span class="log-protocol-mini-header">Prot</span>
-</div>
-<?php $counter=0; foreach ($filterlog as $filterent): ?>
-<div class="log-entry-mini" <?php echo is_first_row($counter, count($filterlog)); ?> style="clear:both;">
- <span class="log-action-mini" nowrap>
- &nbsp;<a href="#" onClick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['act']}"; ?>', outputrule);"><img border="0" src="<?php echo find_action_image($filterent['act']);?>" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" /></a>&nbsp;</span>
- <span class="log-interface-mini"><?php echo htmlspecialchars($filterent['interface']);?>&nbsp;</span>
- <span class="log-source-mini"><?php echo htmlspecialchars($filterent['src']);?>&nbsp;</span>
- <span class="log-destination-mini"><?php echo (strlen($filterent['dst']) < 19 ? htmlspecialchars($filterent['dst']) : htmlspecialchars(substr($filterent['dst'],0,18))."..."); ?>&nbsp;</span>
+<table width="100%" border="0" cellpadding="0" cellspacing="0" style="table-layout: fixed;">
+ <colgroup>
+ <col style='width: 8%;' />
+ <col style='width: 10%;' />
+ <col style='width: 35%;' />
+ <col style='width: 35%;' />
+ <col style='width: 12%;' />
+ </colgroup>
+ <thead>
+ <tr>
+ <td class="listhdrr"><?=gettext("Act");?></td>
+ <td class="listhdrr"><?=gettext("IF");?></td>
+ <td class="listhdrr"><?=gettext("Source");?></td>
+ <td class="listhdrr"><?=gettext("Destination");?></td>
+ <td class="listhdrr"><?=gettext("Prot");?></td>
+ </tr>
+ </thead>
+ <tbody id='filter-log-entries'>
<?php
- if ($filterent['proto'] == "TCP")
- $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ $rowIndex = 0;
+ foreach ($filterlog as $filterent):
+ $evenRowClass = $rowIndex % 2 ? " listMReven" : " listMRodd";
+ $rowIndex++;
?>
- <span class="log-protocol-mini"><?php echo htmlspecialchars($filterent['proto']);?>&nbsp;</span>
-</div>
-<?php $counter++; endforeach; ?>
+ <tr class="<?=$evenRowClass?>">
+ <td class="listMRlr" nowrap="nowrap" align="center">
+ <a href="#" onclick="javascript:getURL('diag_logs_filter.php?getrulenum=<?php echo "{$filterent['rulenum']},{$filterent['act']}"; ?>', outputrule);">
+ <img border="0" src="<?php echo find_action_image($filterent['act']);?>" width="11" height="11" alt="<?php echo $filterent['act'];?>" title="<?php echo $filterent['act'];?>" />
+ </a>
+ </td>
+ <td class="listMRr ellipsis" nowrap="nowrap" title="<?php echo htmlspecialchars($filterent['interface']);?>"><?php echo htmlspecialchars($filterent['interface']);?></td>
+ <td class="listMRr ellipsis" nowrap="nowrap" title="<?php echo htmlspecialchars($filterent['src']);?>"><?php echo htmlspecialchars($filterent['src']);?></td>
+ <td class="listMRr ellipsis" nowrap="nowrap" title="<?php echo htmlspecialchars($filterent['dst']);?>"><?php echo htmlspecialchars($filterent['dst']);?></td>
+ <?php
+ if ($filterent['proto'] == "TCP")
+ $filterent['proto'] .= ":{$filterent['tcpflags']}";
+ ?>
+ <td class="listMRr ellipsis" nowrap="nowrap" title="<?php echo htmlspecialchars($filterent['proto']);?>"><?php echo htmlspecialchars($filterent['proto']);?></td>
+ </tr>
+ <?php endforeach; ?>
+ </tbody>
+</table>
<!-- needed to display the widget settings menu -->
<script language="javascript" type="text/javascript">
OpenPOWER on IntegriCloud