Avoid displaying all VLANs on device ports when there are 1000's

This commit is contained in:
Oliver Gorwits
2015-02-15 15:36:17 +00:00
parent 3cc3f873d8
commit 0993af18e4
5 changed files with 63 additions and 37 deletions

View File

@@ -1,5 +1,9 @@
2.031006 - 2015-02-12 2.031006 - 2015-02-12
[ENHANCEMENTS]
* Avoid displaying all VLANs on device ports when there are 1000's
[BUG FIXES] [BUG FIXES]
* Fix headings on IP Inventory CSV report (J. Binks) * Fix headings on IP Inventory CSV report (J. Binks)

View File

@@ -36,6 +36,15 @@ but they are backwards compatible.
=back =back
=head1 2.031006
=head2 General Notices
When displaying device ports, Netdisco will now avoid showing VLAN Membership
if it looks like there are a large number of VLANs on many ports. This is an
average of the VLANs per port, configurable in
<deviceport_vlan_membership_threshold>. The default is 150.
=head1 2.031005 =head1 2.031005
=head2 General Notices =head2 General Notices

View File

@@ -123,9 +123,16 @@ get '/ajax/content/device/ports' => require_login sub {
# make sure query asks for formatted timestamps when needed # make sure query asks for formatted timestamps when needed
$set = $set->with_times if param('c_lastchange'); $set = $set->with_times if param('c_lastchange');
# get vlans on the port # get vlans on the port, if there aren't too many
$set = $set->search_rs({}, { prefetch => 'all_port_vlans' })->with_vlan_count my $port_cnt = $device->ports->count() || 1;
if param('c_vmember'); my $vlan_cnt = $device->port_vlans->count() || 1;
my $vmember_ok =
(($vlan_cnt / $port_cnt) <= setting('deviceport_vlan_membership_threshold'));
if ($vmember_ok) {
$set = $set->search_rs({}, { prefetch => 'all_port_vlans' })->with_vlan_count
if param('c_vmember');
}
# what kind of nodes are we interested in? # what kind of nodes are we interested in?
my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes'); my $nodes_name = (param('n_archived') ? 'nodes' : 'active_nodes');
@@ -165,6 +172,7 @@ get '/ajax/content/device/ports' => require_login sub {
results => $results, results => $results,
nodes => $nodes_name, nodes => $nodes_name,
device => $device, device => $device,
vmember_ok => $vmember_ok,
}, { layout => undef }; }, { layout => undef };
} }
else { else {

View File

@@ -86,6 +86,24 @@ table_pagesize: 10
table_showrecordsmenu: table_showrecordsmenu:
- [10, 25, 50, 100, '-1'] - [10, 25, 50, 100, '-1']
- [10, 25, 50, 100, 'All'] - [10, 25, 50, 100, 'All']
vlanctl: true
portctl_nameonly: false
portctl_nophones: false
portctl_vlans: false
portctl_uplinks: false
port_control_reasons:
address: 'Address Allocation Abuse'
copyright: 'Copyright Violation'
dos: 'Denial of Service'
bandwidth: 'Excessive Bandwidth'
polling: 'Excessive Polling of DNS/DHCP/SNMP'
noserv: 'Not In Service'
exploit: 'Remote Exploit Possible'
compromised: 'System Compromised'
other: 'Other'
resolved: 'Issue Resolved'
check_userlog: true
deviceport_vlan_membership_threshold: 150
# ------------- # -------------
# NETDISCO CORE # NETDISCO CORE
@@ -157,23 +175,6 @@ ignore_interfaces:
- '(E|T)\d \d\/\d\/\d' - '(E|T)\d \d\/\d\/\d'
ignore_private_nets: false ignore_private_nets: false
reverse_sysname: false reverse_sysname: false
vlanctl: true
portctl_nameonly: false
portctl_nophones: false
portctl_vlans: false
portctl_uplinks: false
check_userlog: true
port_control_reasons:
address: 'Address Allocation Abuse'
copyright: 'Copyright Violation'
dos: 'Denial of Service'
bandwidth: 'Excessive Bandwidth'
polling: 'Excessive Polling of DNS/DHCP/SNMP'
noserv: 'Not In Service'
exploit: 'Remote Exploit Possible'
compromised: 'System Compromised'
other: 'Other'
resolved: 'Issue Resolved'
# -------------- # --------------
# BACKEND DAEMON # BACKEND DAEMON

View File

@@ -188,23 +188,27 @@
[% IF params.c_vmember %] [% IF params.c_vmember %]
<td> <td>
[% IF row.vlan_count %] [% IF vmember_ok %]
[% SET output = '' %] [% IF row.vlan_count %]
[% SET vlanlist = [] %] [% SET output = '' %]
[% FOREACH vlan IN row.all_port_vlans %][% vlanlist.push(vlan.get_column('vlan')) %][% END %] [% SET vlanlist = [] %]
[% FOREACH vlan IN vlanlist.nsort %] [% FOREACH vlan IN row.all_port_vlans %][% vlanlist.push(vlan.get_column('vlan')) %][% END %]
[% SET output = output _ [% FOREACH vlan IN vlanlist.nsort %]
'<a href="' _ uri_for('/search') _ '?tab=vlan&q=' _ vlan _ '">' _ vlan _ '</a>' %] [% SET output = output _
[% SET output = output _ ', ' IF NOT loop.last %] '<a href="' _ uri_for('/search') _ '?tab=vlan&q=' _ vlan _ '">' _ vlan _ '</a>' %]
[% END %] [% SET output = output _ ', ' IF NOT loop.last %]
[% IF row.vlan_count > 10 %] [%# TODO make this a settable variable %] [% END %]
[% SET output = '<div class="nd_vlan-total">(' _ row.vlan_count [% IF row.vlan_count > 10 %] [%# TODO make this a settable variable %]
_ ')</div><span class="nd_linkcell nd_collapse-vlans"> [% SET output = '<div class="nd_vlan-total">(' _ row.vlan_count
<div class="nd_arrow-up-down-left icon-chevron-up icon-large"></div>Show VLANs</span> _ ')</div><span class="nd_linkcell nd_collapse-vlans">
<div class="nd_collapsing nd_collapse-pre-hidden">' _ output %] <div class="nd_arrow-up-down-left icon-chevron-up icon-large"></div>Show VLANs</span>
[% SET output = output _ '</div>' %] <div class="nd_collapsing nd_collapse-pre-hidden">' _ output %]
[% END %] [% SET output = output _ '</div>' %]
[% output %] [% END %]
[% output %]
[% END %]
[% ELSE %]
<i class="icon-asterisk"></i> (too many to list)
[% END %] [% END %]
</td> </td>
[% END %] [% END %]