diff --git a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt
index 67725ebfa..dc54229cf 100644
--- a/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt
+++ b/src/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_log.volt
@@ -97,6 +97,11 @@ POSSIBILITY OF SUCH DAMAGE.
while ((record = data.pop()) != null) {
if (record['__digest__'] != last_digest) {
var log_tr = $("
");
+ if (record.interface !== undefined && interface_descriptions[record.interface] !== undefined) {
+ record['interface_name'] = interface_descriptions[record.interface];
+ } else {
+ record['interface_name'] = record.interface;
+ }
log_tr.data('details', record);
log_tr.hide();
$.each(record_spec, function(idx, field){
@@ -110,13 +115,6 @@ POSSIBILITY OF SUCH DAMAGE.
log_td.html(''+record[column_name]+'');
}
break;
- case 'interface':
- if (interface_descriptions[record[column_name]] != undefined) {
- log_td.text(interface_descriptions[record[column_name]]);
- } else {
- log_td.text(record[column_name]);
- }
- break;
case 'address':
log_td.text(record[column_name]);
log_td.addClass('address');
@@ -151,7 +149,7 @@ POSSIBILITY OF SUCH DAMAGE.
}
}
// apply filter after load
- $("#filter").keyup();
+ apply_filter();
// limit output, try to keep max X records on screen.
var tr_count = 0;
@@ -256,21 +254,69 @@ POSSIBILITY OF SUCH DAMAGE.
}
// live filter
- $("#filter").keyup(function(){
- var search_str = $(this).val().toLowerCase();
+ function apply_filter()
+ {
+ let filters = [];
+ $("#filters > span.badge").each(function(){
+ filters.push($(this).data('filter'));
+ });
$("#grid-log > tbody > tr").each(function(){
- var selected_tr = $(this);
- var visible_text = $(this).text().toLowerCase();
- try {
- if (visible_text.match(search_str)) {
- selected_tr.show();
- } else {
- selected_tr.hide();
+ let selected_tr = $(this);
+ let this_data = $(this).data('details');
+ if (this_data === undefined) {
+ return;
+ }
+ let is_matched = true;
+ for (let i=0; i < filters.length; i++) {
+ let filter_tag = filters[i].tag;
+ let filter_value = filters[i].value.toLowerCase();
+ let filter_condition = filters[i].condition;
+ if (this_data[filter_tag] === undefined) {
+ is_matched = false;
+ break;
+ } else if (filter_condition === '=' && this_data[filter_tag].toLowerCase() != filter_value) {
+ is_matched = false;
+ break;
+ } else if (filter_condition === '~' && !this_data[filter_tag].toLowerCase().match(filter_value)) {
+ is_matched = false;
+ break;
}
- } catch(e) {
- // ignore regexp errors
+ }
+ if (is_matched) {
+ selected_tr.show();
+ } else {
+ selected_tr.hide();
}
});
+ }
+
+ $("#add_filter_condition").click(function(){
+ if ($("#filter_value").val() === "") {
+ return;
+ }
+ let $new_filter = $("").addClass("badge");
+ $new_filter.data('filter', {
+ tag:$("#filter_tag").val(),
+ condition:$("#filter_condition").val(),
+ value:$("#filter_value").val(),
+ }
+ );
+ $new_filter.text($("#filter_tag").val() + $("#filter_condition").val() + $("#filter_value").val());
+ $new_filter.click(function(){
+ $("#filter_tag").val($(this).data('filter').tag);
+ $("#filter_condition").val($(this).data('filter').condition);
+ $("#filter_value").val($(this).data('filter').value);
+ $(this).remove();
+ if ($("#filters > span.badge").length == 0) {
+ $("#filters_help").hide();
+ }
+ $('.selectpicker').selectpicker('refresh');
+ apply_filter();
+ });
+ $("#filters").append($new_filter);
+ $("#filter_value").val("");
+ $("#filters_help").show();
+ apply_filter();
});
// reset log content on limit change, forces a reload
@@ -320,30 +366,78 @@ POSSIBILITY OF SUCH DAMAGE.
-
-
+
-
@@ -353,7 +447,7 @@ POSSIBILITY OF SUCH DAMAGE.
| {{ lang._('Hash') }} |
|
- {{ lang._('Interface') }} |
+ {{ lang._('Interface') }} |
|
{{ lang._('Time') }} |
{{ lang._('Source') }} |