diff --git a/MANIFEST b/MANIFEST index 6b1c8640..338458ca 100644 --- a/MANIFEST +++ b/MANIFEST @@ -151,6 +151,7 @@ lib/App/Netdisco/Web/Plugin/Device/Details.pm lib/App/Netdisco/Web/Plugin/Device/Modules.pm lib/App/Netdisco/Web/Plugin/Device/Neighbors.pm lib/App/Netdisco/Web/Plugin/Device/Ports.pm +lib/App/Netdisco/Web/Plugin/Device/Vlans.pm lib/App/Netdisco/Web/Plugin/Inventory.pm lib/App/Netdisco/Web/Plugin/Report/ApChannelDist.pm lib/App/Netdisco/Web/Plugin/Report/ApClients.pm @@ -391,6 +392,8 @@ share/views/ajax/device/modules.tt share/views/ajax/device/netmap.tt share/views/ajax/device/ports.tt share/views/ajax/device/ports_csv.tt +share/views/ajax/device/vlans.tt +share/views/ajax/device/vlans_csv.tt share/views/ajax/report/apchanneldist.tt share/views/ajax/report/apchanneldist_csv.tt share/views/ajax/report/apclients.tt diff --git a/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm b/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm new file mode 100644 index 00000000..b5d504a9 --- /dev/null +++ b/lib/App/Netdisco/Web/Plugin/Device/Vlans.pm @@ -0,0 +1,36 @@ +package App::Netdisco::Web::Plugin::Device::Vlans; + +use strict; +use warnings; + +use Dancer ':syntax'; +use Dancer::Plugin::Ajax; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_device_tab({ tag => 'vlans', label => 'VLANs', provides_csv => 1 }); + +get '/ajax/content/device/vlans' => require_login sub { + my $q = param('q'); + + my $device = schema('netdisco')->resultset('Device') + ->search_for_device($q) or send_error('Bad device', 400); + my @results = $device->vlans->search( {}, { order_by => 'vlan' } )->hri->all; + + return unless scalar @results; + + if (request->is_ajax) { + my $json = to_json( \@results ); + template 'ajax/device/vlans.tt', { results => $json }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/device/vlans_csv.tt', { results => \@results }, + { layout => undef }; + } +}; + +true; diff --git a/share/config.yml b/share/config.yml index 24444fd4..be6950f2 100644 --- a/share/config.yml +++ b/share/config.yml @@ -87,6 +87,7 @@ web_plugins: - Device::Modules - Device::Neighbors - Device::Addresses + - Device::Vlans extra_web_plugins: [] sidebar_defaults: search_node: diff --git a/share/views/ajax/device/vlans.tt b/share/views/ajax/device/vlans.tt new file mode 100644 index 00000000..aa8f795f --- /dev/null +++ b/share/views/ajax/device/vlans.tt @@ -0,0 +1,31 @@ + + + + + + + +
VLAN IDVLAN Name
+ + diff --git a/share/views/ajax/device/vlans_csv.tt b/share/views/ajax/device/vlans_csv.tt new file mode 100644 index 00000000..51bb160c --- /dev/null +++ b/share/views/ajax/device/vlans_csv.tt @@ -0,0 +1,10 @@ +[% USE CSV -%] +[% CSV.dump([ 'VLAN ID' 'VLAN Name' ]) %] + +[% FOREACH row IN results %] + [% mylist = [] %] + [% mylist.push(row.vlan) %] + [% mylist.push(row.description) %] + [% CSV.dump(mylist) %] + +[% END %] diff --git a/share/views/ajax/search/port.tt b/share/views/ajax/search/port.tt index 25c1a1cc..99635b8d 100644 --- a/share/views/ajax/search/port.tt +++ b/share/views/ajax/search/port.tt @@ -4,7 +4,7 @@ Status Name Port - Vlan + VLAN Speed Last Change diff --git a/share/views/ajax/search/port_csv.tt b/share/views/ajax/search/port_csv.tt index e9aa5db8..5ac669ee 100644 --- a/share/views/ajax/search/port_csv.tt +++ b/share/views/ajax/search/port_csv.tt @@ -1,5 +1,5 @@ [% USE CSV -%] -[% CSV.dump([ 'Name' 'Port' 'Description' 'Vlan' ]) %] +[% CSV.dump([ 'Name' 'Port' 'Description' 'VLAN' ]) %] [% FOREACH row IN results %] [% mylist = [] %] diff --git a/share/views/ajax/search/vlan.tt b/share/views/ajax/search/vlan.tt index aa75ce85..aa81060d 100644 --- a/share/views/ajax/search/vlan.tt +++ b/share/views/ajax/search/vlan.tt @@ -1,7 +1,7 @@ - + diff --git a/share/views/ajax/search/vlan_csv.tt b/share/views/ajax/search/vlan_csv.tt index 1d095856..82b0e33e 100644 --- a/share/views/ajax/search/vlan_csv.tt +++ b/share/views/ajax/search/vlan_csv.tt @@ -1,5 +1,5 @@ [% USE CSV -%] -[% CSV.dump([ 'Vlan' 'Device' 'Description' 'Model' 'OS' 'Vendor' ]) %] +[% CSV.dump([ 'VLAN' 'Device' 'Description' 'Model' 'OS' 'Vendor' ]) %] [% FOREACH row IN results %] [% mylist = [] %]
VlanVLAN Device Description Model