/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 899 - (show annotations)
Wed Dec 24 22:20:30 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1425 byte(s)
sort by date_time and generate some stats
1 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 sub date_time {
38 my $dt = shift;
39 $dt->ymd . ' ' . $dt->hms;
40 }
41
42 my $stats = {
43 from => date_time( $from ),
44 to => date_time( $to ),
45 };
46
47 warn "# stats ",$self->dump( $stats );
48
49 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 if ( $from && $dt < $from ) {
57 $stats->{before_from}++;
58 next;
59 }
60 if ( $to && $dt > $to ) {
61 $stats->{after_to}++;
62 next;
63 }
64 push @rows, [ date_time( $dt ), $message ];
65 $stats->{rows}++;
66 } else {
67 warn "# skip $_\n";
68 $stats->{skipped}++;
69 }
70 }
71
72 warn "# stats ",$self->dump( $stats );
73
74 return {
75 NAME => [ 'date', 'message' ],
76 rows => [ sort { $a->[0] cmp $b->[0] } @rows ],
77 stats => $stats,
78 }
79 }
80
81 1;

  ViewVC Help
Powered by ViewVC 1.1.26