From 5efdd7501aa7101c7072ef9734bdd00ecff7cc6d Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 26 Jun 2017 19:40:13 +0100 Subject: [PATCH] fix bug on device port view (speed-up) to avoid DB query on every node --- Changes | 3 ++- lib/App/Netdisco/Web/Plugin/Device/Ports.pm | 13 +++++++------ share/views/ajax/device/ports.tt | 15 ++------------- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/Changes b/Changes index 68275049..d84bf1b9 100644 --- a/Changes +++ b/Changes @@ -6,6 +6,7 @@ * #311 added duplicate devices report with option to delete * #263 discover neighbors advertising ipv6 management addresses * #286 support only/no ACLs for snmp_auth stanza, update docs + * support NETDISCO_DBNAME in "netdisco-do psql" [BUG FIXES] @@ -14,7 +15,7 @@ * #317 #265 #311 when renumbering on discover, delete likely duplicate devices * #316 neighbor map should fall back to device sysname after dns * #310 allow multiple LLDP management addresses - * support NETDISCO_DBNAME in "netdisco-do psql" + * fix bug on device port view (speed-up) to avoid DB query on every node 2.036001 - 2017-06-22 diff --git a/lib/App/Netdisco/Web/Plugin/Device/Ports.pm b/lib/App/Netdisco/Web/Plugin/Device/Ports.pm index 40431ece..65fc454e 100644 --- a/lib/App/Netdisco/Web/Plugin/Device/Ports.pm +++ b/lib/App/Netdisco/Web/Plugin/Device/Ports.pm @@ -138,14 +138,14 @@ get '/ajax/content/device/ports' => require_login sub { my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes'); $nodes_name .= '_with_age' if param('n_age'); - if (param('c_nodes')) { - my $ips = ((param('n_ip4') and param('n_ip6')) ? 'ips' - : param('n_ip4') ? 'ip4s' - : 'ip6s'); + my $ips_name = ((param('n_ip4') and param('n_ip6')) ? 'ips' + : param('n_ip4') ? 'ip4s' + : 'ip6s'); + if (param('c_nodes')) { # retrieve active/all connected nodes, if asked for - $set = $set->search_rs({}, { prefetch => [{$nodes_name => $ips}] }); - $set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "${ips}.ip"] }); + $set = $set->search_rs({}, { prefetch => [{$nodes_name => $ips_name}] }); + $set = $set->search_rs({}, { order_by => ["${nodes_name}.vlan", "${nodes_name}.mac", "${ips_name}.ip"] }); # retrieve wireless SSIDs, if asked for $set = $set->search_rs({}, { prefetch => [{$nodes_name => 'wireless'}] }) @@ -175,6 +175,7 @@ get '/ajax/content/device/ports' => require_login sub { template 'ajax/device/ports.tt', { results => $results, nodes => $nodes_name, + ips => $ips_name, device => $device, vmember_ok => $vmember_ok, }, { layout => undef }; diff --git a/share/views/ajax/device/ports.tt b/share/views/ajax/device/ports.tt index 1862da99..7c3b51ee 100644 --- a/share/views/ajax/device/ports.tt +++ b/share/views/ajax/device/ports.tt @@ -331,19 +331,8 @@ ) [% END %] [% ' (' _ node.time_last_age _ ')' IF params.n_age %] - [% IF params.n_ip4 %] - [% FOREACH ip IN node.ip4s %] -
  [% '  ' IF NOT ip.active %] - [% SET dns = ip.dns %] - [% IF dns %] - [% dns %] ([% ip.ip | html_entity %]) - [% ELSE %] - [% ip.ip | html_entity %] - [% END %] - [% END %] - [% END %] - [% IF params.n_ip6 %] - [% FOREACH ip IN node.ip6s %] + [% IF params.n_ip4 OR params.n_ip6 %] + [% FOREACH ip IN node.$ips %]
  [% '  ' IF NOT ip.active %] [% SET dns = ip.dns %] [% IF dns %]