Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > output-monitoring module

Reply
Thread Tools

output-monitoring module

 
 
Henry Townsend
Guest
Posts: n/a
 
      04-06-2005
Please forgive me for asking here, I have done some searches and come up
empty but I still think the module I need may have been written and want
to know for sure before I go trying to roll my own.

I'm thinking of writing a module which would monitor the output of any
script which "use"d it looking for errors. E.g. something like this

use Output::Monitor STDOUT => qr/re1/, STDERR => qr/re2/;

This would - perhaps by using tied filehandles - watch all data flowing
to stdout and stderr, apply the specified REs to each line, and convert
the exit status to nonzero if any matches occur. The data would still be
delivered to the same place, just checked along the way.

The idea is to replace a common technique where I work, which is to
write build scripts which divert their own output to a log internally,
then read that logfile to discover any unflagged errors. This makes it
hard for external tools to redirect output as they choose, requires
intimate knowledge of the script to know where it's writing its logfile
to, etc. What I'd hope to achieve with the above is transparency, i.e.
by simply including the module within a script it would be converted
from unchecked to checked, without the script having to change anything
else while the same data as before flows to stdout and stderr.

Before anyone says "just check exit status" - we do but we're stuck with
certain underlying build tools which have unreliable status so we must
parse output as a belt-and-suspenders plan.

Does anyone know of such a module or something close to use as a
starting point?

--
Henry Townsend

 
Reply With Quote
 
 
 
 
J. Gleixner
Guest
Posts: n/a
 
      04-06-2005
Henry Townsend wrote:

> I'm thinking of writing a module which would monitor the output of any
> script which "use"d it looking for errors. E.g. something like this
>
> use Output::Monitor STDOUT => qr/re1/, STDERR => qr/re2/;
>
> This would - perhaps by using tied filehandles - watch all data flowing
> to stdout and stderr, apply the specified REs to each line, and convert
> the exit status to nonzero if any matches occur. The data would still be
> delivered to the same place, just checked along the way.


> Does anyone know of such a module or something close to use as a
> starting point?


Filter::Handle should help.


http://search.cpan.org/~btrott/Filte...0.03/Handle.pm
 
Reply With Quote
 
 
 
 
Anno Siegel
Guest
Posts: n/a
 
      04-07-2005
Henry Townsend <(E-Mail Removed)> wrote in comp.lang.perl.misc:
> Please forgive me for asking here, I have done some searches and come up
> empty but I still think the module I need may have been written and want
> to know for sure before I go trying to roll my own.
>
> I'm thinking of writing a module which would monitor the output of any
> script which "use"d it looking for errors. E.g. something like this
>
> use Output::Monitor STDOUT => qr/re1/, STDERR => qr/re2/;
>
> This would - perhaps by using tied filehandles - watch all data flowing
> to stdout and stderr, apply the specified REs to each line, and convert
> the exit status to nonzero if any matches occur. The data would still be
> delivered to the same place, just checked along the way.


You can do that using the standard module Tie::Handle:

warn "blubb"; # processed normally
tie *STDERR, 'Monitor', '>&STDERR';
warn "glugg"; # prefixed with "monitored: "
exit;

package Monitor;
use Tie::Handle;
use base "Tie::StdHandle";

sub WRITE {
my $ob = shift;
my ( $scalar, $length) = @_;
$ob->SUPER::WRITE(
"monitored: $scalar", length( "monitored: ") + $length
);
}

Note however that the ability of tying STDERR is new with Perl 5.8.1.
If you need it to work with an earlier version, use $SIG{ __DIE_} and
$SIG{ __WARN__}.

[snip]

Anno
 
Reply With Quote
 
Anno Siegel
Guest
Posts: n/a
 
      04-07-2005
Henry Townsend <(E-Mail Removed)> wrote in comp.lang.perl.misc:
> Anno Siegel wrote:
> > Henry Townsend <(E-Mail Removed)> wrote in comp.lang.perl.misc:


> >>This would - perhaps by using tied filehandles - watch all data flowing
> >>to stdout and stderr, apply the specified REs to each line, and convert
> >>the exit status to nonzero if any matches occur. The data would still be
> >>delivered to the same place, just checked along the way.

>
> > You can do that using the standard module Tie::Handle:


[snip code]

> Thanks. Unfortunately, as I should have made clearer, because I'm
> monitoring build scripts I need to inspect output flowing from
> subprocesses as well...


Sure, that's a show-stopper. You need the Perl runtime system for
tied filehandles.

Anno
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: module docstring, documentation,anything? please note is the module type/object NOT some module Maric Michaud Python 0 06-24-2006 12:42 PM
Re: Http Module Problem: not all requests hit my module why? Jiong Feng ASP .Net 2 11-29-2003 05:14 PM
how does the main module notice when I change a module Marcus Schneider Python 2 08-16-2003 05:39 AM
Python-2.3b1 bugs on Windows2000 with: the new csv module, stringreplace, and the re module Daniel Ortmann Python 4 07-02-2003 03:23 PM



Advertisments