#!/usr/bin/perl
=begin -------------------------------------------------------------------------
searches cron.log entries for errors -> admin email; only looks for current date
which is in yyyy-mm-dd format so uses DateTime::Format::MySQL for simplicity
=cut ---------------------------------------------------------------------------
use strict;
use warnings;
my $JUST_TESTING = 0; # dumps result to console - no email
################################################################################
my @recipients = qw( raj );
my $src = '/home/raj/crons/cron.log';
################################################################################
use lib '/home/raj/perl5/lib/perl5';
use IO::All;
use DateTime;
use Data::Dumper;
use DateTime::Format::MySQL;
use FindBin qw($Bin); # warn $Bin;
use lib "$Bin/../../../lib";
use LIMS::Local::ScriptHelpers;
my $tools = LIMS::Local::ScriptHelpers->new();
$tools->test_only($JUST_TESTING);
my @log = io($src)->slurp; # warn Dumper \@log;
my $today = DateTime->today;
# reverse so most recent entry 1st:
ROW: for (reverse @log) {
my ($date) = $_ =~ /\[(\d{4}-\d{2}-\d{2}) \d{2}\:\d{2}\:\d{2}\]/; # warn $date;
unless ($date) { # will be error
mail_admin($_);
next ROW;
}
my $dt = DateTime::Format::MySQL->parse_date($date);
# delta_days() returns zero for current date, otherwise positive integer:
last ROW if $dt->delta_days($today)->delta_days;
}
sub mail_admin {
my $str = shift; # warn $str;
my %args = (
subject => '*** CRON LOG ERROR ***', # can supply 'subject' instead of 'script'
msg => $str,
);
$JUST_TESTING
? warn Dumper \%args
: $tools->mail_admin(\%args);
}