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 %] +
| Poller Host | +Device | +
|---|---|
| [% row.backend | html_entity %] | +[% row.device | html_entity %] | +