From 26dbb714df9c5fdd1e27b08bfc25e966b9d8af22 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Sun, 18 Aug 2019 10:49:57 +0100 Subject: [PATCH] #630 display full oui vendor --- bin/netdisco-deploy | 21 ++++++++++++------- .../Netdisco/Web/Plugin/Report/NodeVendor.pm | 10 ++++----- share/views/ajax/report/nodevendor.tt | 4 ++-- share/views/ajax/report/nodevendor_csv.tt | 4 ++-- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/bin/netdisco-deploy b/bin/netdisco-deploy index 32cd212e..f96891a4 100755 --- a/bin/netdisco-deploy +++ b/bin/netdisco-deploy @@ -257,7 +257,7 @@ sub deploy_oui { print color 'reset'; } -# This subroutine is from Wireshark's make-manuf +# This subroutine is baed on Wireshark's make-manuf # http://anonsvn.wireshark.org/wireshark/trunk/tools/make-manuf sub shorten { my $manuf = shift; @@ -271,22 +271,27 @@ sub shorten { # & isn't needed when Standalone $manuf =~ s/ \& / /g; + # remove junk whitespace + $manuf =~ s/\s+/ /g; + # Remove any "the", "inc", "plc" ... $manuf - =~ s/\s(the|inc|incorporated|plc|systems|corp|corporation|s\/a|a\/s|ab|ag|kg|gmbh|co|company|limited|ltd|holding|spa)(?= )//gi; + =~ s/\s(?:the|inc|incorporated|plc|systems|corp|corporation|s\/a|a\/s|ab|ag|kg|gmbh|co|company|limited|ltd|holding|spa)(?= )//gi; # Convert to consistent case $manuf =~ s/(\w+)/\u\L$1/g; - # Remove all spaces - $manuf =~ s/\s+//g; - # Deviating from make-manuf for HP $manuf =~ s/Hewlett[-]?Packard/Hp/; - # Truncate all names to a reasonable length, say, 8 characters. - # If the string contains UTF-8, this may be substantially more than 8 bytes. - $manuf = substr( $manuf, 0, 8 ); + # Truncate all names to first two words max 20 chars + if (length($manuf) > 21) { + my @twowords = grep {defined} (split ' ', $manuf)[0 .. 1]; + $manuf = join ' ', @twowords; + } + + # Remove all spaces + $manuf =~ s/\s+//g; return encode( "utf8", $manuf ); } diff --git a/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm b/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm index b8f61f53..6be6aa35 100644 --- a/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm +++ b/lib/App/Netdisco/Web/Plugin/Report/NodeVendor.pm @@ -47,7 +47,7 @@ get '/ajax/content/report/nodevendor/data' => require_login sub { my $match = $vendor eq 'blank' ? undef : $vendor; $rs = $rs->search( { 'oui.abbrev' => $match }, - { '+columns' => [qw/ device.dns device.name oui.abbrev /], + { '+columns' => [qw/ device.dns device.name oui.abbrev oui.company /], join => [qw/ oui device /], collapse => 1, }); @@ -86,7 +86,7 @@ get '/ajax/content/report/nodevendor' => require_login sub { my $match = $vendor eq 'blank' ? undef : $vendor; $rs = $rs->search( { 'oui.abbrev' => $match }, - { '+columns' => [qw/ device.dns device.name oui.abbrev /], + { '+columns' => [qw/ device.dns device.name oui.abbrev oui.company /], join => [qw/ oui device /], collapse => 1, }); @@ -102,9 +102,9 @@ get '/ajax/content/report/nodevendor' => require_login sub { $rs = $rs->search( { }, { join => 'oui', - select => [ 'oui.abbrev', { count => {distinct => 'me.mac'}} ], - as => [qw/ vendor count /], - group_by => [qw/ oui.abbrev /] + select => [ 'oui.abbrev', 'oui.company', { count => {distinct => 'me.mac'}} ], + as => [qw/ abbrev vendor count /], + group_by => [qw/ oui.abbrev oui.company /] } )->order_by( { -desc => 'count' } ); diff --git a/share/views/ajax/report/nodevendor.tt b/share/views/ajax/report/nodevendor.tt index 178dda66..bbfcd0e8 100644 --- a/share/views/ajax/report/nodevendor.tt +++ b/share/views/ajax/report/nodevendor.tt @@ -43,7 +43,7 @@ $(document).ready(function() { }, { "data": 'oui.abbrev', "render": function(data, type, row, meta) { - return '' + he.encode(data ||'(Unknown Vendor)') + ''; + return '' + he.encode(row.oui.company ||'(Unknown Vendor)') + ''; } }, { "data": 'port', @@ -71,7 +71,7 @@ $(document).ready(function() { { "data": 'vendor', "render": function(data, type, row, meta) { - return '' + he.encode(data ||'(Unknown Vendor)') + ''; + return '' + he.encode(row.vendor ||'(Unknown Vendor)') + ''; } }, { "data": 'count', diff --git a/share/views/ajax/report/nodevendor_csv.tt b/share/views/ajax/report/nodevendor_csv.tt index 64ecd60a..d4d8c0d3 100644 --- a/share/views/ajax/report/nodevendor_csv.tt +++ b/share/views/ajax/report/nodevendor_csv.tt @@ -1,11 +1,11 @@ [% USE CSV -%] [% IF opt %] - [% CSV.dump(['MAC' 'Vendor' 'Company' 'Device' 'Port']) %] + [% CSV.dump(['MAC' 'Company' 'Device' 'Port']) %] [% 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 ] %] + [% FOREACH col IN [ row.mac.upper row.oui.company device row.port ] %] [% mylist.push(col) %] [% END %] [% CSV.dump(mylist) %]