From 70ca1d9462de592bb213c80c0b6358ea4d593bb5 Mon Sep 17 00:00:00 2001 From: "Eric A. Miller" Date: Tue, 5 Nov 2013 23:20:48 -0500 Subject: [PATCH] Add Ports that are blocking report --- Netdisco/Changes | 1 + .../Web/Plugin/Report/PortBlocking.pm | 46 +++++++++++++++++++ Netdisco/share/config.yml | 1 + .../share/views/ajax/report/portblocking.tt | 23 ++++++++++ .../views/ajax/report/portblocking_csv.tt | 12 +++++ 5 files changed, 83 insertions(+) create mode 100644 Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortBlocking.pm create mode 100644 Netdisco/share/views/ajax/report/portblocking.tt create mode 100644 Netdisco/share/views/ajax/report/portblocking_csv.tt diff --git a/Netdisco/Changes b/Netdisco/Changes index ebf2e84a..441e62f0 100644 --- a/Netdisco/Changes +++ b/Netdisco/Changes @@ -6,6 +6,7 @@ * Add Device addresses with DNS entries report * Add Ports with multiple nodes attached report * Add Ports administratively disabled report + * Add Ports that are blocking report [ENHANCEMENTS] diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortBlocking.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortBlocking.pm new file mode 100644 index 00000000..c79226e5 --- /dev/null +++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Report/PortBlocking.pm @@ -0,0 +1,46 @@ +package App::Netdisco::Web::Plugin::Report::PortBlocking; + +use Dancer ':syntax'; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_report( + { category => 'Port', + tag => 'portblocking', + label => 'Ports that are blocking', + provides_csv => 1, + } +); + +get '/ajax/content/report/portblocking' => require_login sub { + my @results = schema('netdisco')->resultset('Device')->search( + { 'stp' => [ 'blocking', 'broken' ], 'up' => { '!=', 'down' } }, + { result_class => 'DBIx::Class::ResultClass::HashRefInflator', + select => [ 'ip', 'dns', 'name' ], + join => ['ports'], + '+columns' => [ + { 'port' => 'ports.port' }, + { 'description' => 'ports.name' }, + { 'stp' => 'ports.stp' }, + ], + order_by => { -asc => [qw/me.ip ports.port/] }, + } + )->all; + + return unless scalar @results; + + if ( request->is_ajax ) { + template 'ajax/report/portblocking.tt', { results => \@results, }, + { layout => undef }; + } + else { + header( 'Content-Type' => 'text/comma-separated-values' ); + template 'ajax/report/portblocking_csv.tt', + { results => \@results, }, + { layout => undef }; + } +}; + +1; diff --git a/Netdisco/share/config.yml b/Netdisco/share/config.yml index 69ffedeb..36be210d 100644 --- a/Netdisco/share/config.yml +++ b/Netdisco/share/config.yml @@ -34,6 +34,7 @@ path: '/' web_plugins: - Inventory - Report::PortAdminDown + - Report::PortBlocking - Report::PortMultiNodes - Report::PortUtilization - Report::ApChannelDist diff --git a/Netdisco/share/views/ajax/report/portblocking.tt b/Netdisco/share/views/ajax/report/portblocking.tt new file mode 100644 index 00000000..bd0e53e7 --- /dev/null +++ b/Netdisco/share/views/ajax/report/portblocking.tt @@ -0,0 +1,23 @@ +[% USE Number.Format %] + + + + + + + + + + + [% FOREACH row IN results %] + + + + + + + [% END %] + +
DevicePortPort DescriptionSTP Status
[% row.dns || row.name || row.ip | html_entity %] + [% row.port | html_entity %][% row.description | html_entity %][% row.stp | html_entity %]
+ diff --git a/Netdisco/share/views/ajax/report/portblocking_csv.tt b/Netdisco/share/views/ajax/report/portblocking_csv.tt new file mode 100644 index 00000000..ad3da5b9 --- /dev/null +++ b/Netdisco/share/views/ajax/report/portblocking_csv.tt @@ -0,0 +1,12 @@ +[% USE CSV -%] +[% CSV.dump([ 'Device' 'Port' 'Port Description' 'STP 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.stp) %] + [% CSV.dump(mylist) %] + +[% END %]