From ec4cf74ceaeb27e3b81672f4afe86dc4ded0d15d Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 27 Jul 2022 22:48:36 +0100 Subject: [PATCH] #872 separate column for NetBIOS name in IP Inventory --- lib/App/Netdisco/DB/Result/Virtual/CidrIps.pm | 24 +++++++++---- .../Netdisco/Web/Plugin/Report/IpInventory.pm | 36 +++++++++---------- share/views/ajax/report/ipinventory.tt | 7 ++++ share/views/ajax/report/ipinventory_csv.tt | 3 +- 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/lib/App/Netdisco/DB/Result/Virtual/CidrIps.pm b/lib/App/Netdisco/DB/Result/Virtual/CidrIps.pm index c69d9b75..5d39885d 100644 --- a/lib/App/Netdisco/DB/Result/Virtual/CidrIps.pm +++ b/lib/App/Netdisco/DB/Result/Virtual/CidrIps.pm @@ -13,10 +13,14 @@ __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition(<<'ENDSQL'); SELECT host(network (prefix) + sub.int)::inet AS ip, NULL::macaddr AS mac, - NULL::text AS dns, NULL::timestamp AS time_first, NULL::timestamp AS time_last, - false::boolean AS active + NULL::text AS dns, + false::boolean AS active, + false::boolean AS node, + replace( date_trunc( 'minute', age( now(), NULL::timestamp ) ) ::text, 'mon', 'month') AS age, + NULL::text AS vendor, + NULL::text AS nbname FROM ( SELECT prefix, generate_series(1, (broadcast(prefix) - network(prefix) - 1)) AS int @@ -31,10 +35,6 @@ __PACKAGE__->add_columns( { data_type => "inet", is_nullable => 0 }, "mac", { data_type => "macaddr", is_nullable => 1 }, - "dns", - { data_type => "text", is_nullable => 1 }, - "active", - { data_type => "boolean", is_nullable => 1 }, "time_first", { data_type => "timestamp", @@ -45,6 +45,18 @@ __PACKAGE__->add_columns( data_type => "timestamp", is_nullable => 1, }, + "dns", + { data_type => "text", is_nullable => 1 }, + "active", + { data_type => "boolean", is_nullable => 1 }, + "node", + { data_type => "boolean", is_nullable => 1 }, + "age", + { data_type => "text", is_nullable => 1 }, + "vendor", + { data_type => "text", is_nullable => 1 }, + "nbname", + { data_type => "text", is_nullable => 1 }, ); 1; diff --git a/lib/App/Netdisco/Web/Plugin/Report/IpInventory.pm b/lib/App/Netdisco/Web/Plugin/Report/IpInventory.pm index 77f55118..809d2f0c 100644 --- a/lib/App/Netdisco/Web/Plugin/Report/IpInventory.pm +++ b/lib/App/Netdisco/Web/Plugin/Report/IpInventory.pm @@ -79,21 +79,23 @@ get '/ajax/content/report/ipinventory' => require_login sub { \'false AS node', \qq/replace( date_trunc( 'minute', age( now(), device.last_discover ) ) ::text, 'mon', 'month') AS age/, 'device.vendor', + \'null AS nbname', ], - as => [qw( ip mac time_first time_last dns active node age vendor)], + as => [qw( ip mac time_first time_last dns active node age vendor nbname)], } )->hri; my $rs2 = schema('netdisco')->resultset('NodeIp')->search( undef, - { join => ['oui'], + { join => ['oui', 'netbios'], columns => [qw( ip mac time_first time_last dns active)], '+select' => [ \'true AS node', - \qq/replace( date_trunc( 'minute', age( now(), time_last ) ) ::text, 'mon', 'month') AS age/, - 'oui.company' + \qq/replace( date_trunc( 'minute', age( now(), me.time_last ) ) ::text, 'mon', 'month') AS age/, + 'oui.company', + 'netbios.nbname', ], - '+as' => [ 'node', 'age', 'vendor' ], + '+as' => [ 'node', 'age', 'vendor', 'nbname' ], } )->hri; @@ -102,12 +104,14 @@ get '/ajax/content/report/ipinventory' => require_login sub { { join => ['oui'], columns => [qw( ip mac time_first time_last )], '+select' => [ - 'nbname AS dns', 'active', + \'null AS dns', + 'active', \'true AS node', \qq/replace( date_trunc( 'minute', age( now(), time_last ) ) ::text, 'mon', 'month') AS age/, - 'oui.company' + 'oui.company', + 'nbname' ], - '+as' => [ 'dns', 'active', 'node', 'age', 'vendor' ], + '+as' => [ 'dns', 'active', 'node', 'age', 'vendor', 'nbname' ], } )->hri; @@ -119,12 +123,7 @@ get '/ajax/content/report/ipinventory' => require_login sub { my $rs4 = schema('netdisco')->resultset('Virtual::CidrIps')->search( undef, { bind => [ $subnet->cidr ], - columns => [qw( ip mac time_first time_last dns active)], - '+select' => [ \'false AS node', - \qq/replace( date_trunc( 'minute', age( now(), time_last ) ) ::text, 'mon', 'month') AS age/, - \'null as vendor' - ], - '+as' => [ 'node', 'age', 'vendor' ], + columns => [qw( ip mac time_first time_last dns active node age vendor nbname )], } )->hri; @@ -142,13 +141,14 @@ get '/ajax/content/report/ipinventory' => require_login sub { 'active', 'node', 'age', - 'vendor' + 'vendor', + 'nbname' ], as => [ - 'ip', 'mac', 'dns', 'time_last', 'time_first', - 'active', 'node', 'age', 'vendor' + 'ip', 'mac', 'dns', 'time_last', 'time_first', + 'active', 'node', 'age', 'vendor', 'nbname' ], - order_by => [{-asc => 'ip'}, {-desc => 'active'}, {-asc => 'node'}], + order_by => [{-asc => 'ip'}, {-asc => 'dns'}, {-desc => 'active'}, {-asc => 'node'}], } )->as_query; diff --git a/share/views/ajax/report/ipinventory.tt b/share/views/ajax/report/ipinventory.tt index 9e4c28b9..9ab29963 100644 --- a/share/views/ajax/report/ipinventory.tt +++ b/share/views/ajax/report/ipinventory.tt @@ -5,6 +5,7 @@ MAC Address Vendor DNS + NetBIOS Last Used @@ -55,6 +56,12 @@ $(document).ready(function() { "render": function(data, type, row, meta) { return he.encode(data || ''); } + }, { + "data": 'nbname', + "className": "nd_nowrap nd_center-cell", + "render": function(data, type, row, meta) { + return he.encode(data || ''); + } }, { "data": 'age', "render": function(data, type, row, meta) { diff --git a/share/views/ajax/report/ipinventory_csv.tt b/share/views/ajax/report/ipinventory_csv.tt index 0e66bfae..5ebbe04f 100644 --- a/share/views/ajax/report/ipinventory_csv.tt +++ b/share/views/ajax/report/ipinventory_csv.tt @@ -1,5 +1,5 @@ [% USE CSV %] -[% CSV.dump([ 'Node' 'MAC Address' 'Vendor' 'DNS' 'Last Used' ]) %] +[% CSV.dump([ 'Node' 'MAC Address' 'Vendor' 'DNS' 'NetBIOS' 'Last Used' ]) %] [% FOREACH row IN results %] [% mylist = [] %] @@ -7,6 +7,7 @@ [% mylist.push(row.mac) %] [% mylist.push(row.vendor) %] [% mylist.push(row.dns) %] + [% mylist.push(row.nbname) %] [% mylist.push(row.time_last) %] [% CSV.dump(mylist) %]