package POEDaemon::WheelRun::Restart; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use POE; use POEDaemon; sub states { return $_[0], [qw( restart_childexit restart restart_stdout_line restart_stderr_line )]; } sub restart_childexit { my ($kernel, $session, $heap, $args) = @_[KERNEL, SESSION, HEAP, ARG0]; my $exitcode = $args->{exitcode}; #log_enabled && logline "exitcode = '%s'", $exitcode; my $wheel_id = $heap->{restart}->{source_wheel_id}; return unless $wheel_id && $heap->{tcpserver}->{connections}->{$wheel_id}->{wheel}; my $output = sprintf "exitcode: %s", $exitcode; $kernel->call($session => tcpserver_output => { wheel_id => $wheel_id, output => $output, }); } sub restart { my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0]; $heap->{restart}->{source_wheel_id} = $args->{source_wheel_id} || return; my $argv0_orig = $heap->{argv0_orig}; unless ($argv0_orig =~ /^[a-z0-9\/\.\-]{3,255}$/i) { log_enabled && logline "invalid argv0_orig = '%s'", $argv0_orig; return; } my $prog = [ 'util/daemonrestart.sh', $argv0_orig, $$, ]; $kernel->yield(wheelrun_exec => { prog => $prog, name => 'restart', stdout_event => 'restart_stdout_line', stderr_event => 'restart_stderr_line', }); } sub restart_stdout_line { my ($kernel, $session, $heap, $line) = @_[KERNEL, SESSION, HEAP, ARG0]; #log_enabled && logline "line = '%s'", $line; my $wheel_id = $heap->{restart}->{source_wheel_id}; return unless $wheel_id && $heap->{tcpserver}->{connections}->{$wheel_id}->{wheel}; my $output = sprintf "STDOUT: %s", $line; $kernel->call($session => tcpserver_output => { wheel_id => $wheel_id, output => $output, }); } sub restart_stderr_line { my ($kernel, $session, $heap, $line) = @_[KERNEL, SESSION, HEAP, ARG0]; #log_enabled && logline "line = '%s'", $line; my $wheel_id = $heap->{restart}->{source_wheel_id}; return unless $wheel_id && $heap->{tcpserver}->{connections}->{$wheel_id}->{wheel}; my $output = sprintf "STDERR: %s", $line; $kernel->call($session => tcpserver_output => { wheel_id => $wheel_id, output => $output, }); } 1;