Skip to content

Commit

Permalink
added enable_log_worker flag fot disbale logger worker
Browse files Browse the repository at this point in the history
  • Loading branch information
kazeburo committed Feb 14, 2013
1 parent c101d43 commit 8c7a9e9
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 9 deletions.
35 changes: 26 additions & 9 deletions lib/Proclet.pm
Expand Up @@ -71,6 +71,12 @@ has 'logger' => (
required => 0,
);

has 'enable_log_worker' => (
is => 'ro',
isa => 'Int',
default => 1,
);

my $rule = Data::Validator->new(
code => { isa => 'Proclet::Service', coerce => 1 },
worker => { isa => 'ServiceProcs', default => 1 },
Expand Down Expand Up @@ -107,19 +113,21 @@ sub run {
for my $i ( 1..$worker ) {
my $sid = $service->{tag} . '.' . $i;

$services{$sid} = {
%$service,
pipe => $self->create_pipe,
$services{$sid} = { %$service };
if ( $self->enable_log_worker ) {
$services{$sid}->{pipe} = $self->create_pipe;
};
push @services, $sid;
}
}
croak('no services exists') if ! @services;

$services{$LOGGER} = {
code => $self->log_worker(),
};
push @services, $LOGGER;
if ( $self->enable_log_worker ) {
$services{$LOGGER} = {
code => $self->log_worker(),
};
push @services, $LOGGER;
}

my $next;
my %pid2service;
Expand Down Expand Up @@ -157,7 +165,7 @@ sub run {
local $Log::Minimal::AUTODUMP = 1;
debugf "[Proclet] before_fork: running => %s", \%running;
my $pm = shift;
if ( ! exists $running{$LOGGER} ) {
if ( $self->enable_log_worker && ! exists $running{$LOGGER} ) {
$next = $LOGGER;
}
else {
Expand Down Expand Up @@ -189,7 +197,10 @@ sub run {
$pm->start( sub {
if ( defined $next ) {
my $service = delete $services{$next};
if ( $service->{pipe} ) {
if ( ! $self->enable_log_worker ) {
$service->{code}->();
}
elsif ( $service->{pipe} ) {
undef %services;
my $logwh = $service->{pipe}->[1];
close $service->{pipe}->[0];
Expand All @@ -200,6 +211,7 @@ sub run {
$service->{code}->();
}
else {
# logworker
$service->{code}->(\%services);
}
}
Expand Down Expand Up @@ -360,6 +372,11 @@ colored log (default: 0)
Sets a callback to print stdout/stderr. uses warn by default.
=item enable_log_worker: Bool
enable worker for format logs. (default: 1)
If disabled this option, cannot use logger opt too.
=back
=item service
Expand Down
37 changes: 37 additions & 0 deletions t/04_disable_log.t
@@ -0,0 +1,37 @@
use strict;
use Test::More;
use Proclet;
use Test::Requires {
'Capture::Tiny' => '0.21',
};
use File::Temp qw/tempdir/;

my $stderr = Capture::Tiny::capture_stderr {
my $pid = fork();
die "cannot fork: $!" if ! defined $pid;
if ( $pid == 0 ) {
my $proclet = Proclet->new(
enable_log_worker => 0,
);
$proclet->service(
code => sub {
warn 'proclet disable log';
sleep 1;
},
);
$proclet->run;
exit;
}
sleep 3;
kill 'TERM', $pid;
waitpid( $pid, 0);
};

my $ok = 0;
for my $l ( split /\n/, $stderr ) {
like $l, qr/^proclet disable log\sat/;
$ok++ if $l =~ m!^proclet\sat!;
}
ok($ok);
done_testing();

0 comments on commit 8c7a9e9

Please sign in to comment.