#1111 Support for OUI28/MA-M and OUI36/MA-S

* new oui importer using IEEE csv for MA-L+M+S

* schema update for new vendor table

* change vendor to manufacturer because Device has a vendor field

* remove oui from manuf table, and update node oui after manuf update

* faster way to bulk update node oui

* switch from using oui table to manufacturer table for vendor lookup

* some other oui cleanup

* faster/scalable way to join a macaddr to manuf table

* remove device.oui support

* update node oui in bulk at end of macsuck run

* correct literal sql instead of bind

* more efficient to get oui base for each mac

* comment better the base lookup in macsuck
This commit is contained in:
Oliver Gorwits
2023-11-14 18:55:54 +00:00
committed by GitHub
parent 7766ce64d1
commit 534a9d9378
26 changed files with 427 additions and 193 deletions

View File

@@ -88,11 +88,11 @@ get '/ajax/content/report/ipinventory' => require_login sub {
my $rs2 = schema(vars->{'tenant'})->resultset('NodeIp')->search(
undef,
{ join => ['oui', 'netbios'],
{ join => ['manufacturer', 'netbios'],
columns => [qw( ip mac time_first time_last dns active)],
'+select' => [ \'true AS node',
\qq/replace( date_trunc( 'minute', age( LOCALTIMESTAMP, me.time_last ) ) ::text, 'mon', 'month') AS age/,
'oui.company',
'manufacturer.company',
'netbios.nbname',
],
'+as' => [ 'node', 'age', 'vendor', 'nbname' ],
@@ -101,14 +101,14 @@ get '/ajax/content/report/ipinventory' => require_login sub {
my $rs3 = schema(vars->{'tenant'})->resultset('NodeNbt')->search(
undef,
{ join => ['oui'],
{ join => ['manufacturer'],
columns => [qw( ip mac time_first time_last )],
'+select' => [
\'null AS dns',
'active',
\'true AS node',
\qq/replace( date_trunc( 'minute', age( LOCALTIMESTAMP, time_last ) ) ::text, 'mon', 'month') AS age/,
'oui.company',
'manufacturer.company',
'nbname'
],
'+as' => [ 'dns', 'active', 'node', 'age', 'vendor', 'nbname' ],

View File

@@ -19,15 +19,15 @@ get '/ajax/content/report/nodemultiips' => require_login sub {
my @results = schema(vars->{'tenant'})->resultset('Node')->search(
{},
{ select => [ 'mac', 'switch', 'port' ],
join => [qw/device ips oui/],
join => [qw/device ips manufacturer/],
'+columns' => [
{ 'dns' => 'device.dns' },
{ 'name' => 'device.name' },
{ 'ip_count' => { count => 'ips.ip' } },
{ 'vendor' => 'oui.company' }
{ 'vendor' => 'manufacturer.company' }
],
group_by => [
qw/ me.mac me.switch me.port device.dns device.name oui.company/
qw/ me.mac me.switch me.port device.dns device.name manufacturer.company/
],
having => \[ 'count(ips.ip) > ?', [ count => 1 ] ],
order_by => { -desc => [qw/count/] },

View File

@@ -46,9 +46,9 @@ 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 oui.company /],
join => [qw/ oui device /],
$rs = $rs->search( { 'manufacturer.abbrev' => $match },
{ '+columns' => [qw/ device.dns device.name manufacturer.abbrev manufacturer.company /],
join => [qw/ manufacturer device /],
collapse => 1,
});
@@ -85,9 +85,9 @@ 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 oui.company /],
join => [qw/ oui device /],
$rs = $rs->search( { 'manufacturer.abbrev' => $match },
{ '+columns' => [qw/ device.dns device.name manufacturer.abbrev manufacturer.company /],
join => [qw/ manufacturer device /],
collapse => 1,
});
@@ -101,10 +101,10 @@ get '/ajax/content/report/nodevendor' => require_login sub {
elsif ( !defined $vendor ) {
$rs = $rs->search(
{ },
{ join => 'oui',
select => [ 'oui.abbrev', 'oui.company', { count => {distinct => 'me.mac'}} ],
{ join => 'manufacturer',
select => [ 'manufacturer.abbrev', 'manufacturer.company', { count => {distinct => 'me.mac'}} ],
as => [qw/ abbrev vendor count /],
group_by => [qw/ oui.abbrev oui.company /]
group_by => [qw/ manufacturer.abbrev manufacturer.company /]
}
)->order_by( { -desc => 'count' } );