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 %] +
| Device | +Port | +Port Description | +STP Status | +
|---|---|---|---|
| [% row.dns || row.name || row.ip | html_entity %] | ++ [% row.port | html_entity %] | +[% row.description | html_entity %] | +[% row.stp | html_entity %] | +