1package App::Netdisco::Worker::Plugin::Discover::WithNodes;
2
3use Dancer ':syntax';
4use App::Netdisco::Worker::Plugin;
5use aliased 'App::Netdisco::Worker::Status';
6
7use App::Netdisco::JobQueue 'jq_insert';
8use Dancer::Plugin::DBIC 'schema';
9
10register_worker({ phase => 'main' }, sub {
11  my ($job, $workerconf) = @_;
12  my $device = $job->device;
13
14  # if requested, and the device has not yet been
15  arpniped/macsucked, queue those jobs now
16  return unless $device->in_storage and $job->subaction eq 'with-nodes';
17
18  if (!defined $device->last_macsuck and $device->has_layer(2)) {
19    jq_insert({
20      device => $device->ip,
21      action => 'macsuck',
22      username => $job->username,
23      userip => $job->userip,
24    });
25  }
26
27  if (!defined $device->last_arpnip and $device->has_layer(3)) {
28    jq_insert({
29      device => $device->ip,
30      action => 'arpnip',
31      username => $job->username,
32      userip => $job->userip,
33    });
34  }
35
36  return Status->info("Queued macsuck and arpnip for $device.");
37});
38
39true;
40