App-nrun
view release on metacpan or search on metacpan
lib/NRun/Filters/FilterAsync.pm view on Meta::CPAN
#
# Copyright 2013 Timo Benk
#
# This file is part of nrun.
#
# nrun is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# nrun is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with nrun. If not, see <http://www.gnu.org/licenses/>.
#
# Program: FilterAsync.pm
# Author: Timo Benk <benk@b1-systems.de>
# Date: Wed Jul 17 19:44:13 2013 +0200
# Ident: e81f2ed28d3a5b52045231c0700113b9349472fe
# Branch: master
#
# Changelog:--reverse --grep '^tags.*relevant':-1:%an : %ai : %s
#
# Timo Benk : 2013-06-13 13:59:01 +0200 : process output handling refined
# Timo Benk : 2013-06-13 20:32:17 +0200 : using __PACKAGE__ is less error-prone
# Timo Benk : 2013-06-14 17:38:58 +0200 : --no-hostname option removed
#
###
# this filter provides asynchronious command output.
###
package NRun::Filters::FilterAsync;
use strict;
use warnings;
use File::Basename;
use NRun::Filter;
our @ISA = qw(NRun::Filter);
BEGIN {
NRun::Filter::register ( {
'FILTER' => "async",
'DESC' => "dump the command output asynchroniously",
'NAME' => __PACKAGE__,
} );
}
###
# create a new object.
#
# <- the new object
sub new {
my $_pkg = shift;
my $_obj = shift;
my $self = {};
bless $self, $_pkg;
return $self;
}
###
# initialize this filter module.
sub init {
my $_self = shift;
}
###
# handle one line of data written on stdout.
#
# expected data format:
#
# HOSTNAME;[stdout|stderr];TSTAMP;PID;PID(CHILD);[debug|error|exit|output|end];"OUTPUT"
#
# $_data - the data to be handled
sub stdout {
my $_self = shift;
my $_data = shift;
my @data = split(/;/, $_data);
my ($message) = ($_data =~ m/[^"]"(.*)"[^"]*/);
if ($data[5] =~ /output|error|info/) {
print STDOUT "$data[0]: $message\n";
}
}
###
# handle one line of data written on stderr.
#
# expected data format:
#
# HOSTNAME;[stdout|stderr];TSTAMP;PID;PID(CHILD);[debug|error|exit|output|end];"OUTPUT"
#
# $_data - the data to be handled
sub stderr {
my $_self = shift;
( run in 1.420 second using v1.01-cache-2.11-cpan-437f7b0c052 )