The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

POE::Component::RemoteTail - tail to remote server's access_log on ssh connection.

SYNOPSIS

  use POE;
  use POE::Component::RemoteTail;
  
  my ( $host, $path, $user ) = @target_host_info;
  
  # spawn component
  my $tailer = POE::Component::RemoteTail->spawn();
  
  # create job
  my $job = $tailer->job(
      host          => $host,
      path          => $path,
      user          => $user,
      ssh_options   => $ssh_options, # see POE::Component::RemoteTail::Job
      add_command   => $add_command, # see POE::Component::RemoteTail::Job
  );
  
  # prepare the postback subroutine at main POE session
  POE::Session->create(
      inline_states => {
          _start => sub {
              my ( $kernel, $session ) = @_[ KERNEL, SESSION ];
              # create postback_handler
              my $postback_handler = {
                  child_stdout => $session->postback("child_stdout"),
                  child_stderr => $session->postback("child_stderr"),
                  child_close  => $session->postback("child_close"),
              }; 
              # post to execute
              $kernel->post( tailer => start_tail => { 
                  job => $job, postback_handler => $postback_handler } );
          },
  
          # return to here
          child_stdout => sub {
              my ( $kernel, $session, $data ) = @_[ KERNEL, SESSION, ARG1 ];
              my $log  = $data->[0];
              my $host = $data->[1];
              ... do something ...;
          },
          child_stderr => sub {
              my $data          = $_[ARG1];
              my $error_message = $data->[0];
              ... do something ...;
          }
          child_close => sub {
              my $data        = $_[ARG1];
              my $closed_host = $data->[0];
              ... do something ...;
          }
      },
  );
  
  POE::Kernel->run();

DESCRIPTION

POE::Component::RemoteTail provides some loop events that tailing access_log on remote host. It replaces "ssh -A user@host tail -F access_log" by the same function. ( 'tail -F' is same as 'tail --follow=name --retry')

This moduel does not allow 'PasswordAuthentication'. Use RSA or DSA keys, or you must write your Custom Engine with this module. ( ex. POE::Component::RemoteTail::CustomEngine::NetSSHPerl.pm )

EXAMPLE

Unless you prepare the 'postback_handler', PoCo::RemoteTail outputs child process's STDOUT, STDERR and closed host name.

  use POE::Component::RemoteTail;
  
  my $tailer = POE::Component::RemoteTail->spawn();
  my $job = $tailer->job( host => $host, path => $path, user => $user );
  POE::Session->create(
      inlines_states => {
          _start => sub {
              $kernel->post($tailer->session_id, "start_tail" => {job => $job}); 
          },
      }
  );
  POE::Kernel->run();

It can tail several servers at the same time.

  use POE::Component::RemoteTail;
  
  my $tailer = POE::Component::RemoteTail->spawn(alias => $alias);

  my $job_1 = $tailer->job( host => $host1, path => $path, user => $user );
  my $job_2 = $tailer->job( host => $host2, path => $path, user => $user );

  POE::Session->create(
      inlines_states => {
          _start => sub {
              my $postback_handler = {
                  child_stdout => $session->postback("child_stdout"),
                  child_stderr => $session->postback("child_stderr"),
                  child_close  => $session->postback("child_close"),
              }; 
              $kernel->post($alias, "start_tail" => {job => $job_1, postback_handler => $postback_handler }); 
              $kernel->post($alias, "start_tail" => {job => $job_2, postback_handler => $postback_handler }); 
              $kernel->delay_add("stop_tail", 10, [ $job_1 ]);
              $kernel->delay_add("stop_tail", 20, [ $job_1 ]);
          },
          child_stdout => sub {
              my ( $kernel, $session, $data ) = @_[ KERNEL, SESSION, ARG1 ];
              my $log  = $data->[0];
              my $host = $data->[1];
              ... do something ...;
          },
          child_stderr => sub {
              my $data          = $_[ARG1];
              my $error_message = $data->[0];
              ... do something ...;
          }
          child_close => sub {
              my $data        = $_[ARG1];
              my $closed_host = $data->[0];
              ... do something ...;
          stop_tail => sub {
              my ( $kernel, $session, $arg ) = @_[ KERNEL, SESSION, ARG0 ];
              my $target_job = $arg->[0];
              $kernel->post( $alias, "stop_tail" => {job => $target_job});
          },
      },
  );
  POE::Kernel->run();

METHOD

spawn()

job()

start_tail()

stop_tail()

session_id()

debug()

new()

AUTHOR

Takeshi Miki <miki@cpan.org>

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO