From d8d082b30eb5005037b4532a75ebf837c0048916 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Tue, 23 May 2017 20:09:05 +0100 Subject: [PATCH] a report to show SNMP failures --- lib/App/Netdisco/JobQueue/PostgreSQL.pm | 4 ++- .../Web/Plugin/AdminTask/TimedOutDevices.pm | 26 +++++++++++++++++ share/config.yml | 2 ++ share/views/ajax/admintask/timedoutdevices.tt | 29 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/App/Netdisco/Web/Plugin/AdminTask/TimedOutDevices.pm create mode 100644 share/views/ajax/admintask/timedoutdevices.tt diff --git a/lib/App/Netdisco/JobQueue/PostgreSQL.pm b/lib/App/Netdisco/JobQueue/PostgreSQL.pm index b6c0fb1f..f5913fee 100644 --- a/lib/App/Netdisco/JobQueue/PostgreSQL.pm +++ b/lib/App/Netdisco/JobQueue/PostgreSQL.pm @@ -41,7 +41,9 @@ sub _getsome { my $jobs = schema('netdisco')->resultset('Admin'); my $rs = $jobs->search({ status => 'queued', - device => { '-not_in' => $jobs->skipped->columns('device')->as_query }, + device => { '-not_in' => + $jobs->skipped($fqdn, setting('workers')->{'max_deferrals'}) + ->columns('device')->as_query }, %$where, }, { order_by => 'random()', rows => $num_slots }); diff --git a/lib/App/Netdisco/Web/Plugin/AdminTask/TimedOutDevices.pm b/lib/App/Netdisco/Web/Plugin/AdminTask/TimedOutDevices.pm new file mode 100644 index 00000000..d74eca6a --- /dev/null +++ b/lib/App/Netdisco/Web/Plugin/AdminTask/TimedOutDevices.pm @@ -0,0 +1,26 @@ +package App::Netdisco::Web::Plugin::AdminTask::TimedOutDevices; + +use Dancer ':syntax'; +use Dancer::Plugin::Ajax; +use Dancer::Plugin::DBIC; +use Dancer::Plugin::Auth::Extensible; + +use App::Netdisco::Web::Plugin; + +register_admin_task({ + tag => 'timedoutdevices', + label => 'SNMP Connect Failures', +}); + +ajax '/ajax/content/admin/timedoutdevices' => require_role admin => sub { + my @results = schema('netdisco')->resultset('DeviceSkip')->search({ + deferrals => { '>=' => setting('workers')->{'max_deferrals'} } + },{ order_by => { -asc => [qw/backend device/] } })->hri->all; + + content_type('text/html'); + template 'ajax/admintask/timedoutdevices.tt', { + results => \@results, + }, { layout => undef }; +}; + +true; diff --git a/share/config.yml b/share/config.yml index 017a02b6..70704018 100644 --- a/share/config.yml +++ b/share/config.yml @@ -71,6 +71,7 @@ web_plugins: - AdminTask::SlowDevices - AdminTask::UndiscoveredNeighbors - AdminTask::OrphanedDevices + - AdminTask::TimedOutDevices - AdminTask::UserLog - AdminTask::Users - Search::Device @@ -205,6 +206,7 @@ workers: tasks: 'AUTO * 2' sleep_time: 1 min_runtime: 0 + max_deferrals: 10 queue: PostgreSQL dns: diff --git a/share/views/ajax/admintask/timedoutdevices.tt b/share/views/ajax/admintask/timedoutdevices.tt new file mode 100644 index 00000000..d825effb --- /dev/null +++ b/share/views/ajax/admintask/timedoutdevices.tt @@ -0,0 +1,29 @@ +[% IF NOT results.size %] +
No significant events to report.
+[% ELSE %] + + + + + + + + + [% FOREACH row IN results %] + + + + + [% END %] + +
Poller HostDevice
[% row.backend | html_entity %][% row.device | html_entity %]
+[% END %] + +