1package App::Netdisco::Worker::Plugin::DiscoverAll;
2
3use Dancer ':syntax';
4use App::Netdisco::Worker::Plugin;
5use aliased 'App::Netdisco::Worker::Status';
6
7use App::Netdisco::JobQueue qw/jq_queued jq_insert/;
8use Dancer::Plugin::DBIC 'schema';
9
10register_worker({ phase => 'main' }, sub {
11  my ($job, $workerconf) = @_;
12
13  my %queued = map {$_ => 1} jq_queued('discover');
14  my @devices = schema('netdisco')->resultset('Device')->search({
15    -or => [ 'vendor' => undef, 'vendor' => { '!=' => 'netdisco' }],
16  })->get_column('ip')->all;
17  my @filtered_devices = grep {!exists $queued{$_}} @devices;
18
19  jq_insert([
20    map {{
21      device => $_,
22      action => 'discover',
23      username => $job->username,
24      userip => $job->userip,
25    }} (@filtered_devices)
26  ]);
27
28  return Status->done('Queued discover job for all devices');
29});
30
31true;
32