From 23349917827cd4443709afa0f9a8eb1786a7e102 Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Tue, 5 Nov 2013 23:01:30 -0500 Subject: [PATCH] Add Ports administratively disabled report --- Netdisco/Changes | 1 + .../Web/Plugin/Report/PortAdminDown.pm | 46 +++++++++++++++++++ Netdisco/share/config.yml | 1 + .../share/views/ajax/report/portadmindown.tt | 23 ++++++++++ .../views/ajax/report/portadmindown_csv.tt | 12 +++++ 5 files changed, 83 insertions(+) create mode 100644 Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortAdminDown.pm create mode 100644 Netdisco/share/views/ajax/report/portadmindown.tt create mode 100644 Netdisco/share/views/ajax/report/portadmindown_csv.tt diff --git a/Netdisco/Changes b/Netdisco/Changes index d9d42136..ebf2e84a 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -5,6 +5,7 @@ * Add Nodes with multiple IP addresses report * Add Device addresses with DNS entries report * Add Ports with multiple nodes attached report + * Add Ports administratively disabled report [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortAdminDown.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortAdminDown.pm new file mode 100644 index 00000000..7e723bf3 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortAdminDown.pm @@ -0,0 +1,46 @@ +package App::Netdisco::Web::Plugin::Report::PortAdminDown; + +use Dancer ':syntax'; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_report( + { category => 'Port', + tag => 'portadmindown', + label => 'Ports administratively disabled', + provides_csv => 1, + } +); + +get '/ajax/content/report/portadmindown' => require_login sub { + my @results = schema('netdisco')->resultset('Device')->search( + { 'up_admin' => 'down' }, + { result_class => 'DBIx::Class::ResultClass::HashRefInflator', + select => [ 'ip', 'dns', 'name' ], + join => [ 'ports' ], + '+columns' => [ + { 'port' => 'ports.port' }, + { 'description' => 'ports.name' }, + { 'up_admin' => 'ports.up_admin' }, + ], + order_by => { -asc => [qw/me.ip ports.port/] }, + } + )->all; + + return unless scalar @results; + + if ( request->is_ajax ) { + template 'ajax/report/portadmindown.tt', { results => \@results, }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/report/portadmindown_csv.tt', + { results => \@results, }, + { layout => undef }; + } +}; + +1; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index 24fc8652..69ffedeb 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -33,6 +33,7 @@ trust_x_remote_user: false path: '/' web_plugins: - Inventory + - Report::PortAdminDown - Report::PortMultiNodes - Report::PortUtilization - Report::ApChannelDist diff --git a/Netdisco/share/views/ajax/report/portadmindown.tt b/Netdisco/share/views/ajax/report/portadmindown.tt new file mode 100644 index 00000000..9d140b25 --- /dev/null +++ b/Netdisco/share/views/ajax/report/portadmindown.tt @@ -0,0 +1,23 @@ +[% USE Number.Format %] + + + + + + + + + + + [% FOREACH row IN results %] + + + + + + + [% END %] + +
DevicePortPort DescriptionAdmin Status
[% row.dns || row.name || row.ip | html_entity %] + [% row.port | html_entity %][% row.description | html_entity %][% row.up_admin | html_entity %]
+ diff --git a/Netdisco/share/views/ajax/report/portadmindown_csv.tt b/Netdisco/share/views/ajax/report/portadmindown_csv.tt new file mode 100644 index 00000000..cce432be --- /dev/null +++ b/Netdisco/share/views/ajax/report/portadmindown_csv.tt @@ -0,0 +1,12 @@ +[% USE CSV -%] +[% CSV.dump([ 'Device' 'Port' 'Port Description' 'Admin Status' ]) %] + +[% FOREACH row IN results %] + [% mylist = [] %] + [% mylist.push(row.dns || row.name || row.ip) %] + [% mylist.push(row.port) %] + [% mylist.push(row.description) %] + [% mylist.push(row.up_admin) %] + [% CSV.dump(mylist) %] + +[% END %]