diff --git a/lib/App/Netdisco/Web/Plugin/Device/Details.pm b/lib/App/Netdisco/Web/Plugin/Device/Details.pm index 364b55a0..78890fb6 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Details.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Details.pm @@ -7,6 +7,8 @@ use Dancer::Plugin::Auth::Extensible; use App::Netdisco::Web::Plugin; +use List::MoreUtils 'singleton'; + register_device_tab({ tag => 'details', label => 'Details' }); # device details table @@ -40,10 +42,14 @@ ajax '/ajax/content/device/details' => require_login sub { ], })->order_by('pos')->get_column('serial')->all; + # filter the tags by hide_tags setting + my @hide = @{ setting('hide_tags')->{'device'} }; + content_type('text/html'); template 'ajax/device/details.tt', { d => $results[0], p => \@power, interfaces => \@interfaces, + filtered_tags => [ singleton (@{ $device->tags || [] }, @hide, @hide) ], serials => [sort keys %{ { map {($_ => $_)} (@serials, ($device->serial ? $device->serial : ())) } }], }, { layout => undef }; }; diff --git a/lib/App/Netdisco/Web/Plugin/Device/Ports.pm b/lib/App/Netdisco/Web/Plugin/Device/Ports.pm index 65b54202..24f47fe6 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Ports.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Ports.pm @@ -9,6 +9,8 @@ use App::Netdisco::Util::Port 'port_reconfig_check'; use App::Netdisco::Util::Web (); # for sort_port use App::Netdisco::Web::Plugin; +use List::MoreUtils 'singleton'; + register_device_tab({ tag => 'ports', label => 'Ports', provides_csv => 1 }); # device ports with a description (er, name) matching @@ -254,6 +256,10 @@ get '/ajax/content/device/ports' => require_login sub { map {$_->{portctl} = (port_reconfig_check($_, $device, logged_in_user) ? false : true)} @results; } + # filter the tags by hide_tags setting + my @hide = @{ setting('hide_tags')->{'device_port'} }; + map { $_->{filtered_tags} = [ singleton (@{ $_->tags || [] }, @hide, @hide) ] } @results; + # empty set would be a 'no records' msg return unless scalar @results; diff --git a/share/config.yml b/share/config.yml index 67a83b67..bd87cef4 100644 --- a/share/config.yml +++ b/share/config.yml @@ -124,22 +124,23 @@ sidebar_defaults: c_ifindex: { label: 'Interface Index', default: null, idx: 5 } c_lastchange: { label: 'Last Change', default: null, idx: 6 } c_name: { label: 'Name', default: checked, idx: 7 } - c_speed_admin: { label: 'Speed (configured)', default: null, idx: 8 } - c_speed: { label: 'Speed (running)', default: null, idx: 9 } - c_duplex_admin: { label: 'Duplex (configured)', default: null, idx: 10 } - c_duplex: { label: 'Duplex (running)', default: null, idx: 11 } - c_error: { label: 'Error Message', default: null, idx: 12 } - c_mac: { label: 'Port MAC', default: null, idx: 13 } - c_mtu: { label: 'MTU', default: null, idx: 14 } - c_pvid: { label: 'Native VLAN', default: checked, idx: 15 } - c_vmember: { label: 'VLAN Membership', default: checked, idx: 16 } - c_power: { label: 'PoE', default: null, idx: 17 } - c_ssid: { label: 'SSID', default: null, idx: 18 } - c_nac_summary: { label: 'NAC/802.1X Status', default: null, idx: 19 } - c_nodes: { label: 'Connected Nodes', default: null, idx: 20 } - c_neighbors: { label: 'Connected Devices', default: checked, idx: 21 } - c_stp: { label: 'Spanning Tree', default: null, idx: 22 } - c_up: { label: 'Up/Down Status', default: null, idx: 23 } + c_tags: { label: 'Tags', default: null, idx: 8 } + c_speed_admin: { label: 'Speed (configured)', default: null, idx: 9 } + c_speed: { label: 'Speed (running)', default: null, idx: 10 } + c_duplex_admin: { label: 'Duplex (configured)', default: null, idx: 11 } + c_duplex: { label: 'Duplex (running)', default: null, idx: 12 } + c_error: { label: 'Error Message', default: null, idx: 13 } + c_mac: { label: 'Port MAC', default: null, idx: 14 } + c_mtu: { label: 'MTU', default: null, idx: 15 } + c_pvid: { label: 'Native VLAN', default: checked, idx: 16 } + c_vmember: { label: 'VLAN Membership', default: checked, idx: 17 } + c_power: { label: 'PoE', default: null, idx: 18 } + c_ssid: { label: 'SSID', default: null, idx: 19 } + c_nac_summary: { label: 'NAC/802.1X Status', default: null, idx: 20 } + c_nodes: { label: 'Connected Nodes', default: null, idx: 21 } + c_neighbors: { label: 'Connected Devices', default: checked, idx: 22 } + c_stp: { label: 'Spanning Tree', default: null, idx: 23 } + c_up: { label: 'Up/Down Status', default: null, idx: 24 } mac_format: { default: IEEE } n_inventory: { label: 'Remote Inventory', default: checked, idx: 0 } n_detailed_inventory: { label: 'Remote Advertisement', default: null, idx: 1 } @@ -167,9 +168,9 @@ sidebar_defaults: report_portutilization: age_num: { default: 3 } age_unit: { default: months } -device_port_col_idx_left: 7 -device_port_col_idx_mid: 19 -device_port_col_idx_right: 23 +device_port_col_idx_left: 8 +device_port_col_idx_mid: 20 +device_port_col_idx_right: 24 jobqueue_refresh: 10 safe_password_store: true reports: [] diff --git a/share/views/ajax/device/details.tt b/share/views/ajax/device/details.tt index 0c9597aa..4c61a2af 100644 --- a/share/views/ajax/device/details.tt +++ b/share/views/ajax/device/details.tt @@ -79,6 +79,14 @@ Description [% d.description | html_entity | html_line_break %] + + Tags + + [% FOREACH t IN filtered_tags %] + [% t | html_entity %] + [% END %] + + [% IF settings._extra_device_details.size %] [% FOREACH config IN settings._extra_device_details %] diff --git a/share/views/ajax/device/ports.tt b/share/views/ajax/device/ports.tt index c0e5a161..21cc5513 100644 --- a/share/views/ajax/device/ports.tt +++ b/share/views/ajax/device/ports.tt @@ -145,6 +145,14 @@ [% END %] + [% IF params.c_tags %] + + [% FOREACH t IN row.filtered_tags.sort %] + [% t | html_entity %] + [% END %] + + [% END %] + [% FOREACH config IN settings._extra_device_port_cols %] [% NEXT UNLESS config.position == 'left' AND params.${config.name} %] diff --git a/share/views/ajax/device/ports_csv.tt b/share/views/ajax/device/ports_csv.tt index 1e36e298..189b222b 100644 --- a/share/views/ajax/device/ports_csv.tt +++ b/share/views/ajax/device/ports_csv.tt @@ -67,6 +67,10 @@ [% myport.push(row.name) %] [% END %] + [% IF params.c_tags %] + [% myport.push(row.filtered_tags.join(':')) %] + [% END %] + [% FOREACH config IN settings._extra_device_port_cols %] [% NEXT UNLESS config.position == 'left' AND params.${config.name} %] [% TRY %]