/[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 900 - (hide annotations)
Thu Dec 25 12:19:25 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1435 byte(s)
argument can be undef if no limits are specified
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 dpavlin 899 sub date_time {
38 dpavlin 900 my $dt = shift || return;
39 dpavlin 899 $dt->ymd . ' ' . $dt->hms;
40     }
41 dpavlin 894
42 dpavlin 899 my $stats = {
43     from => date_time( $from ),
44     to => date_time( $to ),
45     };
46    
47     warn "# stats ",$self->dump( $stats );
48    
49 dpavlin 894 open(my $fh, '-|', $cmd) || die "can't open pipe to $cmd $!";
50     while(<$fh>) {
51     chomp;
52    
53     if ( m{^(\w\w\w) (\d\d) (\d\d:\d\d:\d\d) (.+)} ) {
54     my $message = $4;
55     my $dt = DateTimeX::Easy->parse("2008-$1-$2 $3");
56 dpavlin 899 if ( $from && $dt < $from ) {
57     $stats->{before_from}++;
58     next;
59 dpavlin 894 }
60 dpavlin 899 if ( $to && $dt > $to ) {
61     $stats->{after_to}++;
62     next;
63 dpavlin 894 }
64 dpavlin 899 push @rows, [ date_time( $dt ), $message ];
65     $stats->{rows}++;
66 dpavlin 894 } else {
67     warn "# skip $_\n";
68 dpavlin 899 $stats->{skipped}++;
69 dpavlin 894 }
70     }
71    
72 dpavlin 899 warn "# stats ",$self->dump( $stats );
73    
74 dpavlin 894 return {
75     NAME => [ 'date', 'message' ],
76 dpavlin 899 rows => [ sort { $a->[0] cmp $b->[0] } @rows ],
77     stats => $stats,
78 dpavlin 894 }
79     }
80    
81     1;

  ViewVC Help
Powered by ViewVC 1.1.26