From d963ad3148e4c1e1ee427bf49036785a8ed19b8a Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Mon, 16 Dec 2013 23:14:41 -0500 Subject: [PATCH] Add IP Phones discovered through LLDP/CDP report --- Netdisco/Changes | 4 ++ .../DB/Result/Virtual/PhonesDiscovered.pm | 69 +++++++++++++++++++ .../Web/Plugin/Report/PhonesDiscovered.pm | 32 +++++++++ Netdisco/share/config.yml | 1 + .../views/ajax/report/phonesdiscovered.tt | 28 ++++++++ .../views/ajax/report/phonesdiscovered_csv.tt | 12 ++++ 6 files changed, 146 insertions(+) create mode 100644 Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm create mode 100644 Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm create mode 100644 Netdisco/share/views/ajax/report/phonesdiscovered.tt create mode 100644 Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt diff --git a/Netdisco/Changes b/Netdisco/Changes index 4a0bcc5e..4d412927 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -1,5 +1,9 @@ 2.030000 - + [NEW FEATURES] + + * Add IP Phones discovered through LLDP/CDP report + [ENHANCEMENTS] * Require SNMP::Info 3.10+, use new c_cap method to tag device remote_type diff --git a/Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm b/Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm new file mode 100644 index 00000000..8aa265e5 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/DB/Result/Virtual/PhonesDiscovered.pm @@ -0,0 +1,69 @@ +package App::Netdisco::DB::Result::Virtual::PhonesDiscovered; + +use strict; +use warnings; + +use base 'DBIx::Class::Core'; + +__PACKAGE__->table_class('DBIx::Class::ResultSource::View'); + +__PACKAGE__->table('phones_discovered'); +__PACKAGE__->result_source_instance->is_virtual(1); +__PACKAGE__->result_source_instance->view_definition(<add_columns( + 'ip' => { + data_type => 'inet', + }, + 'dns' => { + data_type => 'text', + }, + 'name' => { + data_type => 'text', + }, + 'port' => { + data_type => 'text', + }, + 'remote_ip' => { + data_type => 'inet', + }, + 'remote_port' => { + data_type => 'text', + }, + 'remote_type' => { + data_type => 'text', + }, + 'remote_id' => { + data_type => 'text', + }, +); + +1; diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm new file mode 100644 index 00000000..b351b5ac --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PhonesDiscovered.pm @@ -0,0 +1,32 @@ +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 $set = schema('netdisco')->resultset('Virtual::PhonesDiscovered'); + return unless $set->count; + + if (request->is_ajax) { + template 'ajax/report/phonesdiscovered.tt', { results => $set, }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/report/phonesdiscovered_csv.tt', { results => $set, }, + { layout => undef }; + } +}; + +true; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index d315afa2..d739c705 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -46,6 +46,7 @@ web_plugins: - Report::DevicePoeStatus - Report::DuplexMismatch - Report::NodeMultiIPs + - Report::PhonesDiscovered - Report::SsidInventory - Report::VlanInventory - AdminTask::JobQueue diff --git a/Netdisco/share/views/ajax/report/phonesdiscovered.tt b/Netdisco/share/views/ajax/report/phonesdiscovered.tt new file mode 100644 index 00000000..73992a35 --- /dev/null +++ b/Netdisco/share/views/ajax/report/phonesdiscovered.tt @@ -0,0 +1,28 @@ + + + + + + + + + + + + + [% WHILE (row = results.next) %] + + + + + + + + + [% END %] + +
DevicePortRemote IDRemote IPRemote PortRemote Type
[% row.dns || row.name || row.ip | html_entity %] + [% row.port | html_entity %][% row.remote_id | html_entity %][% row.remote_ip | html_entity %][% row.remote_port | html_entity %][% row.remote_type | html_entity %]
+ diff --git a/Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt b/Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt new file mode 100644 index 00000000..c6c23ec5 --- /dev/null +++ b/Netdisco/share/views/ajax/report/phonesdiscovered_csv.tt @@ -0,0 +1,12 @@ +[% USE CSV -%] +[% CSV.dump([ 'Device' 'Port' 'Remote ID' 'Remote IP' 'Remote Port' 'Remote Type']) %] + +[% WHILE (row = results.next) %] + [% mylist = [] %] + [% device = row.dns || row.name || row.ip %] + [% FOREACH col IN [ device row.port row.remote_id row.remote_ip row.remote_port row.remote_type ] %] + [% mylist.push(col) %] + [% END %] + [% CSV.dump(mylist) %] + +[% END %] \ No newline at end of file