%PDF- %PDF-
| Direktori : /backups/router/usr/local/opnsense/mvc/app/views/OPNsense/Diagnostics/ |
| Current File : //backups/router/usr/local/opnsense/mvc/app/views/OPNsense/Diagnostics/fw_pftop.volt |
{#
# Copyright (c) 2021 Deciso B.V.
# 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.
#}
<script>
'use strict';
$( document ).ready(function() {
/*************************************************************************************************************
* link grid actions
*************************************************************************************************************/
let grid_pftop = $("#grid-pftop").UIBootgrid(
{ search:'/api/diagnostics/firewall/query_pf_top',
options:{
formatters:{
rule: function (column, row) {
if (row.label) {
return "<a target=\"_blank\" href=\"/firewall_rule_lookup.php?rid=" + row.label + "\">"+row[column.id]+"</a>";
} else {
return row[column.id];
}
},
direction: function (column, row) {
if (row[column.id] == 'out') {
return "<span class=\"fa fa-arrow-left\" title=\"{{lang._('out')}}\" data-toggle=\"tooltip\"></span>";
} else {
return "<span class=\"fa fa-arrow-right\" title=\"{{lang._('in')}}\" data-toggle=\"tooltip\"></span>";
}
},
address: function (column, row) {
if (row[column.id+"_addr"]) {
let addr_txt = row[column.id+"_addr"];
if (addr_txt.includes(":")) {
addr_txt = addr_txt + ":[" + row[column.id+"_port"] + "]";
} else {
addr_txt = addr_txt + ":" + row[column.id+"_port"];
}
return addr_txt;
}
return "";
}
},
requestHandler:function(request){
if ($("#ruleid").val() != "") {
request['ruleid'] = $("#ruleid").val();
}
return request;
},
}
}
);
grid_pftop.on('loaded.rs.jquery.bootgrid', function() {
$('[data-toggle="tooltip"]').tooltip();
});
// collect rule id's
ajaxGet("/api/diagnostics/firewall/list_rule_ids", {}, function(data, status){
if (data.items) {
for (let i=0; i < data.items.length ; ++i) {
$("#ruleid").append($("<option/>").val(data.items[i]['id']).text(data.items[i]['descr']));
}
$("#service_status_container").append($("#ruleid"));
$("#ruleid").selectpicker();
$("#ruleid").show();
$("#ruleid").change(function(){
$("#grid-pftop").bootgrid("reload");
});
let init_state = window.location.hash.substr(1);
if (init_state) {
$("#ruleid").val(init_state);
$("#ruleid").change();
}
}
});
});
</script>
<select id="ruleid" data-size="5" data-live-search="true" style="display:none">
<option value="">{{ lang._("Select rule") }}</option>
</select>
<div class="tab-content content-box">
<table id="grid-pftop" class="table table-condensed table-hover table-striped table-responsive" data-editDialog="DialogEdit">
<thead>
<tr>
<th data-column-id="dir" data-type="string" data-width="4em" data-formatter="direction">{{ lang._('Dir') }}</th>
<th data-column-id="proto" data-type="string" data-width="6em">{{ lang._('Proto') }}</th>
<th data-column-id="src" data-type="string" data-formatter="address" data-sortable="false">{{ lang._('Source') }}</th>
<th data-column-id="gw" data-type="string" data-formatter="address" data-sortable="false">{{ lang._('Gateway') }}</th>
<th data-column-id="dst" data-type="string" data-formatter="address" data-sortable="false">{{ lang._('Destination') }}</th>
<th data-column-id="state" data-type="string">{{ lang._('State') }}</th>
<th data-column-id="age" data-type="numeric">{{ lang._('Age (sec)') }}</th>
<th data-column-id="expire" data-type="numeric">{{ lang._('Expires (sec)') }}</th>
<th data-column-id="pkts" data-type="numeric" data-formatter="bytes">{{ lang._('Pkts') }}</th>
<th data-column-id="bytes" data-type="numeric" data-formatter="bytes">{{ lang._('Bytes') }}</th>
<th data-column-id="avg" data-type="numeric" data-visible="false">{{ lang._('Avg') }}</th>
<th data-column-id="descr" data-type="string" data-formatter="rule">{{ lang._('Rule') }}</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>