From 4c08de951235ad5dbb1ee9f8617b930956c108d8 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 25 Aug 2014 16:45:38 +0100 Subject: [PATCH] Add Nodes discovered through LLDP/CDP report --- Netdisco/Changes | 1 + ...PhonesDiscovered.pm => NodesDiscovered.pm} | 5 +- .../Web/Plugin/Report/NodesDiscovered.pm | 54 +++++++++++++++++++ .../Web/Plugin/Report/PhonesDiscovered.pm | 36 ------------- Netdisco/lib/App/Netdisco/Web/Report.pm | 7 ++- Netdisco/share/config.yml | 2 +- ...phonesdiscovered.tt => nodesdiscovered.tt} | 0 ...scovered_csv.tt => nodesdiscovered_csv.tt} | 0 .../views/sidebar/report/nodesdiscovered.tt | 52 ++++++++++++++++++ 9 files changed, 116 insertions(+), 41 deletions(-) rename Netdisco/lib/App/Netdisco/DB/Result/Virtual/{PhonesDiscovered.pm => NodesDiscovered.pm} (89%) create mode 100644 Netdisco/lib/App/Netdisco/Web/Plugin/Report/NodesDiscovered.pm delete mode 100644 Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm rename Netdisco/share/views/ajax/report/{phonesdiscovered.tt => nodesdiscovered.tt} (100%) rename Netdisco/share/views/ajax/report/{phonesdiscovered_csv.tt => nodesdiscovered_csv.tt} (100%) create mode 100644 Netdisco/share/views/sidebar/report/nodesdiscovered.tt diff --git a/Netdisco/Changes b/Netdisco/Changes index 717fc08f..bc91414a 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -3,6 +3,7 @@ [NEW FEATURES] * netdisco-sshcollector script to get ARP data on devices without SNMP (C. Ramseyer) + * Add Nodes discovered through LLDP/CDP report (replaces IP Phones report) [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm b/Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodesDiscovered.pm similarity index 89% rename from Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm rename to Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodesDiscovered.pm index 8aa265e5..1000c27d 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/Virtual/NodesDiscovered.pm @@ -1,4 +1,4 @@ -package App::Netdisco::DB::Result::Virtual::PhonesDiscovered; +package App::Netdisco::DB::Result::Virtual::NodesDiscovered; use strict; use warnings; @@ -7,7 +7,7 @@ use base 'DBIx::Class::Core'; __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); -__PACKAGE__->table('phones_discovered'); +__PACKAGE__->table('nodes_discovered'); __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition(< 'Node', + tag => 'nodesdiscovered', + label => 'Nodes discovered through LLDP/CDP', + provides_csv => 1, + } +); + +get '/ajax/content/report/nodesdiscovered' => require_login sub { + my $op = param('matchall') ? '-and' : '-or'; + + my @results = schema('netdisco')->resultset('Virtual::NodesDiscovered') + ->search({ + $op => [ + (param('aps') ? + ('me.remote_type' => { -ilike => 'AP:%' }) : ()), + (param('phones') ? + ('me.remote_type' => { -ilike => '%ip_phone%' }) : ()), + (param('remote_id') ? + ('me.remote_id' => { -ilike => scalar sql_match(param('remote_id')) }) : ()), + (param('remote_type') ? ('-or' => [ + map {( 'me.remote_type' => { -ilike => scalar sql_match($_) } )} + grep { $_ } + (ref param('remote_type') ? @{param('remote_type')} : param('remote_type')) + ]) : ()), + ], + }) + ->hri->all; + + return unless scalar @results; + + if ( request->is_ajax ) { + my $json = to_json( \@results ); + template 'ajax/report/nodesdiscovered.tt', { results => $json }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/report/nodesdiscovered_csv.tt', + { results => \@results }, + { layout => undef }; + } +}; + +1; diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm deleted file mode 100644 index 130f2718..00000000 --- a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm +++ /dev/null @@ -1,36 +0,0 @@ -package App::Netdisco::Web::Plugin::Report::PhonesDiscovered; - -use Dancer ':syntax'; -use Dancer::Plugin::DBIC; -use Dancer::Plugin::Auth::Extensible; - -use App::Netdisco::Web::Plugin; - -register_report( - { category => 'Node', - tag => 'phonesdiscovered', - label => 'IP Phones discovered through LLDP/CDP', - provides_csv => 1, - } -); - -get '/ajax/content/report/phonesdiscovered' => require_login sub { - my @results = schema('netdisco')->resultset('Virtual::PhonesDiscovered') - ->hri->all; - - return unless scalar @results; - - if ( request->is_ajax ) { - my $json = to_json( \@results ); - template 'ajax/report/phonesdiscovered.tt', { results => $json }, - { layout => undef }; - } - else { - header( 'Content-Type' => 'text/comma-separated-values' ); - template 'ajax/report/phonesdiscovered_csv.tt', - { results => \@results }, - { layout => undef }; - } -}; - -1; diff --git a/Netdisco/lib/App/Netdisco/Web/Report.pm b/Netdisco/lib/App/Netdisco/Web/Report.pm index 2a27fe7c..740cd950 100644 --- a/Netdisco/lib/App/Netdisco/Web/Report.pm +++ b/Netdisco/lib/App/Netdisco/Web/Report.pm @@ -8,7 +8,7 @@ get '/report/*' => require_login sub { my ($tag) = splat; # used in the report search sidebar to populate select inputs - my ( $domain_list, $class_list, $ssid_list, $vendor_list ); + my ( $domain_list, $class_list, $ssid_list, $type_list, $vendor_list ); if ( $tag eq 'netbios' ) { $domain_list = [ schema('netdisco')->resultset('NodeNbt') @@ -31,6 +31,10 @@ get '/report/*' => require_login sub { $ssid_list = [ schema('netdisco')->resultset('DevicePortSsid') ->get_distinct_col('ssid') ]; } + elsif ( $tag eq 'nodesdiscovered' ) { + $type_list = [ schema('netdisco')->resultset('DevicePort') + ->get_distinct_col('remote_type') ]; + } elsif ( $tag eq 'nodevendor' ) { $vendor_list = [ schema('netdisco')->resultset('Node')->search( @@ -54,6 +58,7 @@ get '/report/*' => require_login sub { domain_list => $domain_list, class_list => $class_list, ssid_list => $ssid_list, + type_list => $type_list, vendor_list => $vendor_list, }; }; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index 55d5a453..7710acc0 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -54,7 +54,7 @@ web_plugins: - Report::Netbios - Report::NodeMultiIPs - Report::NodeVendor - - Report::PhonesDiscovered + - Report::NodesDiscovered - Report::SsidInventory - Report::VlanInventory - Report::SubnetUtilization diff --git a/Netdisco/share/views/ajax/report/phonesdiscovered.tt b/Netdisco/share/views/ajax/report/nodesdiscovered.tt similarity index 100% rename from Netdisco/share/views/ajax/report/phonesdiscovered.tt rename to Netdisco/share/views/ajax/report/nodesdiscovered.tt diff --git a/Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt b/Netdisco/share/views/ajax/report/nodesdiscovered_csv.tt similarity index 100% rename from Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt rename to Netdisco/share/views/ajax/report/nodesdiscovered_csv.tt diff --git a/Netdisco/share/views/sidebar/report/nodesdiscovered.tt b/Netdisco/share/views/sidebar/report/nodesdiscovered.tt new file mode 100644 index 00000000..b3fd7381 --- /dev/null +++ b/Netdisco/share/views/sidebar/report/nodesdiscovered.tt @@ -0,0 +1,52 @@ + +

Node Search Options

+ +
+ +
+
+ +
+
+ +
+
+ + +
+
+ + +
+

+
+ + +
+