diff --git a/Netdisco/Changes b/Netdisco/Changes index 1ff39208..f88e712a 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -1,5 +1,9 @@ 2.028014 + [ENHANCEMENTS] + + * [#108] Port Bounce port control feature (down and up in succession) + [BUG FIXES] * Missing action to netdisco-do should not throw Perl error diff --git a/Netdisco/lib/App/Netdisco/Daemon/Worker/Interactive/PortActions.pm b/Netdisco/lib/App/Netdisco/Daemon/Worker/Interactive/PortActions.pm index 917851a1..7adf941c 100644 --- a/Netdisco/lib/App/Netdisco/Daemon/Worker/Interactive/PortActions.pm +++ b/Netdisco/lib/App/Netdisco/Daemon/Worker/Interactive/PortActions.pm @@ -27,7 +27,16 @@ sub set_portcontrol { (my $sa = $job->subaction) =~ s/-\w+//; $job->subaction($sa); - return _set_port_generic($job, 'up_admin'); + if ($sa eq 'bounce') { + $job->subaction('down'); + my @stat = _set_port_generic($job, 'up_admin'); + return @stat if $stat[0] ne 'done'; + $job->subaction('up'); + return _set_port_generic($job, 'up_admin'); + } + else { + return _set_port_generic($job, 'up_admin'); + } } sub set_vlan { diff --git a/Netdisco/share/public/javascripts/netdisco_portcontrol.js b/Netdisco/share/public/javascripts/netdisco_portcontrol.js index e05eca43..edbd15e5 100644 --- a/Netdisco/share/public/javascripts/netdisco_portcontrol.js +++ b/Netdisco/share/public/javascripts/netdisco_portcontrol.js @@ -22,7 +22,7 @@ function port_control (e) { device: td.data('for-device') ,port: td.data('for-port') ,field: td.data('field') - ,action: td.data('action') + ,action: ($(e).data('action') || td.data('action')) ,value: td.text().trim() ,reason: reason ,log: logmessage @@ -30,31 +30,35 @@ function port_control (e) { ,success: function() { toastr.info('Submitted change request'); - // update all the screen furniture for port up/down control - if ($.trim(td.data('action')) == 'down') { - td.prev('td').html(''); - $(e).toggleClass('icon-hand-down'); - $(e).toggleClass('icon-hand-up'); - $(e).data('tooltip').options.title = 'Click to Enable'; - td.data('action', 'up'); - } - else if ($.trim(td.data('action')) == 'up') { - td.prev('td').html(''); - $(e).toggleClass('icon-hand-up'); - $(e).toggleClass('icon-hand-down'); - $(e).data('tooltip').options.title = 'Click to Disable'; - td.data('action', 'down'); - } - else if ($.trim(td.data('action')) == 'false') { - $(e).next('span').text(''); - $(e).toggleClass('nd_power-on'); - $(e).data('tooltip').options.title = 'Click to Enable'; - td.data('action', 'true'); - } - else if ($.trim(td.data('action')) == 'true') { - $(e).toggleClass('nd_power-on'); - $(e).data('tooltip').options.title = 'Click to Disable'; - td.data('action', 'false'); + // update all the screen furniture unless bouncing + if (! $(e).hasClass('icon-bullseye')) { + if ($.trim(td.data('action')) == 'down') { + td.prev('td').html(''); + $(e).toggleClass('icon-hand-down'); + $(e).toggleClass('icon-hand-up'); + $(e).siblings('.icon-bullseye').hide(); + $(e).data('tooltip').options.title = 'Enable Port'; + td.data('action', 'up'); + } + else if ($.trim(td.data('action')) == 'up') { + td.prev('td').html(''); + $(e).toggleClass('icon-hand-up'); + $(e).toggleClass('icon-hand-down'); + $(e).siblings('.icon-bullseye').show(); + $(e).data('tooltip').options.title = 'Disable Port'; + td.data('action', 'down'); + } + else if ($.trim(td.data('action')) == 'false') { + $(e).next('span').text(''); + $(e).toggleClass('nd_power-on'); + $(e).data('tooltip').options.title = 'Enable Power'; + td.data('action', 'true'); + } + else if ($.trim(td.data('action')) == 'true') { + $(e).toggleClass('nd_power-on'); + $(e).data('tooltip').options.title = 'Disable Power'; + td.data('action', 'false'); + } } } ,error: function() { @@ -118,7 +122,7 @@ $(document).ready(function() { }); // activity for port up/down control, power enable/disable control - $('#ports_pane').on('click', '.icon-hand-up,.icon-hand-down,.nd_power-icon', function() { + $('#ports_pane').on('click', '.icon-hand-up,.icon-hand-down,.nd_power-icon,.icon-bullseye', function() { var clicked = this; // create a closure $('#nd_portlog').one('hidden', function() { port_control(clicked); // save diff --git a/Netdisco/share/views/ajax/device/ports.tt b/Netdisco/share/views/ajax/device/ports.tt index c9053b28..b5a255cc 100644 --- a/Netdisco/share/views/ajax/device/ports.tt +++ b/Netdisco/share/views/ajax/device/ports.tt @@ -62,16 +62,26 @@