From 998ca5a92aa90882b684f5d8ea067d5e29f2ea02 Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Wed, 28 May 2014 23:42:43 -0400 Subject: [PATCH] DataTables for port SSID and SSID inventory reports --- .../Netdisco/Web/Plugin/Report/PortSsid.pm | 22 +++-- .../Web/Plugin/Report/SsidInventory.pm | 11 ++- Netdisco/share/views/ajax/report/portssid.tt | 94 +++++++++++++------ .../share/views/ajax/report/portssid_csv.tt | 4 +- 4 files changed, 88 insertions(+), 43 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortSsid.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortSsid.pm index b5936329..36f27168 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortSsid.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortSsid.pm @@ -44,26 +44,34 @@ get '/ajax/content/report/portssid' => require_login sub { if ( defined $ssid ) { - $rs - = $rs->search( { ssid => $ssid } ) - ->prefetch( [qw/ device port /] ) - ->order_by( [qw/ port.ip port.port /] )->hri; + $rs = $rs->search( + { ssid => $ssid }, + { '+columns' => [ + qw/ device.dns device.name device.model device.vendor port.port/ + ], + join => [qw/ device port /], + collapse => 1, + } + )->order_by( [qw/ port.ip port.port /] )->hri; } else { $rs = $rs->get_ssids->hri; } - return unless $rs->has_rows; + my @results = $rs->all; + return unless scalar @results; if ( request->is_ajax ) { - template 'ajax/report/portssid.tt', { results => $rs, opt => $ssid }, + my $json = to_json( \@results ); + template 'ajax/report/portssid.tt', + { results => $json, opt => $ssid }, { layout => undef }; } else { header( 'Content-Type' => 'text/comma-separated-values' ); template 'ajax/report/portssid_csv.tt', - { results => $rs, opt => $ssid }, + { results => \@results, opt => $ssid }, { layout => undef }; } }; diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/SsidInventory.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/SsidInventory.pm index 85decf3c..910bdddd 100644 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/SsidInventory.pm +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/SsidInventory.pm @@ -15,16 +15,19 @@ register_report( ); get '/ajax/content/report/ssidinventory' => require_login sub { - my $rs = schema('netdisco')->resultset('DevicePortSsid')->get_ssids->hri; - return unless $rs->has_rows; + my @results = schema('netdisco')->resultset('DevicePortSsid') + ->get_ssids->hri->all; + + return unless scalar @results; if ( request->is_ajax ) { - template 'ajax/report/portssid.tt', { results => $rs, }, + my $json = to_json( \@results ); + template 'ajax/report/portssid.tt', { results => $json }, { layout => undef }; } else { header( 'Content-Type' => 'text/comma-separated-values' ); - template 'ajax/report/portssid_csv.tt', { results => $rs, }, + template 'ajax/report/portssid_csv.tt', { results => \@results }, { layout => undef }; } }; diff --git a/Netdisco/share/views/ajax/report/portssid.tt b/Netdisco/share/views/ajax/report/portssid.tt index 0a09cc3d..6aeeea8f 100644 --- a/Netdisco/share/views/ajax/report/portssid.tt +++ b/Netdisco/share/views/ajax/report/portssid.tt @@ -1,6 +1,6 @@ [% USE Number.Format %] [% IF opt %] - +
@@ -10,24 +10,9 @@ - - [% WHILE (row = results.next) %] - - - - - - - - [% END %] -
Device (Port)Vendor
- - [% row.device.dns || row.device.name || row.device.ip | html_entity %] ( [% row.port.port | html_entity %] ) - [% row.broadcast ? 'Yes' : 'No' %][% row.device.model | html_entity %][% row.ssid | html_entity %][% row.device.vendor | html_entity %]
[% ELSE %] - +
@@ -35,18 +20,67 @@ - - [% WHILE (row = results.next) %] - - - - - - [% END %] -
SSIDCount
- - [% row.ssid | html_entity %] - [% row.broadcast ? 'Yes' : 'No' %][% row.count | format_number %]
[% END %] + + diff --git a/Netdisco/share/views/ajax/report/portssid_csv.tt b/Netdisco/share/views/ajax/report/portssid_csv.tt index fa6e2ffb..02c27277 100644 --- a/Netdisco/share/views/ajax/report/portssid_csv.tt +++ b/Netdisco/share/views/ajax/report/portssid_csv.tt @@ -2,7 +2,7 @@ [% IF opt %] [% CSV.dump(['Device' 'Port' 'Name' 'Broadcast' 'Model' 'SSID' 'Vendor']) %] - [% WHILE (row = results.next) %] + [% FOREACH row IN results %] [% mylist = [] %] [% device = row.device.dns || row.device.name || row.device.ip %] [% broadcast = row.broadcast ? 'Yes' : 'No' %] @@ -15,7 +15,7 @@ [% ELSE %] [% CSV.dump(['SSID' 'Count']) %] - [% WHILE (row = results.next) %] + [% FOREACH row IN results %] [% mylist = [] %] [% FOREACH col IN [ row.ssid row.count ] %] [% mylist.push(col) %]