#1064 display device and device port tags in web ui

This commit is contained in:
Oliver Gorwits
2023-07-19 13:01:51 +01:00
parent 4b99f0bb9c
commit 04ee1e1613
6 changed files with 52 additions and 19 deletions

View File

@@ -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 };
};

View File

@@ -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;

View File

@@ -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: []

View File

@@ -79,6 +79,14 @@
<td>Description</td>
<td>[% d.description | html_entity | html_line_break %]</td>
</tr>
<tr>
<td>Tags</td>
<td>
[% FOREACH t IN filtered_tags %]
<span class="badge badge-success">[% t | html_entity %]</span>
[% END %]
</td>
</tr>
[% IF settings._extra_device_details.size %]
[% FOREACH config IN settings._extra_device_details %]
<tr>

View File

@@ -145,6 +145,14 @@
</td>
[% END %]
[% IF params.c_tags %]
<td>
[% FOREACH t IN row.filtered_tags.sort %]
<span class="badge badge-success">[% t | html_entity %]</span>
[% END %]
</td>
[% END %]
[% FOREACH config IN settings._extra_device_port_cols %]
[% NEXT UNLESS config.position == 'left' AND params.${config.name} %]

View File

@@ -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 %]