App-Netdisco
view release on metacpan or search on metacpan
bin/netdisco-backend-fg view on Meta::CPAN
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
FindBin::again();
use Path::Class 'dir';
BEGIN {
# stuff useful locations into @INC
unshift @INC,
dir($FindBin::RealBin)->parent->subdir('lib')->stringify,
dir($FindBin::RealBin, 'lib')->stringify;
unshift @INC,
split m/:/, ($ENV{NETDISCO_INC} || '');
}
use App::Netdisco;
use Dancer qw/:moose :script/;
BEGIN {
warning sprintf "App::Netdisco %s backend", ($App::Netdisco::VERSION || 'HEAD');
# this can take a few seconds - only do it once
use Net::Domain 'hostfqdn';
info 'resolving backend hostname...';
setting('workers')->{'BACKEND'} ||= ($ENV{NETDISCO_BACKEND_NAME} || hostfqdn || 'fqdn-undefined');
}
use App::Netdisco::Util::MCE; # set $0 and parse maxworkers
use NetAddr::IP::Lite ':lower'; # to quench AF_INET6 symbol errors
use Role::Tiny::With;
use MCE::Signal '-setpgrp';
use MCE::Flow Sereal => 1;
use MCE::Queue porder => $MCE::Queue::HIGHEST,
type => $MCE::Queue::FIFO;
# set temporary MCE files' location in home directory
my $home = ($ENV{NETDISCO_HOME} || $ENV{HOME});
my $tmp_dir = ($ENV{NETDISCO_TEMP} || dir($home, 'tmp'));
mkdir $tmp_dir if ! -d $tmp_dir;
# process-table text
prctl 'nd2: master';
# shared local job queue
my $queue = MCE::Queue->new;
# support a scheduler-only node
setting('workers')->{'no_manager'} = 1
if setting('workers')->{tasks} eq '0';
# MCE::Util has a limit of ncpu if AUTO is used in max_workers,
# so we parse the field ourselves.
my $max_workers = parse_max_workers( setting('workers')->{tasks} ) || 0;
my @task_names = qw/ scheduler manager poller /;
my @task_workers = ( 1, 1, $max_workers );
my @task_roles = (_mk_wkr('Scheduler'), _mk_wkr('Manager'), _mk_wkr('Poller'));
if (!defined setting('schedule')) {
shift @task_names; shift @task_workers; shift @task_roles;
}
warning sprintf "mode: %s%s | host: %s",
(!defined setting('schedule') ? 'worker-only'
: $max_workers == 0 ? 'scheduler'
: 'scheduler+worker'),
($max_workers ? " | workers: $max_workers" : ''),
(setting('workers')->{'BACKEND'} || 'unknown');
mce_flow {
task_name => \@task_names,
max_workers => \@task_workers,
( run in 0.578 second using v1.01-cache-2.11-cpan-f4a522933cf )