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') }}