%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/ping.volt |
{# # Copyright (c) 2023 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> $( document ).ready(function() { var data_get_map = {'frm_PingSettings':"/api/diagnostics/ping/get"}; mapDataToFormUI(data_get_map).done(function(data){ formatTokenizersUI(); $('.selectpicker').selectpicker('refresh'); }); let grid_jobs = $("#grid-jobs").UIBootgrid({ search:'/api/diagnostics/ping/search_jobs', options:{ formatters: { "commands": function (column, row) { let btns = []; btns.push('<button type="button" data-toggle="tooltip" class="btn btn-xs btn-default command-remove" title="{{ lang._('remove') }}" data-row-id="' + row.id + '"><span class="fa fa-fw fa-remove"></span></button> '); if (row.status === 'stopped') { btns.push('<button type="button" data-toggle="tooltip" class="btn btn-xs btn-default command-start" title="{{ lang._('(re)start') }}" data-row-id="' + row.id + '"><span class="fa fa-fw fa-play"></span></button> '); } else if (row.status === 'running') { btns.push('<button type="button" data-toggle="tooltip" class="btn btn-xs btn-default command-stop" title="{{ lang._('stop') }}" data-row-id="' + row.id + '"><span class="fa fa-fw fa-stop"></span></button> '); } return btns.join(""); }, "status": function (column, row) { if (row.status == 'running') { return '<i class="fa fa-fw fa-spinner fa-pulse"></i>'; } else { return '<i class="fa fa-fw fa-stop-circle-o"></i>'; } } } } }); grid_jobs.on('loaded.rs.jquery.bootgrid', function() { $('[data-toggle="tooltip"]').tooltip(); $(".command-start").click(function(){ let id = $(this).data('row-id'); ajaxCall("/api/diagnostics/ping/start/" + id, {}, function(){ $("#grid-jobs").bootgrid("reload"); }); }); $(".command-stop").click(function(){ let id = $(this).data('row-id'); ajaxCall("/api/diagnostics/ping/stop/" + id, {}, function(){ $("#grid-jobs").bootgrid("reload"); }); }); $(".command-remove").click(function(){ let id = $(this).data('row-id'); ajaxCall("/api/diagnostics/ping/remove/" + id, {}, function(){ $("#grid-jobs").bootgrid("reload"); }); }); }); $("#btn_start_new").click(function () { if (!$("#frm_PingSettings_progress").hasClass("fa-spinner")) { $("#frm_PingSettings_progress").addClass("fa fa-spinner fa-pulse"); let callb = function (data) { $("#frm_PingSettings_progress").removeClass("fa fa-spinner fa-pulse"); if (data.result && data.result === 'ok') { ajaxCall("/api/diagnostics/ping/start/" + data.uuid, {}, function(){ $("#ping_jobs_tab").click(); $("#grid-jobs").bootgrid("reload"); }); } } saveFormToEndpoint("/api/diagnostics/ping/set", 'frm_PingSettings', callb, true, callb); } }); }); </script> <ul class="nav nav-tabs" data-tabs="tabs" id="maintabs"> <li class="active"><a data-toggle="tab" href="#ping">{{ lang._('Ping') }}</a></li> <li><a data-toggle="tab" id="ping_jobs_tab" href="#ping_jobs">{{ lang._('Jobs') }}</a></li> </ul> <div class="tab-content content-box"> <div id="ping" class="tab-pane fade in active"> <div id="ping"> {{ partial("layout_partials/base_form",['fields':pingForm,'id':'frm_PingSettings', 'apply_btn_id':'btn_start_new'])}} </div> </div> <div id="ping_jobs" class="tab-pane fade in"> <table id="grid-jobs" class="table table-condensed table-hover table-striped table-responsive"> <thead> <tr> <th data-column-id="status" data-width="2em" data-sortable="false" data-formatter="status"> </th> <th data-column-id="id" data-type="string" data-sortable="false" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th> <th data-column-id="description" data-type="string">{{ lang._('Description') }}</th> <th data-column-id="hostname" data-type="string">{{ lang._('Hostname') }}</th> <th data-column-id="source_address" data-type="string">{{ lang._('Source') }}</th> <th data-column-id="send" data-width="6em" data-type="string">{{ lang._('Send') }}</th> <th data-column-id="received" data-width="6em" data-type="string">{{ lang._('Received') }}</th> <th data-column-id="min" data-width="6em" data-type="string">{{ lang._('Min') }}</th> <th data-column-id="max" data-width="6em" data-type="string">{{ lang._('Max') }}</th> <th data-column-id="avg" data-width="6em" data-type="string">{{ lang._('Avg') }}</th> <th data-column-id="loss" data-width="6em" data-type="string">{{ lang._('loss') }}</th> <th data-column-id="last_error" data-type="string">{{ lang._('Error') }}</th> <th data-column-id="commands" data-width="15em" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th> </tr> </thead> <tbody> </tbody> </table> </div> </div>