set up list of jobs the backend instance should skip

This commit is contained in:
Oliver Gorwits
2017-05-22 22:52:51 +01:00
parent 3a0019296d
commit 96ed444bbb
3 changed files with 59 additions and 1 deletions

View File

@@ -8,7 +8,8 @@ use App::Netdisco::Util::Backend;
use Role::Tiny; use Role::Tiny;
use namespace::clean; use namespace::clean;
use App::Netdisco::JobQueue qw/jq_locked jq_getsome jq_getsomep jq_lock/; use App::Netdisco::JobQueue
qw/jq_locked jq_getsome jq_getsomep jq_lock jq_prime_skiplist/;
sub worker_begin { sub worker_begin {
my $self = shift; my $self = shift;
@@ -19,6 +20,9 @@ sub worker_begin {
debug "entering Manager ($wid) worker_begin()"; debug "entering Manager ($wid) worker_begin()";
# rebuild device skip hints
jq_prime_skiplist;
# requeue jobs locally # requeue jobs locally
debug "mgr ($wid): searching for jobs booked to this processing node"; debug "mgr ($wid): searching for jobs booked to this processing node";
my @jobs = jq_locked; my @jobs = jq_locked;

View File

@@ -13,6 +13,7 @@ our @EXPORT_OK = qw/
jq_getsomep jq_getsomep
jq_locked jq_locked
jq_queued jq_queued
jq_prime_skiplist
jq_log jq_log
jq_userlog jq_userlog
jq_lock jq_lock
@@ -57,6 +58,12 @@ Netdisco job instance interface (see below).
Returns a list of IP addresses of devices which currently have a job of the Returns a list of IP addresses of devices which currently have a job of the
given C<$job_type> queued (e.g. C<discover>, C<arpnip>, etc). given C<$job_type> queued (e.g. C<discover>, C<arpnip>, etc).
=head2 jq_prime_skiplist()
Sets up a table of hints for the backend daemon manager to help avoid picking
jobs from the queue that it cannot process due to C<*_no> configuration
settings.
=head2 jq_log() =head2 jq_log()
Returns a list of the most recent 50 jobs in the queue. Jobs are returned as Returns a list of the most recent 50 jobs in the queue. Jobs are returned as

View File

@@ -3,7 +3,11 @@ package App::Netdisco::JobQueue::PostgreSQL;
use Dancer qw/:moose :syntax :script/; use Dancer qw/:moose :syntax :script/;
use Dancer::Plugin::DBIC 'schema'; use Dancer::Plugin::DBIC 'schema';
use App::Netdisco::Util::Device
qw/is_discoverable is_macsuckable is_arpnipable/;
use App::Netdisco::Backend::Job; use App::Netdisco::Backend::Job;
use Net::Domain 'hostfqdn'; use Net::Domain 'hostfqdn';
use Module::Load (); use Module::Load ();
use Try::Tiny; use Try::Tiny;
@@ -15,6 +19,7 @@ our @EXPORT_OK = qw/
jq_getsomep jq_getsomep
jq_locked jq_locked
jq_queued jq_queued
jq_prime_skiplist
jq_log jq_log
jq_userlog jq_userlog
jq_lock jq_lock
@@ -89,6 +94,48 @@ sub jq_queued {
})->get_column('device')->all; })->get_column('device')->all;
} }
sub jq_prime_skiplist {
my $fqdn = hostfqdn || 'localhost';
my $rs = schema('netdisco')->resultset('DeviceSkip');
my @d_actions = ('discover', @{ setting('job_prio')->{high} });
schema('netdisco')->txn_do(sub {
my @devices = schema('netdisco')->resultset('Device')->all;
$rs->search({ backend => $fqdn })->delete;
foreach my $action (@d_actions) {
$rs->populate([
map {{
backend => $fqdn,
device => $_->ip,
action => $action,
skipover => \'true',
}} grep { not is_discoverable($_) } @devices
]);
}
foreach my $action (qw/macsuck nbtstat/) {
$rs->populate([
map {{
backend => $fqdn,
device => $_->ip,
action => $action,
skipover => \'true',
}} grep { not is_macsuckable($_) } @devices
]);
}
$rs->populate([
map {{
backend => $fqdn,
device => $_->ip,
action => 'arpnip',
skipover => \'true',
}} grep { not is_arpnipable($_) } @devices
]);
});
}
sub jq_log { sub jq_log {
return schema('netdisco')->resultset('Admin')->search({}, { return schema('netdisco')->resultset('Admin')->search({}, {
order_by => { -desc => [qw/entered device action/] }, order_by => { -desc => [qw/entered device action/] },