#1084 move slow skiplist build to the first job on running backend
This commit is contained in:
@@ -7,6 +7,17 @@ use aliased 'App::Netdisco::Worker::Status';
|
||||
use App::Netdisco::JobQueue 'jq_insert';
|
||||
use Dancer::Plugin::DBIC 'schema';
|
||||
|
||||
register_worker({ phase => 'check' }, sub {
|
||||
return Status->defer("arpwalk skipped: have not yet primed skiplist")
|
||||
unless schema(vars->{'tenant'})->resultset('DeviceSkip')
|
||||
->search({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => '255.255.255.255',
|
||||
})->count();
|
||||
|
||||
return Status->done('Arpwalk is able to run');
|
||||
});
|
||||
|
||||
register_worker({ phase => 'main' }, sub {
|
||||
my ($job, $workerconf) = @_;
|
||||
|
||||
|
||||
@@ -7,6 +7,17 @@ use aliased 'App::Netdisco::Worker::Status';
|
||||
use App::Netdisco::JobQueue 'jq_insert';
|
||||
use Dancer::Plugin::DBIC 'schema';
|
||||
|
||||
register_worker({ phase => 'check' }, sub {
|
||||
return Status->defer("discoverall skipped: have not yet primed skiplist")
|
||||
unless schema(vars->{'tenant'})->resultset('DeviceSkip')
|
||||
->search({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => '255.255.255.255',
|
||||
})->count();
|
||||
|
||||
return Status->done('Discoverall is able to run');
|
||||
});
|
||||
|
||||
register_worker({ phase => 'main' }, sub {
|
||||
my ($job, $workerconf) = @_;
|
||||
|
||||
|
||||
@@ -7,6 +7,17 @@ use aliased 'App::Netdisco::Worker::Status';
|
||||
use App::Netdisco::JobQueue 'jq_insert';
|
||||
use Dancer::Plugin::DBIC 'schema';
|
||||
|
||||
register_worker({ phase => 'check' }, sub {
|
||||
return Status->defer("macwalk skipped: have not yet primed skiplist")
|
||||
unless schema(vars->{'tenant'})->resultset('DeviceSkip')
|
||||
->search({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => '255.255.255.255',
|
||||
})->count();
|
||||
|
||||
return Status->done('Macwalk is able to run');
|
||||
});
|
||||
|
||||
register_worker({ phase => 'main' }, sub {
|
||||
my ($job, $workerconf) = @_;
|
||||
|
||||
|
||||
@@ -7,6 +7,17 @@ use aliased 'App::Netdisco::Worker::Status';
|
||||
use App::Netdisco::JobQueue 'jq_insert';
|
||||
use Dancer::Plugin::DBIC 'schema';
|
||||
|
||||
register_worker({ phase => 'check' }, sub {
|
||||
return Status->defer("nbtwalk skipped: have not yet primed skiplist")
|
||||
unless schema(vars->{'tenant'})->resultset('DeviceSkip')
|
||||
->search({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => '255.255.255.255',
|
||||
})->count();
|
||||
|
||||
return Status->done('Nbtwalk is able to run');
|
||||
});
|
||||
|
||||
register_worker({ phase => 'main' }, sub {
|
||||
my ($job, $workerconf) = @_;
|
||||
|
||||
|
||||
60
lib/App/Netdisco/Worker/Plugin/PrimeSkiplist.pm
Normal file
60
lib/App/Netdisco/Worker/Plugin/PrimeSkiplist.pm
Normal file
@@ -0,0 +1,60 @@
|
||||
package App::Netdisco::Worker::Plugin::PrimeSkiplist;
|
||||
|
||||
use Dancer ':syntax';
|
||||
use Dancer::Plugin::DBIC 'schema';
|
||||
|
||||
use App::Netdisco::Worker::Plugin;
|
||||
use aliased 'App::Netdisco::Worker::Status';
|
||||
|
||||
use App::Netdisco::Util::Device 'get_denied_actions';
|
||||
use App::Netdisco::Backend::Job;
|
||||
|
||||
use Try::Tiny;
|
||||
|
||||
register_worker({ phase => 'main' }, sub {
|
||||
my ($job, $workerconf) = @_;
|
||||
my $happy = false;
|
||||
|
||||
my $devices = schema(vars->{'tenant'})->resultset('Device');
|
||||
my $rs = schema(vars->{'tenant'})->resultset('DeviceSkip');
|
||||
my %actionset = ();
|
||||
|
||||
while (my $d = $devices->next) {
|
||||
my @badactions = get_denied_actions($d);
|
||||
$actionset{$d->ip} = \@badactions if scalar @badactions;
|
||||
}
|
||||
|
||||
debug sprintf 'priming device action skip list for %d devices',
|
||||
scalar keys %actionset;
|
||||
|
||||
try {
|
||||
schema(vars->{'tenant'})->txn_do(sub {
|
||||
$rs->update_or_create({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => $_,
|
||||
actionset => $actionset{$_},
|
||||
}, { key => 'primary' }) for keys %actionset;
|
||||
});
|
||||
|
||||
# add one faux record to allow *walk actions to see there is a backend running
|
||||
$rs->update_or_create({
|
||||
backend => setting('workers')->{'BACKEND'},
|
||||
device => '255.255.255.255',
|
||||
last_defer => \'LOCALTIMESTAMP',
|
||||
}, { key => 'primary' });
|
||||
|
||||
$happy = true;
|
||||
}
|
||||
catch {
|
||||
error $_;
|
||||
};
|
||||
|
||||
if ($happy) {
|
||||
return Status->done("Primed device action skip list");
|
||||
}
|
||||
else {
|
||||
return Status->error("Failed to prime device action skip list");
|
||||
}
|
||||
});
|
||||
|
||||
true;
|
||||
Reference in New Issue
Block a user