package POEDaemon::WheelRun::PS; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use POE; use POEDaemon; sub states { return $_[0], [qw( ps_childexit ps ps_stdout_line )]; } sub ps_childexit { my ($kernel, $session, $heap) = @_[KERNEL, SESSION, HEAP]; my $wheel_id = delete $heap->{ps}->{source_wheel_id}; delete $heap->{ps}; return unless $wheel_id && $heap->{tcpserver}->{connections}->{$wheel_id}->{wheel}; my $output = ''; $kernel->call($session => tcpserver_output => { wheel_id => $wheel_id, output => $output, }); } sub ps { my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG0]; $heap->{ps}->{source_wheel_id} = $args->{source_wheel_id} || return; $kernel->yield(wheelrun_exec => { prog => [ 'util/ps.sh' ], name => 'ps', stdout_event => 'ps_stdout_line', }); } sub ps_stdout_line { my ($kernel, $session, $heap, $line) = @_[KERNEL, SESSION, HEAP, ARG0]; #log_enabled && logline "line = '%s'", $line; my $wheel_id = $heap->{ps}->{source_wheel_id}; return unless $wheel_id && $heap->{tcpserver}->{connections}->{$wheel_id}->{wheel}; my $output = $line; $kernel->call($session => tcpserver_output => { wheel_id => $wheel_id, output => $output, }); } 1;