package Ernad::Monitor; use strict; use warnings; use Carp qw(confess); use File::Slurper; use File::Touch; use Date::Parse; use Ernad::Dates; our $monitors; sub get_monitor_time { my $monti=shift // confess "I need a monti here."; my $e=$main::e; my $monitor_dir=$e->{'dir'}->{'monitor'} or confess "I need a monitor directory defined."; my $monitor_file=$monitor_dir.'/'.$monti; if(-f $monitor_file) { my $mtime=&Ernad::Dates::mtime($monitor_file); return $mtime; } } sub set_monitor_time { my $monti=shift // confess "I need a monti here."; my $e=$main::e; my $monitor_dir=$e->{'dir'}->{'monitor'} or confess "I need a monitor directory defined."; my $monitor_file=$monitor_dir.'/'.$monti; my $touch_obj = File::Touch->new(); my @file_list = ($monitor_file); my $count = $touch_obj->touch(@file_list); } $monitors->{'nep_delivery'} = sub { my $fs=['/var/log/apache2/d.repec.org_error.log','/var/log/apache2/d.repec.org_error.log.1']; my $text=&cat($fs); my $monitor_time=&get_monitor_time($main::monti) // 0; my $out=''; foreach my $line (split(/\n/,$text)) { $line=~m|^\[([^]]+)\]| or confess "I don't like the line $line."; my $date=$1; my $time=str2time($date) or confess "I can't parse date $date\n"; if($monitor_time and $time < $monitor_time) { next; } $out.="$line\n"; } &set_monitor_time($main::monti); return $out; }; sub cat { my $in=shift // return ''; my $strict=shift // ''; my $text=''; foreach my $f (@$in) { if(not -f $f) { if($strict) { confess "I can't open $f\n"; } ## maybe this file has not been opened yet next; } $text.=&File::Slurp::read_file($f); } return $text; } 1;