various fixes
[lwes-perl.git] / lwes-perl-journal-listener
blob9e7e9167bda036f079ab139cf3cf16a5488cc85e
1 #!/usr/bin/env perl
3 use strict;
4 use warnings;
6 use Getopt::Long;
7 use Pod::Usage;
8 use LWES::EventParser;
9 use LWES::Listener;
11 my $help_opt = 0;
12 my $man_opt = 0;
13 my $verbose_opt = 0;
15 GetOptions
17 'help' => \$help_opt,
18 'man' => \$man_opt,
19 'verbose' => \$verbose_opt,
20 ) or pod2usage (2);
22 pod2usage (-exitval => -1, -verbose => 0) if $help_opt;
23 pod2usage (-exitval => -2, -verbose => 2) if $man_opt;
25 my $listener_or_code;
27 # if the first argument is a file, we'll assume it s a journal file, and
28 # use the PrintingListener
29 if (-f $ARGV[0])
31 $listener_or_code = "LWES::Listeners::EventPrintingListener";
33 else
35 $listener_or_code = shift @ARGV;
38 # determine the callback which will process each event
39 my $processEventFunc = getProcessEventFunc ($listener_or_code, @ARGV);
41 foreach my $journal (@ARGV)
43 if (-f $journal)
45 open FH, "zcat $journal |";
47 # read and parse header
48 my $header_bytes;
49 while ( read (FH, $header_bytes, 22) == 22)
51 my $header = bytesToHeader ($header_bytes);
53 # read and parse bytes
54 my $event_bytes;
55 my $n = read (FH, $event_bytes, $header->{'PayloadLength'});
56 if (defined ($n) && $n == $header->{'PayloadLength'})
58 my $event = bytesToEvent ($event_bytes);
60 # merge header into event
61 foreach my $h (keys %{$header})
63 unless (exists ($event->{$h}))
65 $event->{$h} = $header->{$h};
69 # call handler
70 $processEventFunc->($event);
72 else
74 die "malformed or truncated journal";
78 close FH;