diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm
index 06ac0742..0c375363 100644
--- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm
+++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm
@@ -14,20 +14,6 @@ register_report(
}
);
-hook 'before' => sub {
-
- return
- unless (
- request->path eq uri_for('/report/nodevendor')->path
- or index( request->path,
- uri_for('/ajax/content/report/nodevendor')->path ) == 0
- );
-
- params->{'limit'} ||= 1024;
- params->{'order'} ||= 'MAC';
-
-};
-
hook 'before_template' => sub {
my $tokens = shift;
@@ -59,21 +45,15 @@ get '/ajax/content/report/nodevendor' => require_login sub {
my $match = $vendor eq 'blank' ? undef : $vendor;
- my $order = {
- MAC => 'me.mac',
- Device => 'me.switch',
- Vendor => 'oui.company'
- };
-
- $rs = $rs->search( { 'oui.abbrev' => $match } )
- ->prefetch( [qw/ oui device /] );
+ $rs = $rs->search( { 'oui.abbrev' => $match },
+ { '+columns' => [qw/ device.dns device.name oui.abbrev /],
+ join => [qw/ oui device /],
+ collapse => 1,
+ });
unless ( param('archived') ) {
$rs = $rs->search( { -bool => 'me.active' } );
}
-
- $rs = $rs->order_by( $order->{ param('order') } )
- ->limit( param('limit') )->hri;
}
else {
$rs = $rs->search(
@@ -83,20 +63,22 @@ get '/ajax/content/report/nodevendor' => require_login sub {
as => [qw/ vendor count /],
group_by => [qw/ oui.abbrev /]
}
- )->order_by( { -desc => 'count' } )->hri;
+ )->order_by( { -desc => 'count' } );
}
- return unless $rs->has_rows;
+ my @results = $rs->hri->all;
+ return unless scalar @results;
if ( request->is_ajax ) {
+ my $json = to_json( \@results );
template 'ajax/report/nodevendor.tt',
- { results => $rs, opt => $vendor },
+ { results => $json, opt => $vendor },
{ layout => undef };
}
else {
header( 'Content-Type' => 'text/comma-separated-values' );
template 'ajax/report/nodevendor_csv.tt',
- { results => $rs, opt => $vendor },
+ { results => \@results, opt => $vendor },
{ layout => undef };
}
};
diff --git a/Netdisco/share/views/ajax/report/nodevendor.tt b/Netdisco/share/views/ajax/report/nodevendor.tt
index fc80b8a3..066e54df 100644
--- a/Netdisco/share/views/ajax/report/nodevendor.tt
+++ b/Netdisco/share/views/ajax/report/nodevendor.tt
@@ -1,6 +1,5 @@
-[% USE Number.Format %]
[% IF opt %]
-
+
[% ELSE %]
-
+
[% END %]
+
+
diff --git a/Netdisco/share/views/ajax/report/nodevendor_csv.tt b/Netdisco/share/views/ajax/report/nodevendor_csv.tt
index 356d7b9c..3f28ec7e 100644
--- a/Netdisco/share/views/ajax/report/nodevendor_csv.tt
+++ b/Netdisco/share/views/ajax/report/nodevendor_csv.tt
@@ -2,7 +2,7 @@
[% IF opt %]
[% CSV.dump(['MAC' 'Vendor' 'Company' 'Device' 'Port']) %]
- [% WHILE (row = results.next) %]
+ [% FOREACH row IN results %]
[% mylist = [] %]
[% device = row.device.dns || row.device.name || row.switch %]
[% FOREACH col IN [ row.mac.upper row.oui.abbrev row.oui.company device row.port ] %]
@@ -14,7 +14,7 @@
[% ELSE %]
[% CSV.dump(['Vendor' 'Count']) %]
- [% WHILE (row = results.next) %]
+ [% FOREACH row IN results %]
[% mylist = [] %]
[% vendor = row.vendor || '(Unknown Vendor)' %]
[% FOREACH col IN [ vendor row.count ] %]
diff --git a/Netdisco/share/views/sidebar/report/nodevendor.tt b/Netdisco/share/views/sidebar/report/nodevendor.tt
index cf2539ea..9d04624f 100644
--- a/Netdisco/share/views/sidebar/report/nodevendor.tt
+++ b/Netdisco/share/views/sidebar/report/nodevendor.tt
@@ -23,25 +23,6 @@
-
-
- -
- Limit:
-
-
- -
- Order By:
-
-
-
-