Files
netdisco/lib/App/Netdisco/Worker/Loader.pm

66 lines
1.8 KiB
Perl
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package App::Netdisco::Worker::Loader;
use strict;
use warnings;
use Module::Load ();
use Dancer qw/:moose :syntax/;
use Moo::Role;
use namespace::clean;
has [qw/workers_check
workers_early
workers_main
workers_user
workers_store
workers_late
transport_required/] => ( is => 'rw' );
sub load_workers {
my $self = shift;
my $action = $self->job->action or die "missing action\n";
my @core_plugins = @{ setting('worker_plugins') || [] };
my @user_plugins = @{ setting('extra_worker_plugins') || [] };
# load worker plugins for our action
foreach my $plugin (@user_plugins, @core_plugins) {
$plugin =~ s/^X::/+App::NetdiscoX::Worker::Plugin::/;
$plugin = 'App::Netdisco::Worker::Plugin::'. $plugin
if $plugin !~ m/^\+/;
$plugin =~ s/^\+//;
next unless $plugin =~ m/::Plugin::(?:${action}|Internal)(?:::|$)/i;
$ENV{ND2_LOG_PLUGINS} && debug "loading worker plugin $plugin";
Module::Load::load $plugin;
}
# now vars->{workers} is populated, we set the dispatch order
my %workers = ( %{ vars->{'workers'}->{$action} || {} },
%{ vars->{'workers'}->{'internal'} || {} } );
my $driverless_main = 0;
# use DDP; p vars{'workers'}; p %workers;
foreach my $phase (qw/check early main user store late/) {
my $pname = "workers_${phase}";
my @wset = ();
foreach my $namespace (sort keys %{ $workers{$phase} }) {
foreach my $priority (sort {$b <=> $a}
keys %{ $workers{$phase}->{$namespace} }) {
++$driverless_main if $phase eq 'main'
and ($priority == 0 or $priority == setting('driver_priority')->{'direct'});
push @wset, @{ $workers{$phase}->{$namespace}->{$priority} };
}
}
$self->$pname( \@wset );
}
$self->transport_required( $driverless_main ? false : true );
}
true;