%PDF- %PDF-
| Direktori : /backups/router/usr/local/opnsense/mvc/app/views/OPNsense/TrafficShaper/ |
| Current File : //backups/router/usr/local/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt |
{#
#
# Copyright (c) 2014-2016 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.
#}
<style>
.hidden {
display:none;
}
</style>
<script>
$( document ).ready(function() {
/*************************************************************************************************************
* link grid actions
*************************************************************************************************************/
$("#grid-pipes").UIBootgrid(
{ search:'/api/trafficshaper/settings/searchPipes',
get:'/api/trafficshaper/settings/getPipe/',
set:'/api/trafficshaper/settings/setPipe/',
add:'/api/trafficshaper/settings/addPipe/',
del:'/api/trafficshaper/settings/delPipe/',
toggle:'/api/trafficshaper/settings/togglePipe/'
}
);
$("#grid-queues").UIBootgrid(
{ search:'/api/trafficshaper/settings/searchQueues',
get:'/api/trafficshaper/settings/getQueue/',
set:'/api/trafficshaper/settings/setQueue/',
add:'/api/trafficshaper/settings/addQueue/',
del:'/api/trafficshaper/settings/delQueue/',
toggle:'/api/trafficshaper/settings/toggleQueue/'
}
);
$("#grid-rules").UIBootgrid(
{ search:'/api/trafficshaper/settings/searchRules',
get:'/api/trafficshaper/settings/getRule/',
set:'/api/trafficshaper/settings/setRule/',
add:'/api/trafficshaper/settings/addRule/',
del:'/api/trafficshaper/settings/delRule/',
toggle:'/api/trafficshaper/settings/toggleRule/',
options: {
responseHandler: function (response) {
// concatenate fields for not.
if ('rows' in response) {
for (var i = 0; i < response.rowCount; i++) {
response.rows[i]['displaysrc'] = {'not':response.rows[i].source_not == '1',
'val':response.rows[i].source};
response.rows[i]['displaydst'] = {'not':response.rows[i].destination_not == '1',
'val':response.rows[i].destination};
}
}
return response;
}
}
}
);
/*************************************************************************************************************
* Commands
*************************************************************************************************************/
/**
* Reconfigure ipfw / trafficshaper
*/
$("#reconfigureAct").SimpleActionButton();
$("#flushAct").click(function(){
// Ask user if it's ok to flush all of ipfw
BootstrapDialog.show({
type:BootstrapDialog.TYPE_WARNING,
title: '{{ lang._('Flush') }}',
message: "{{ lang._('Are you sure you want to flush and reload all? this might have impact on other services using the same technology underneath (such as Captive portal)') }}",
buttons: [{
label: '{{ lang._('Yes') }}',
action: function(dialogRef){
dialogRef.close();
$("#flushAct_progress").addClass("fa fa-spinner fa-pulse");
ajaxCall("/api/trafficshaper/service/flushreload", {}, function(data,status) {
// when done, disable progress animation.
$("#flushAct_progress").removeClass("fa fa-spinner fa-pulse");
});
}
},{
label: '{{ lang._('No') }}',
action: function(dialogRef){
dialogRef.close();
}
}]
});
});
// update history on tab state and implement navigation
if (window.location.hash != "") {
$('a[href="' + window.location.hash + '"]').click()
}
$('.nav-tabs a').on('shown.bs.tab', function (e) {
history.pushState(null, null, e.target.hash);
});
$(window).on('hashchange', function(e) {
$('a[href="' + window.location.hash + '"]').click()
});
});
</script>
<ul class="nav nav-tabs" data-tabs="tabs" id="maintabs">
<li class="active"><a data-toggle="tab" href="#pipes">{{ lang._('Pipes') }}</a></li>
<li><a data-toggle="tab" href="#queues">{{ lang._('Queues') }}</a></li>
<li><a data-toggle="tab" href="#rules">{{ lang._('Rules') }}</a></li>
</ul>
<div class="tab-content content-box">
<div id="pipes" class="tab-pane fade in active">
<!-- tab page "pipes" -->
<table id="grid-pipes" class="table table-condensed table-hover table-striped table-responsive" data-editDialog="DialogPipe" data-editAlert="shaperChangeMessage">
<thead>
<tr>
<th data-column-id="origin" data-type="string" data-visible="false">{{ lang._('Origin') }}</th>
<th data-column-id="enabled" data-width="6em" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="number" data-type="number" data-visible="false">{{ lang._('Number') }}</th>
<th data-column-id="bandwidth" data-type="number">{{ lang._('Bandwidth') }}</th>
<th data-column-id="bandwidthMetric" data-type="string">{{ lang._('Metric') }}</th>
<!--<th data-column-id="burst" data-type="number">{{ lang._('Burst') }}</th>--> <!-- disabled, burst does not work -->
<th data-column-id="mask" data-type="string">{{ lang._('Mask') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="commands" data-width="7em" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-primary"><span class="fa fa-fw fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-fw fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
</div>
<div id="queues" class="tab-pane fade in">
<!-- tab page "queues" -->
<table id="grid-queues" class="table table-condensed table-hover table-striped table-responsive" data-editDialog="DialogQueue" data-editAlert="shaperChangeMessage">
<thead>
<tr>
<th data-column-id="origin" data-type="string" data-visible="false">{{ lang._('Origin') }}</th>
<th data-column-id="enabled" data-width="6em" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="number" data-type="number" data-visible="false">{{ lang._('Number') }}</th>
<th data-column-id="pipe" data-type="string">{{ lang._('Pipe') }}</th>
<th data-column-id="weight" data-type="string">{{ lang._('Weight') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="commands" data-width="7em" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-primary"><span class="fa fa-fw fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-fw fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
</div>
<div id="rules" class="tab-pane fade in">
<!-- tab page "rules" -->
<table id="grid-rules" class="table table-condensed table-hover table-striped table-responsive" data-editDialog="DialogRule" data-editAlert="shaperChangeMessage">
<thead>
<tr>
<th data-column-id="enabled" data-width="6em" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="sequence" data-width="6em" data-type="number">{{ lang._('#') }}</th>
<th data-column-id="origin" data-type="string" data-visible="false">{{ lang._('Origin') }}</th>
<th data-column-id="interface" data-type="string">{{ lang._('Interface') }}</th>
<th data-column-id="proto" data-type="string">{{ lang._('Protocol') }}</th>
<th data-column-id="displaysrc" data-type="notprefixable">{{ lang._('Source') }}</th>
<th data-column-id="displaydst" data-type="notprefixable">{{ lang._('Destination') }}</th>
<th data-column-id="target" data-type="string">{{ lang._('Target') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="commands" data-width="7em" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr >
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-primary"><span class="fa fa-fw fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-fw fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="col-md-12">
<div id="shaperChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them with the button below') }}
</div>
<hr/>
<button class="btn btn-primary" id="reconfigureAct"
data-endpoint='/api/trafficshaper/service/reconfigure'
data-label="{{ lang._('Apply') }}"
data-error-title="{{ lang._('Error reconfiguring trafficshaper') }}"
type="button"
></button>
<button class="btn btn-primary pull-right" id="flushAct" type="button"><b>{{ lang._('Reset') }}</b> <i id="flushAct_progress" class=""></i></button>
<br/><br/>
</div>
</div>
{# include dialogs #}
{{ partial("layout_partials/base_dialog",['fields':formDialogPipe,'id':'DialogPipe','label':lang._('Edit pipe')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogQueue,'id':'DialogQueue','label':lang._('Edit queue')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogRule,'id':'DialogRule','label':lang._('Edit rule')])}}