diff --git a/lib/App/Netdisco/Worker/Plugin.pm b/lib/App/Netdisco/Worker/Plugin.pm index 149d70bf..74217961 100644 --- a/lib/App/Netdisco/Worker/Plugin.pm +++ b/lib/App/Netdisco/Worker/Plugin.pm @@ -28,9 +28,9 @@ register 'register_worker' => sub { } else { return error "worker Package does not match standard naming" } - $workerconf->{action} = $action; - $workerconf->{phase} = ($phase || '00init'); - $workerconf->{primary} = ($workerconf->{primary} ? true : false); + $workerconf->{action} = $action; + $workerconf->{phase} = ($phase || ''); + $workerconf->{stage} = ($workerconf->{stage} || 'second'); my $worker = sub { my $job = shift or return Status->error('missing job param'); @@ -64,18 +64,16 @@ register 'register_worker' => sub { return $code->($job, $workerconf); }; - my $primary = ($workerconf->{primary} ? '_primary' : ''); - my $hook = 'nd2_'. $action .'_'. $workerconf->{phase} . $primary; my $store = Dancer::Factory::Hook->instance(); + my $hook = 'nd2_'. $action . ($phase ? ('_'. $phase) : ''); if (not $store->hook_is_registered($hook)) { $store->install_hooks($hook); - # track just the basic phase names which are used - push @{ setting('_nd2worker_hooks') }, $hook - if $workerconf->{phase} ne '00init' and 0 == length($primary); + push @{ setting('_nd2worker_hooks') }, $hook; } # D::Factory::Hook::register_hook() does not work?! + $hook = $hook .'_'. $workerconf->{stage}; hook $hook => $worker; }; diff --git a/lib/App/Netdisco/Worker/Plugin/Arpnip.pm b/lib/App/Netdisco/Worker/Plugin/Arpnip.pm index 0bc3e7fa..1d820c5e 100644 --- a/lib/App/Netdisco/Worker/Plugin/Arpnip.pm +++ b/lib/App/Netdisco/Worker/Plugin/Arpnip.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Device 'is_arpnipable_now'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Arpnip/Nodes.pm b/lib/App/Netdisco/Worker/Plugin/Arpnip/Nodes.pm index cbae6786..c15d5427 100644 --- a/lib/App/Netdisco/Worker/Plugin/Arpnip/Nodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/Arpnip/Nodes.pm @@ -11,7 +11,7 @@ use Dancer::Plugin::DBIC 'schema'; use Time::HiRes 'gettimeofday'; use NetAddr::MAC (); -register_worker({ primary => true, driver => 'snmp' }, sub { +register_worker({ stage => 'init', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Arpnip/Subnets.pm b/lib/App/Netdisco/Worker/Plugin/Arpnip/Subnets.pm index 3c0cb43a..824b84fc 100644 --- a/lib/App/Netdisco/Worker/Plugin/Arpnip/Subnets.pm +++ b/lib/App/Netdisco/Worker/Plugin/Arpnip/Subnets.pm @@ -10,7 +10,7 @@ use Dancer::Plugin::DBIC 'schema'; use NetAddr::IP::Lite ':lower'; use Time::HiRes 'gettimeofday'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Arpwalk.pm b/lib/App/Netdisco/Worker/Plugin/Arpwalk.pm index 44ee47bc..c8ee9dd2 100644 --- a/lib/App/Netdisco/Worker/Plugin/Arpwalk.pm +++ b/lib/App/Netdisco/Worker/Plugin/Arpwalk.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::JobQueue qw/jq_queued jq_insert/; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my %queued = map {$_ => 1} jq_queued('arpnip'); diff --git a/lib/App/Netdisco/Worker/Plugin/Delete.pm b/lib/App/Netdisco/Worker/Plugin/Delete.pm index b2f857de..1b8078fa 100644 --- a/lib/App/Netdisco/Worker/Plugin/Delete.pm +++ b/lib/App/Netdisco/Worker/Plugin/Delete.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Device 'delete_device'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my ($device, $port, $extra) = map {$job->$_} qw/device port extra/; return Status->error('Missing device (-d).') if !defined $device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover.pm b/lib/App/Netdisco/Worker/Plugin/Discover.pm index 5775f6b6..79474023 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Device 'is_discoverable_now'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/CanonicalIP.pm b/lib/App/Netdisco/Worker/Plugin/Discover/CanonicalIP.pm index b597635d..539ca4eb 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/CanonicalIP.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/CanonicalIP.pm @@ -9,7 +9,7 @@ use App::Netdisco::Util::Permission 'check_acl_only'; use App::Netdisco::Util::DNS 'ipv4_from_hostname'; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Entities.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Entities.pm index 5b76e2aa..02411ce0 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Entities.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Entities.pm @@ -8,7 +8,7 @@ use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; use Encode; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Interfaces.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Interfaces.pm index 9cca662f..cd0f56de 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Interfaces.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Interfaces.pm @@ -8,7 +8,7 @@ use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; use Encode; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'first', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm index 5fab7507..f62d67b4 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Neighbors.pm @@ -30,7 +30,7 @@ immediately queued (subject to the filtering by the C settings). =cut -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/PortPower.pm b/lib/App/Netdisco/Worker/Plugin/Discover/PortPower.pm index 1ad2bf50..e3273377 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/PortPower.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/PortPower.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Properties.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Properties.pm index 8f19845e..7c636ce5 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Properties.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Properties.pm @@ -12,7 +12,7 @@ use Dancer::Plugin::DBIC 'schema'; use NetAddr::IP::Lite ':lower'; use Encode; -register_worker({ primary => true, driver => 'snmp' }, sub { +register_worker({ stage => 'init', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm index 191f8733..1dd1af12 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/Wireless.pm b/lib/App/Netdisco/Worker/Plugin/Discover/Wireless.pm index 8869c8ff..c535872a 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/Wireless.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/Wireless.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/WithNodes.pm b/lib/App/Netdisco/Worker/Plugin/Discover/WithNodes.pm index 37011e86..71d200f3 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/WithNodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/WithNodes.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => false }, sub { +register_worker({ stage => 'second' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/DiscoverAll.pm b/lib/App/Netdisco/Worker/Plugin/DiscoverAll.pm index db15db6e..07472fb6 100644 --- a/lib/App/Netdisco/Worker/Plugin/DiscoverAll.pm +++ b/lib/App/Netdisco/Worker/Plugin/DiscoverAll.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::JobQueue qw/jq_queued jq_insert/; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my %queued = map {$_ => 1} jq_queued('discover'); diff --git a/lib/App/Netdisco/Worker/Plugin/Expire.pm b/lib/App/Netdisco/Worker/Plugin/Expire.pm index 8647249f..ded1bbb4 100644 --- a/lib/App/Netdisco/Worker/Plugin/Expire.pm +++ b/lib/App/Netdisco/Worker/Plugin/Expire.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use Dancer::Plugin::DBIC 'schema'; use App::Netdisco::Util::Statistics 'update_stats'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; if (setting('expire_devices') and setting('expire_devices') > 0) { diff --git a/lib/App/Netdisco/Worker/Plugin/ExpireNodes.pm b/lib/App/Netdisco/Worker/Plugin/ExpireNodes.pm index ddd848cf..c8df685c 100644 --- a/lib/App/Netdisco/Worker/Plugin/ExpireNodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/ExpireNodes.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; return Status->error('nbtstat failed: unable to interpret device param') diff --git a/lib/App/Netdisco/Worker/Plugin/Graph.pm b/lib/App/Netdisco/Worker/Plugin/Graph.pm index 4d677df9..8e0f20f6 100644 --- a/lib/App/Netdisco/Worker/Plugin/Graph.pm +++ b/lib/App/Netdisco/Worker/Plugin/Graph.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Graph (); -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; App::Netdisco::Util::Graph::graph(); return Status->done('Generated graph data.'); diff --git a/lib/App/Netdisco/Worker/Plugin/Macsuck.pm b/lib/App/Netdisco/Worker/Plugin/Macsuck.pm index 933c397e..b760070c 100644 --- a/lib/App/Netdisco/Worker/Plugin/Macsuck.pm +++ b/lib/App/Netdisco/Worker/Plugin/Macsuck.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Device 'is_macsuckable_now'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm b/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm index 5e24f2e8..15258238 100644 --- a/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/Macsuck/Nodes.pm @@ -14,7 +14,7 @@ use Dancer::Plugin::DBIC 'schema'; use Time::HiRes 'gettimeofday'; use Scope::Guard 'guard'; -register_worker({ primary => true, driver => 'snmp' }, sub { +register_worker({ stage => 'init', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Macsuck/WirelessNodes.pm b/lib/App/Netdisco/Worker/Plugin/Macsuck/WirelessNodes.pm index cfcfc6d6..bb638d9b 100644 --- a/lib/App/Netdisco/Worker/Plugin/Macsuck/WirelessNodes.pm +++ b/lib/App/Netdisco/Worker/Plugin/Macsuck/WirelessNodes.pm @@ -8,7 +8,7 @@ use App::Netdisco::Transport::SNMP (); use Dancer::Plugin::DBIC 'schema'; use Time::HiRes 'gettimeofday'; -register_worker({ primary => false, driver => 'snmp' }, sub { +register_worker({ stage => 'second', driver => 'snmp' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; diff --git a/lib/App/Netdisco/Worker/Plugin/Macwalk.pm b/lib/App/Netdisco/Worker/Plugin/Macwalk.pm index e590e24d..867425fe 100644 --- a/lib/App/Netdisco/Worker/Plugin/Macwalk.pm +++ b/lib/App/Netdisco/Worker/Plugin/Macwalk.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::JobQueue qw/jq_queued jq_insert/; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my %queued = map {$_ => 1} jq_queued('macsuck'); diff --git a/lib/App/Netdisco/Worker/Plugin/Monitor.pm b/lib/App/Netdisco/Worker/Plugin/Monitor.pm index ddf5de29..fcc02937 100644 --- a/lib/App/Netdisco/Worker/Plugin/Monitor.pm +++ b/lib/App/Netdisco/Worker/Plugin/Monitor.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::NodeMonitor (); -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; App::Netdisco::Util::NodeMonitor::monitor(); return Status->done('Generated monitor data.'); diff --git a/lib/App/Netdisco/Worker/Plugin/Nbtstat.pm b/lib/App/Netdisco/Worker/Plugin/Nbtstat.pm index 8c28488a..50ccda59 100644 --- a/lib/App/Netdisco/Worker/Plugin/Nbtstat.pm +++ b/lib/App/Netdisco/Worker/Plugin/Nbtstat.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Device 'is_macsuckable'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; return Status->error('nbtstat failed: unable to interpret device param') diff --git a/lib/App/Netdisco/Worker/Plugin/Nbtstat/Core.pm b/lib/App/Netdisco/Worker/Plugin/Nbtstat/Core.pm index e47ef8da..522675d7 100644 --- a/lib/App/Netdisco/Worker/Plugin/Nbtstat/Core.pm +++ b/lib/App/Netdisco/Worker/Plugin/Nbtstat/Core.pm @@ -9,7 +9,7 @@ use App::Netdisco::Util::Node 'is_nbtstatable'; use Dancer::Plugin::DBIC 'schema'; use Time::HiRes 'gettimeofday'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my $host = $job->device->ip; diff --git a/lib/App/Netdisco/Worker/Plugin/Nbtwalk.pm b/lib/App/Netdisco/Worker/Plugin/Nbtwalk.pm index 60463363..5a61ea23 100644 --- a/lib/App/Netdisco/Worker/Plugin/Nbtwalk.pm +++ b/lib/App/Netdisco/Worker/Plugin/Nbtwalk.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::JobQueue qw/jq_queued jq_insert/; use Dancer::Plugin::DBIC 'schema'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my %queued = map {$_ => 1} jq_queued('nbtstat'); diff --git a/lib/App/Netdisco/Worker/Plugin/Psql.pm b/lib/App/Netdisco/Worker/Plugin/Psql.pm index ce4fc4ef..bdbf4d2e 100644 --- a/lib/App/Netdisco/Worker/Plugin/Psql.pm +++ b/lib/App/Netdisco/Worker/Plugin/Psql.pm @@ -4,7 +4,7 @@ use Dancer ':syntax'; use App::Netdisco::Worker::Plugin; use aliased 'App::Netdisco::Worker::Status'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my ($device, $port, $extra) = map {$job->$_} qw/device port extra/; diff --git a/lib/App/Netdisco/Worker/Plugin/Renumber.pm b/lib/App/Netdisco/Worker/Plugin/Renumber.pm index 5e3f9007..6b27b2ec 100644 --- a/lib/App/Netdisco/Worker/Plugin/Renumber.pm +++ b/lib/App/Netdisco/Worker/Plugin/Renumber.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use NetAddr::IP qw/:rfc3021 :lower/; use App::Netdisco::Util::Device qw/get_device renumber_device/; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my ($device, $port, $extra) = map {$job->$_} qw/device port extra/; return Status->error('Missing device (-d).') if !defined $device; diff --git a/lib/App/Netdisco/Worker/Plugin/Show.pm b/lib/App/Netdisco/Worker/Plugin/Show.pm index 0b1d3e7f..d81310c4 100644 --- a/lib/App/Netdisco/Worker/Plugin/Show.pm +++ b/lib/App/Netdisco/Worker/Plugin/Show.pm @@ -7,7 +7,7 @@ use aliased 'App::Netdisco::Worker::Status'; use Data::Printer (); use App::Netdisco::Transport::SNMP; -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; my ($device, $port, $extra) = map {$job->$_} qw/device port extra/; return Status->error('Missing device (-d).') if !defined $device; diff --git a/lib/App/Netdisco/Worker/Plugin/Stats.pm b/lib/App/Netdisco/Worker/Plugin/Stats.pm index 3dbc4eae..b59796b4 100644 --- a/lib/App/Netdisco/Worker/Plugin/Stats.pm +++ b/lib/App/Netdisco/Worker/Plugin/Stats.pm @@ -6,7 +6,7 @@ use aliased 'App::Netdisco::Worker::Status'; use App::Netdisco::Util::Statistics (); -register_worker({ primary => true }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; App::Netdisco::Util::Statistics::update_stats(); return Status->done('Updated statistics.'); diff --git a/lib/App/Netdisco/Worker/Plugin/Test.pm b/lib/App/Netdisco/Worker/Plugin/Test.pm index 8b9c0ba5..70bb7cf0 100644 --- a/lib/App/Netdisco/Worker/Plugin/Test.pm +++ b/lib/App/Netdisco/Worker/Plugin/Test.pm @@ -4,16 +4,28 @@ use Dancer ':syntax'; use App::Netdisco::Worker::Plugin; use aliased 'App::Netdisco::Worker::Status'; -register_worker({ primary => true }, sub { +register_worker({ stage => 'second' }, sub { my ($job, $workerconf) = @_; - debug 'Test (primary) ran successfully.'; - return Status->done('Test (primary) ran successfully.'); + debug 'Test (second) ran successfully.'; + return Status->done('Test (second) ran successfully.'); }); -register_worker({ primary => false }, sub { +register_worker({ stage => 'init' }, sub { my ($job, $workerconf) = @_; - debug 'Test ran successfully.'; - return Status->done('Test ran successfully.'); + debug 'Test (init) ran successfully.'; + return Status->done('Test (init) ran successfully.'); +}); + +register_worker({ stage => 'first' }, sub { + my ($job, $workerconf) = @_; + debug 'Test (first) ran successfully.'; + return Status->done('Test (first) ran successfully.'); +}); + +register_worker(sub { + my ($job, $workerconf) = @_; + debug 'Test (undefined) ran successfully.'; + return Status->done('Test (undefined) ran successfully.'); }); true; diff --git a/lib/App/Netdisco/Worker/Runner.pm b/lib/App/Netdisco/Worker/Runner.pm index f98e120a..35da00eb 100644 --- a/lib/App/Netdisco/Worker/Runner.pm +++ b/lib/App/Netdisco/Worker/Runner.pm @@ -59,32 +59,32 @@ sub run { my $guard = guard { set(device_auth => \@userconf) }; set(device_auth => \@newuserconf); + my $store = Dancer::Factory::Hook->instance(); my @phase_hooks = grep { m/^nd2_${action}_/ } @{ (setting('_nd2worker_hooks') || []) }; - # run 00init primary - my $store = Dancer::Factory::Hook->instance(); - my $initprimary = "nd2_${action}_00init_primary"; - if (scalar @{ $store->get_hooks_for($initprimary) }) { - $self->run_workers($initprimary); - return if $self->jobstat->not_ok; + foreach my $stage (qw/init first second/) { + my $hookname = "nd2_${action}_${stage}"; + next unless scalar @{ $store->get_hooks_for($hookname) }; + $self->run_workers($hookname); + last if $stage eq 'init' and $self->jobstat->not_ok; } - # run each 00init worker - $self->run_workers("nd2_${action}_00init"); - - # run primary - $self->run_workers("${_}_primary") for (@phase_hooks); - - # run each worker - $self->run_workers($_) for (@phase_hooks); + foreach my $phase (@phase_hooks) { + foreach my $stage (qw/init first second/) { + my $hookname = "${phase}_${stage}"; + next unless scalar @{ $store->get_hooks_for($hookname) }; + $self->run_workers($hookname); + last if $stage eq 'init' and $self->jobstat->not_ok; + } + } } sub run_workers { my $self = shift; my $hook = shift or return $self->jobstat->error('missing hook param'); my $store = Dancer::Factory::Hook->instance(); - my $primary = ($hook =~ m/_primary$/); + my $init = ($hook =~ m/_init$/); return unless scalar @{ $store->get_hooks_for($hook) }; debug "running workers for hook: $hook"; @@ -93,11 +93,12 @@ sub run_workers { try { my $retval = $worker->($self->job); # could die or return undef or a scalar or Status or another class - $self->jobstat($retval) if ref $retval eq 'App::Netdisco::Worker::Status'; + $self->jobstat($retval) + if $init and ref $retval eq 'App::Netdisco::Worker::Status'; } - catch { $self->jobstat->error($_) }; + catch { $self->jobstat->error($_) if $init }; - last if $primary and $self->jobstat->is_ok; + last if $init and $self->jobstat->is_ok; } }