/[Frey]/trunk/lib/Frey/Shell/Log.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/Shell/Log.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 894 - (hide annotations)
Wed Dec 24 21:42:20 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1114 byte(s)
added simple log parser with filtering
1 dpavlin 894 package Frey::Shell::Log;
2     use Moose;
3    
4     extends 'Frey';
5     with 'Frey::Web';
6    
7     use DateTimeX::Easy;
8    
9     has log_command => (
10     is => 'rw',
11     isa => 'Str',
12     required => 1,
13     default => 'tail /var/log/daemon.log',
14     );
15    
16     has from_datetime => (
17     is => 'rw',
18     isa => 'Str',
19     );
20    
21     has to_datetime => (
22     is => 'rw',
23     isa => 'Str',
24     );
25    
26     sub as_sponge {
27     my ($self) = @_;
28    
29     my $cmd = $self->log_command;
30     warn "# cmd: $cmd";
31    
32     my @rows;
33    
34     my $from = DateTimeX::Easy->parse( $self->from_datetime ) if $self->from_datetime;
35     my $to = DateTimeX::Easy->parse( $self->to_datetime ) if $self->to_datetime;
36    
37     warn "# from: $from" if $from;
38     warn "# to: $to" if $to;
39    
40     open(my $fh, '-|', $cmd) || die "can't open pipe to $cmd $!";
41     while(<$fh>) {
42     chomp;
43    
44     if ( m{^(\w\w\w) (\d\d) (\d\d:\d\d:\d\d) (.+)} ) {
45     my $message = $4;
46     my $dt = DateTimeX::Easy->parse("2008-$1-$2 $3");
47     if ( $from ) {
48     next if $dt < $from;
49     }
50     if ( $to ) {
51     next if $dt > $to;
52     }
53     push @rows, [ $dt->ymd . ' ' . $dt->hms, $message ];
54     } else {
55     warn "# skip $_\n";
56     }
57     }
58    
59     return {
60     NAME => [ 'date', 'message' ],
61     rows => \@rows,
62     }
63     }
64    
65     1;

  ViewVC Help
Powered by ViewVC 1.1.26