diff --git a/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm b/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm index 9f56dcaa..3c3044d7 100644 --- a/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm +++ b/lib/App/Netdisco/Web/Plugin/Report/VlanInventory.pm @@ -45,4 +45,46 @@ get '/ajax/content/report/vlaninventory' => require_login sub { } }; +register_report( + { category => 'VLAN', + tag => 'vlanmultiplenames', + label => 'VLANs With Multiple Names', + provides_csv => 1, + api_endpoint => 1, + } +); + +get '/ajax/content/report/vlanmultiplenames' => require_login sub { + my @results = schema(vars->{'tenant'})->resultset('DeviceVlan')->search( + { 'me.description' => { '!=', 'NULL' }, + 'me.vlan' => { '>' => 0 }, + 'ports.vlan' => { '>' => 0 }, + }, + { join => { 'ports' => 'vlan_entry' }, + select => [ + 'me.vlan', + { count => { distinct => 'me.ip' } }, + { count => 'ports.vlan' }, + \q{ array_agg(DISTINCT me.description ORDER BY me.description) }, + ], + as => [qw/ vlan dcount pcount description /], + group_by => [qw/ me.vlan /], + having => \q{ count (DISTINCT me.description) > 1 }, + } + )->hri->all; + + return unless scalar @results; + + use DDP; p @results; + + if ( request->is_ajax ) { + my $json = to_json (\@results); + template 'ajax/report/vlanmultiplenames.tt', { results => $json }, { layout => 'noop' }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/report/vlanmultiplenames.tt', { results => \@results }, { layout => 'noop' }; + } +}; + true;