portable setting of proctitle
This commit is contained in:
@@ -150,6 +150,7 @@ lib/App/Netdisco/Manual/Deployment.pod
|
|||||||
lib/App/Netdisco/Manual/Developing.pod
|
lib/App/Netdisco/Manual/Developing.pod
|
||||||
lib/App/Netdisco/Manual/ReleaseNotes.pod
|
lib/App/Netdisco/Manual/ReleaseNotes.pod
|
||||||
lib/App/Netdisco/Manual/WritingPlugins.pod
|
lib/App/Netdisco/Manual/WritingPlugins.pod
|
||||||
|
lib/App/Netdisco/Util/Daemon.pm
|
||||||
lib/App/Netdisco/Util/Device.pm
|
lib/App/Netdisco/Util/Device.pm
|
||||||
lib/App/Netdisco/Util/DNS.pm
|
lib/App/Netdisco/Util/DNS.pm
|
||||||
lib/App/Netdisco/Util/ExpandParams.pm
|
lib/App/Netdisco/Util/ExpandParams.pm
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ no_index:
|
|||||||
- inc
|
- inc
|
||||||
- share
|
- share
|
||||||
- t
|
- t
|
||||||
|
recommends:
|
||||||
|
Graph: 0
|
||||||
|
GraphViz: 0
|
||||||
requires:
|
requires:
|
||||||
Algorithm::Cron: 0.07
|
Algorithm::Cron: 0.07
|
||||||
AnyEvent: 7.05
|
AnyEvent: 7.05
|
||||||
@@ -36,6 +39,7 @@ requires:
|
|||||||
Dancer::Plugin::Auth::Extensible: 0.3
|
Dancer::Plugin::Auth::Extensible: 0.3
|
||||||
Dancer::Plugin::DBIC: 0.2001
|
Dancer::Plugin::DBIC: 0.2001
|
||||||
Dancer::Plugin::Passphrase: 2.0.1
|
Dancer::Plugin::Passphrase: 2.0.1
|
||||||
|
Data::Printer: 0
|
||||||
File::ShareDir: 1.03
|
File::ShareDir: 1.03
|
||||||
File::Slurp: 9999.19
|
File::Slurp: 9999.19
|
||||||
Guard: 1.022
|
Guard: 1.022
|
||||||
@@ -45,6 +49,7 @@ requires:
|
|||||||
List::MoreUtils: 0.33
|
List::MoreUtils: 0.33
|
||||||
MCE: 1.408
|
MCE: 1.408
|
||||||
MIME::Base64: 3.13
|
MIME::Base64: 3.13
|
||||||
|
Module::Find: 0.12
|
||||||
Module::Load: 0.32
|
Module::Load: 0.32
|
||||||
Moo: 1.001
|
Moo: 1.001
|
||||||
Net::DNS: 0.72
|
Net::DNS: 0.72
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ requires 'Socket6' => 0.23;
|
|||||||
requires 'Starman' => 0.4008;
|
requires 'Starman' => 0.4008;
|
||||||
requires 'SNMP::Info' => 3.18;
|
requires 'SNMP::Info' => 3.18;
|
||||||
requires 'SQL::Translator' => 0.11016;
|
requires 'SQL::Translator' => 0.11016;
|
||||||
requires 'Sys::Proctitle' => 0;
|
|
||||||
requires 'Template' => 2.24;
|
requires 'Template' => 2.24;
|
||||||
requires 'Template::Plugin::CSV' => 0.04;
|
requires 'Template::Plugin::CSV' => 0.04;
|
||||||
requires 'Template::Plugin::Number::Format' => 1.02;
|
requires 'Template::Plugin::Number::Format' => 1.02;
|
||||||
@@ -62,6 +61,10 @@ requires 'YAML::XS' => 0.41;
|
|||||||
requires 'namespace::clean' => 0.24;
|
requires 'namespace::clean' => 0.24;
|
||||||
requires 'version' => 0.9902;
|
requires 'version' => 0.9902;
|
||||||
|
|
||||||
|
if ( $^O eq 'linux' ) {
|
||||||
|
requires 'Sys::Proctitle' => 0;
|
||||||
|
}
|
||||||
|
|
||||||
recommends 'Graph' => 0;
|
recommends 'Graph' => 0;
|
||||||
recommends 'GraphViz' => 0;
|
recommends 'GraphViz' => 0;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ use warnings;
|
|||||||
use FindBin;
|
use FindBin;
|
||||||
FindBin::again();
|
FindBin::again();
|
||||||
use Path::Class 'dir';
|
use Path::Class 'dir';
|
||||||
use Sys::Proctitle 'setproctitle';
|
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# stuff useful locations into @INC
|
# stuff useful locations into @INC
|
||||||
@@ -24,6 +23,7 @@ warning sprintf "App::Netdisco %s backend", ($App::Netdisco::VERSION || 'HEAD');
|
|||||||
|
|
||||||
# local job queue management
|
# local job queue management
|
||||||
use App::Netdisco::Daemon::LocalQueue ':all';
|
use App::Netdisco::Daemon::LocalQueue ':all';
|
||||||
|
use App::Netdisco::Util::Daemon;
|
||||||
|
|
||||||
# needed to quench AF_INET6 symbol errors
|
# needed to quench AF_INET6 symbol errors
|
||||||
use NetAddr::IP::Lite ':lower';
|
use NetAddr::IP::Lite ':lower';
|
||||||
@@ -38,7 +38,7 @@ my $tmp_dir = ($ENV{NETDISCO_TEMP} || dir($home, 'tmp'));
|
|||||||
mkdir $tmp_dir if ! -d $tmp_dir;
|
mkdir $tmp_dir if ! -d $tmp_dir;
|
||||||
|
|
||||||
setpgrp(0,0); # only portable variety of setpgrp
|
setpgrp(0,0); # only portable variety of setpgrp
|
||||||
setproctitle 'netdisco-daemon: master';
|
prctl 'netdisco-daemon: master';
|
||||||
|
|
||||||
my $mce = MCE->new(
|
my $mce = MCE->new(
|
||||||
spawn_delay => 0.15,
|
spawn_delay => 0.15,
|
||||||
@@ -95,7 +95,7 @@ sub worker_factory {
|
|||||||
return sub {
|
return sub {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $wid = $self->wid;
|
my $wid = $self->wid;
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s %s: init', $wid, lc($role);
|
prctl sprintf 'netdisco-daemon: worker #%s %s: init', $wid, lc($role);
|
||||||
info "applying role $role to worker $wid";
|
info "applying role $role to worker $wid";
|
||||||
|
|
||||||
# $self->sendto('stderr', ">>> worker $wid starting with role $role\n");
|
# $self->sendto('stderr', ">>> worker $wid starting with role $role\n");
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package App::Netdisco::Daemon::Worker::Common;
|
|||||||
use Dancer qw/:moose :syntax :script/;
|
use Dancer qw/:moose :syntax :script/;
|
||||||
|
|
||||||
use Try::Tiny;
|
use Try::Tiny;
|
||||||
use Sys::Proctitle 'setproctitle';
|
use App::Netdisco::Util::Daemon;
|
||||||
|
|
||||||
use Role::Tiny;
|
use Role::Tiny;
|
||||||
use namespace::clean;
|
use namespace::clean;
|
||||||
@@ -18,7 +18,7 @@ sub worker_body {
|
|||||||
my $type = $self->worker_type;
|
my $type = $self->worker_type;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s %s: idle', $wid, lc($type);
|
prctl sprintf 'netdisco-daemon: worker #%s %s: idle', $wid, lc($type);
|
||||||
my $jobs = jq_take($self->wid, $type);
|
my $jobs = jq_take($self->wid, $type);
|
||||||
|
|
||||||
foreach my $job (@$jobs) {
|
foreach my $job (@$jobs) {
|
||||||
@@ -26,7 +26,7 @@ sub worker_body {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$job->started(scalar localtime);
|
$job->started(scalar localtime);
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s %s: working on #%s: %s',
|
prctl sprintf 'netdisco-daemon: worker #%s %s: working on #%s: %s',
|
||||||
$wid, lc($type), $job->id, $job->summary;
|
$wid, lc($type), $job->id, $job->summary;
|
||||||
info sprintf "$tag (%s): starting %s job(%s) at %s",
|
info sprintf "$tag (%s): starting %s job(%s) at %s",
|
||||||
$wid, $target, $job->id, $job->started;
|
$wid, $target, $job->id, $job->started;
|
||||||
@@ -51,7 +51,7 @@ sub close_job {
|
|||||||
my $type = $self->worker_type;
|
my $type = $self->worker_type;
|
||||||
my $now = scalar localtime;
|
my $now = scalar localtime;
|
||||||
|
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s %s: wrapping up %s #%s: %s',
|
prctl sprintf 'netdisco-daemon: worker #%s %s: wrapping up %s #%s: %s',
|
||||||
$self->wid, lc($type), $job->action, $job->id, $job->status;
|
$self->wid, lc($type), $job->action, $job->id, $job->status;
|
||||||
info sprintf "$tag (%s): wrapping up %s job(%s) - status %s at %s",
|
info sprintf "$tag (%s): wrapping up %s job(%s) - status %s at %s",
|
||||||
$self->wid, $job->action, $job->id, $job->status, $now;
|
$self->wid, $job->action, $job->id, $job->status, $now;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package App::Netdisco::Daemon::Worker::Manager;
|
|||||||
use Dancer qw/:moose :syntax :script/;
|
use Dancer qw/:moose :syntax :script/;
|
||||||
|
|
||||||
use List::Util 'sum';
|
use List::Util 'sum';
|
||||||
use Sys::Proctitle 'setproctitle';
|
use App::Netdisco::Util::Daemon;
|
||||||
|
|
||||||
use Role::Tiny;
|
use Role::Tiny;
|
||||||
use namespace::clean;
|
use namespace::clean;
|
||||||
@@ -42,7 +42,7 @@ sub worker_body {
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
debug "mgr ($wid): getting potential jobs for $num_slots workers";
|
debug "mgr ($wid): getting potential jobs for $num_slots workers";
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s manager: gathering', $wid;
|
prctl sprintf 'netdisco-daemon: worker #%s manager: gathering', $wid;
|
||||||
|
|
||||||
# get some pending jobs
|
# get some pending jobs
|
||||||
# TODO also check for stale jobs in Netdisco DB
|
# TODO also check for stale jobs in Netdisco DB
|
||||||
@@ -65,7 +65,7 @@ sub worker_body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
debug "mgr ($wid): sleeping now...";
|
debug "mgr ($wid): sleeping now...";
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s manager: idle', $wid;
|
prctl sprintf 'netdisco-daemon: worker #%s manager: idle', $wid;
|
||||||
sleep( setting('workers')->{sleep_time} || 2 );
|
sleep( setting('workers')->{sleep_time} || 2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package App::Netdisco::Daemon::Worker::Scheduler;
|
|||||||
use Dancer qw/:moose :syntax :script/;
|
use Dancer qw/:moose :syntax :script/;
|
||||||
|
|
||||||
use Algorithm::Cron;
|
use Algorithm::Cron;
|
||||||
use Sys::Proctitle 'setproctitle';
|
use App::Netdisco::Util::Daemon;
|
||||||
|
|
||||||
use Role::Tiny;
|
use Role::Tiny;
|
||||||
use namespace::clean;
|
use namespace::clean;
|
||||||
@@ -38,11 +38,11 @@ sub worker_body {
|
|||||||
# sleep until some point in the next minute
|
# sleep until some point in the next minute
|
||||||
my $naptime = 60 - (time % 60) + int(rand(45));
|
my $naptime = 60 - (time % 60) + int(rand(45));
|
||||||
|
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s scheduler: idle', $wid;
|
prctl sprintf 'netdisco-daemon: worker #%s scheduler: idle', $wid;
|
||||||
debug "sched ($wid): sleeping for $naptime seconds";
|
debug "sched ($wid): sleeping for $naptime seconds";
|
||||||
|
|
||||||
sleep $naptime;
|
sleep $naptime;
|
||||||
setproctitle sprintf 'netdisco-daemon: worker #%s scheduler: queueing', $wid;
|
prctl sprintf 'netdisco-daemon: worker #%s scheduler: queueing', $wid;
|
||||||
|
|
||||||
# NB next_time() returns the next *after* win_start
|
# NB next_time() returns the next *after* win_start
|
||||||
my $win_start = time - (time % 60) - 1;
|
my $win_start = time - (time % 60) - 1;
|
||||||
|
|||||||
21
Netdisco/lib/App/Netdisco/Util/Daemon.pm
Normal file
21
Netdisco/lib/App/Netdisco/Util/Daemon.pm
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package App::Netdisco::Util::Daemon;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Module::Load ();
|
||||||
|
eval { Module::Load::load 'Sys::Proctitle' };
|
||||||
|
|
||||||
|
use base 'Exporter';
|
||||||
|
our @EXPORT = 'prctl';
|
||||||
|
|
||||||
|
sub prctl {
|
||||||
|
if ($^O eq 'linux') {
|
||||||
|
Sys::Proctitle::setproctitle(shift);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$0 = shift;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
Reference in New Issue
Block a user