Files
Tony Murray 323f0ea8b5 Fix removing all port groups (#14253)
* Fix removing all port groups

* Make backend work in the situation where this endpoint is used for more than just this setting change
change event is called multiple times when select2 is cleared (once for each item)
prevent duplicate backend calls
Remove no default Port Group item
2022-08-28 20:57:16 -05:00

268 lines
12 KiB
PHP

</form>
<span id="message"></span>
<form id='ignoreport' name='ignoreport' method='post' action='' role='form' class='form-inline'>
<?php echo csrf_field() ?>
<input type='hidden' name='ignoreport' value='yes'>
<input type='hidden' name='type' value='update-ports'>
<input type='hidden' name='device' value='<?php echo $device['device_id']; ?>'>
<div class='table-responsive'>
<table id='edit-ports' class='table table-striped'>
<thead>
<tr>
<th data-column-id='ifIndex'>Index</th>
<th data-column-id='ifName'>Name</th>
<th data-column-id='ifAdminStatus'>Admin</th>
<th data-column-id='ifOperStatus'>Operational</th>
<th data-column-id='disabled' data-sortable='false'>Disable polling</th>
<th data-column-id='ignore' data-sortable='false'>Ignore alert tag</th>
<th data-column-id='ifSpeed'>ifSpeed (bits/s)</th>
<th data-column-id='portGroup' data-sortable='false' data-searchable='false'>Port Group</th>
<th data-column-id='port_tune' data-sortable='false' data-searchable='false'>RRD Tune</th>
<th data-column-id='ifAlias'>Description</th>
</tr>
</thead>
</table>
</div>
</form>
<script>
//$("[name='override_config']").bootstrapSwitch('offColor','danger');
$(document).on('blur', "[name='if-alias']", function (){
var $this = $(this);
var descr = $this.val();
var device_id = $this.data('device_id');
var port_id = $this.data('port_id');
var ifName = $this.data('ifname');
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: {type: "update-ifalias", descr: descr, ifName: ifName, port_id: port_id, device_id: device_id},
dataType: "json",
success: function (data) {
if (data.status == 'ok') {
$this.closest('.form-group').addClass('has-success');
$this.next().addClass('fa-check');
setTimeout(function(){
$this.closest('.form-group').removeClass('has-success');
$this.next().removeClass('fa-check');
}, 2000);
} else if (data.status == 'na') {
} else {
$(this).closest('.form-group').addClass('has-error');
$this.next().addClass('fa-times');
setTimeout(function(){
$this.closest('.form-group').removeClass('has-error');
$this.next().removeClass('fa-times');
}, 2000);
}
},
error: function () {
$(this).closest('.form-group').addClass('has-error');
$this.next().addClass('fa-times');
setTimeout(function(){
$this.closest('.form-group').removeClass('has-error');
$this.next().removeClass('fa-times');
}, 2000);
}
});
});
$(document).on('blur keyup', "[name='if-speed']", function (e){
if (e.type === 'keyup' && e.keyCode !== 13) return;
var $this = $(this);
var speed = $this.val().replace(/[^0-9]/gi, '');
var port_id = $this.data('port_id');
$.ajax({
type: 'POST',
url: 'ajax_form.php',
data: {type: "update-ifspeed", speed: speed, port_id: port_id},
dataType: "json",
success: function (data) {
if (data.status == 'ok') {
$this.closest('.form-group').addClass('has-success');
$this.next().addClass('fa-check');
$this.val(speed);
setTimeout(function(){
$this.closest('.form-group').removeClass('has-success');
$this.next().removeClass('fa-check');
}, 2000);
} else if (data.status == 'na') {
} else {
$(this).closest('.form-group').addClass('has-error');
$this.next().addClass('fa-times');
setTimeout(function(){
$this.closest('.form-group').removeClass('has-error');
$this.next().removeClass('fa-times');
}, 2000);
}
},
error: function () {
$(this).closest('.form-group').addClass('has-error');
$this.next().addClass('fa-times');
setTimeout(function(){
$this.closest('.form-group').removeClass('has-error');
$this.next().removeClass('fa-times');
}, 2000);
}
});
});
$(document).ready(function() {
$('#disable-toggle').on("click", function (event) {
// invert selection on all disable buttons
event.preventDefault();
$('input[name^="disabled_"]').trigger('click');
});
$('#ignore-toggle').on("click", function (event) {
// invert selection on all ignore buttons
event.preventDefault();
$('input[name^="ignore_"]').trigger('click');
});
$('#disable-select').on("click", function (event) {
// select all disable buttons
event.preventDefault();
$('.disable-check').bootstrapSwitch('state', true);
});
$('#ignore-select').on("click", function (event) {
// select all ignore buttons
event.preventDefault();
$('.ignore-check').bootstrapSwitch('state', true);
});
$('#down-select').on("click", function (event) {
// select ignore buttons for all ports which are down
event.preventDefault();
$('[id^="operstatus_"]').each(function () {
var name = $(this).attr('id');
var text = $(this).text();
if (name && text === 'down') {
// get the interface number from the object name
var port_id = name.split('_')[1];
// find its corresponding checkbox and enable it
$('input[name="ignore_' + port_id + '"]').bootstrapSwitch('state', true);
}
});
});
$('#alerted-toggle').on("click", function (event) {
// toggle ignore buttons for all ports which are in class red
event.preventDefault();
$('.red').each(function () {
var name = $(this).attr('id');
if (name) {
// get the interface number from the object name
var port_id = name.split('_')[1];
// find its corresponding checkbox and enable it
$('input[name="ignore_' + port_id + '"]').bootstrapSwitch('state', true);
}
});
});
$('#form-reset').on("click", function (event) {
// reset objects in the form to their previous values
event.preventDefault();
$('#ignoreport')[0].reset();
});
$('#save-form').on("click", function (event) {
// reset objects in the form to their previous values
event.preventDefault();
$.ajax({
type: "POST",
url: "ajax_form.php",
data: $('form#ignoreport').serialize(),
dataType: "json",
success: function(data){
if (data.status == 'ok') {
$("#message").html('<div class="alert alert-info">' + data.message + '</div>')
} else {
$("#message").html('<div class="alert alert-danger">' + data.message + '</div>');
}
},
error: function(){
$("#message").html('<div class="alert alert-danger">Error creating config item</div>');
}
});
});
$('form#ignoreport').on("submit", function (event) {
event.preventDefault();
});
});
var grid = $("#edit-ports").bootgrid({
ajax: true,
rowCount: [50, 100, 250, -1],
templates: {
header: '<div id="{{ctx.id}}" class="{{css.header}}"><div class="row">\
<div class="col-sm-8 actionBar header_actions">\
<span class="pull-left">\
<span class="action_group">Disable polling\
<button type="submit" value="Toggle" class="btn btn-default btn-sm" id="disable-toggle" title="Toggle polling for all ports">Toggle</button>\
<button type="submit" value="Select" class="btn btn-default btn-sm" id="disable-select" title="Disable polling on all ports">Disable All</button>\
</span>\
<span class="action_group">Ignore alerts\
<button type="submit" value="Alerted" class="btn btn-default btn-sm" id="alerted-toggle" title="Toggle alerting on all currently-alerted ports">Alerted</button>\
<button type="submit" value="Down" class="btn btn-default btn-sm" id="down-select" title="Disable alerting on all currently-down ports">Down</button>\
<button type="submit" value="Toggle" class="btn btn-default btn-sm" id="ignore-toggle" title="Toggle alert tag for all ports">Toggle</button>\
<button type="submit" value="Select" class="btn btn-default btn-sm" id="ignore-select" title="Disable alert tag on all ports">Ignore All</button></span>\
</span>\
<span class="action_group">\
<button id="save-form" type="submit" value="Save" class="btn btn-success btn-sm" title="Save current port disable/ignore settings">Save Toggles</button>\
<button type="submit" value="Reset" class="btn btn-danger btn-sm" id="form-reset" title="Reset form to previously-saved settings">Reset</button>\
</span>\
</span>\
</div>\
<div class="col-sm-4 actionBar"><p class="{{css.search}}"></p><p class="{{css.actions}}"></p></div>\
</div></div>'
},
post: function ()
{
return {
device_id: "<?php echo $device['device_id']; ?>"
};
},
url: "<?php echo url('/ajax/table/edit-ports/'); ?>"
}).on("loaded.rs.jquery.bootgrid", function() {
$("[type='checkbox']").bootstrapSwitch();
$("[name='override_config']").bootstrapSwitch('offColor','danger');
$('input[name="override_config"]').on('switchChange.bootstrapSwitch', function(event, state) {
override_config(event,state,$(this));
});
init_select2('.port_group_select', 'port-group', {}, null, 'No Group');
var last_port_group_change;
$('.port_group_select').on('change', function (e) {
var $target = $(e.target);
var port_id = $target.data('port_id');
var groups = JSON.stringify({"groups": $target.val()});
console.log(last_port_group_change, (port_id + groups));
// don't send the same update multiple times... silly select2
if (last_port_group_change === (port_id + groups)) {
return;
}
last_port_group_change = port_id + groups;
$.ajax({
type: "PUT",
url: "<?php echo url('port'); ?>/" + port_id,
data: groups,
success: function(data) {
toastr.success(data.message)
},
error: function(data) {
toastr.error(data.responseJSON.message)
}
});
});
});
</script>
<style>
.header_actions {
text-align: left !important;
}
.action_group {
margin-right: 20px;
white-space: nowrap;
}
</style>