diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/HalfDuplex.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/HalfDuplex.pm index bf698d39..8b424355 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/HalfDuplex.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/HalfDuplex.pm @@ -6,30 +6,39 @@ use Dancer::Plugin::Auth::Extensible; use App::Netdisco::Web::Plugin; -register_report({ - category => 'Port', - tag => 'halfduplex', - label => 'Ports in Half Duplex Mode', - provides_csv => 1, -}); +register_report( + { category => 'Port', + tag => 'halfduplex', + label => 'Ports in Half Duplex Mode', + provides_csv => 1, + } +); get '/ajax/content/report/halfduplex' => require_login sub { my $format = param('format'); - my $set = schema('netdisco')->resultset('DevicePort')->search( - { up => 'up', duplex => { '-ilike' => 'half' } }, - { order_by => [qw/device.dns port/], prefetch => 'device' }, - ); - return unless $set->count; + my @results + = schema('netdisco')->resultset('DevicePort') + ->columns( [qw/ ip port name duplex /] )->search( + { up => 'up', duplex => { '-ilike' => 'half' } }, + { '+columns' => [qw/ device.dns device.name /], + join => [qw/ device /], + collapse => 1, + } + )->order_by( [qw/ device.dns port /] )->hri->all; - if (request->is_ajax) { - template 'ajax/report/halfduplex.tt', { results => $set, }, + return unless scalar @results; + + if ( request->is_ajax ) { + my $json = to_json( \@results ); + template 'ajax/report/halfduplex.tt', { results => $json }, { layout => undef }; } else { header( 'Content-Type' => 'text/comma-separated-values' ); - template 'ajax/report/halfduplex_csv.tt', { results => $set, }, - { layout => undef }; + template 'ajax/report/halfduplex_csv.tt', + { results => \@results }, + { layout => undef }; } }; -true; +1; diff --git a/Netdisco/share/views/ajax/report/halfduplex.tt b/Netdisco/share/views/ajax/report/halfduplex.tt index 5436fd6b..f9d9a2e2 100644 --- a/Netdisco/share/views/ajax/report/halfduplex.tt +++ b/Netdisco/share/views/ajax/report/halfduplex.tt @@ -1,23 +1,44 @@ - +
- - - + + + - - [% WHILE (row = results.next) %] - - - - - - - [% END %] -
DevicePortDescriptionDuplexPortDescriptionDuplex
[% row.device.dns || row.device.ip | html_entity %] - [% row.port | html_entity %][% row.name | html_entity %][% row.duplex.ucfirst | html_entity %]
+ diff --git a/Netdisco/share/views/ajax/report/halfduplex_csv.tt b/Netdisco/share/views/ajax/report/halfduplex_csv.tt index 9a4a1c5b..c0a4aa35 100644 --- a/Netdisco/share/views/ajax/report/halfduplex_csv.tt +++ b/Netdisco/share/views/ajax/report/halfduplex_csv.tt @@ -1,9 +1,9 @@ [% USE CSV -%] [% CSV.dump([ 'Device' 'Port' 'Description' 'Duplex' ]) %] -[% WHILE (row = results.next) %] +[% FOREACH row IN results %] [% mylist = [] %] - [% device = row.device.dns || row.device.ip %] + [% device = rrow.device.dns || row.device.name || row.ip %] [% FOREACH col IN [ device row.port row.name row.duplex.ucfirst ] %] [% mylist.push(col) %] [% END %]