——#!/usr/bin/perl
use
strict;
use
warnings;
use
Getopt::Long;
use
Helios::Service;
use
Helios::Error;
our
$VERSION
=
'2.00'
;
=head1 NAME
helios_log_clean.pl - Clean old log and history entries from the Helios database
=head1 SYNOPSIS
helios_log_clean.pl [--days=<days>] [--silent]
=head1 DESCRIPTION
Use helios_log_clean.pl to delete old entries from the log and job history in the Helios database
(helios_log_tb and helios_job_history_tb, respectively).
=head1 COMMAND OPTIONS
=head2 --days
Specify the number of days of logs you wish to keep using the --days option. If not specified,
logs and job history from the past 7 days are kept. Older entries will be deleted.
=head2 --silent
In silent mode, helios_log_clean.pl will only print output if an error occurs. Useful for running
from cron.
=head2 --help
Print this help.
=cut
our
$SECONDS_IN_DAY
= 86400;
our
$DEBUG_MODE
= 0;
our
$DAYS
= 0;
our
$HELP_MODE
= 0;
our
$SILENT_MODE
= 0;
GetOptions (
"days=i"
=> \
$DAYS
,
"silent"
=> \
$SILENT_MODE
,
"help"
=> \
$HELP_MODE
,
"debug"
=> \
$DEBUG_MODE
);
# print help if asked
if
(
$HELP_MODE
) {
Pod::Usage::pod2usage(
-verbose
=> 2,
-exitstatus
=> 0);
}
# honor HELIOS_DEBUG env var
if
(
defined
(
$ENV
{HELIOS_DEBUG}) &&
$ENV
{HELIOS_DEBUG} == 1 ) {
$DEBUG_MODE
= 1;
}
# DEBUG overrides SILENT
if
(
$DEBUG_MODE
) {
$SILENT_MODE
= 0; }
# default to 7 days if --days wasn't specified
unless
(
$DAYS
) {
$DAYS
= 7; }
# instantiate the base worker class just to get the [global] INI params
# (we need to know where the Helios db is)
our
$WORKER
= new Helios::Service;
$WORKER
->getConfigFromIni();
my
$params
=
$WORKER
->getConfig();
my
$sql
;
my
$epoch_horizon
=
time
() - (
$DAYS
*
$SECONDS_IN_DAY
);
# connect to the Helios database
unless
(
$params
->{dsn}) { throw Helios::Error::Fatal(
"Helios dsn not defined!"
); }
my
$dbh
=
$WORKER
->dbConnect(
$params
->{dsn},
$params
->{user},
$params
->{password});
if
(
$DBI::errstr
) { throw Helios::Error::DatabaseError(
$DBI::errstr
); }
#[]? necessary?
if
(
$DEBUG_MODE
) {
"Connected to Helios database.\n"
; }
# clean the log table
unless
(
$SILENT_MODE
) {
"Deleting log entries older than $DAYS days...\n"
; }
$sql
=
"DELETE FROM helios_log_tb WHERE log_time <= $epoch_horizon"
;
if
(
$DEBUG_MODE
) {
$sql
,
"\n"
; }
$dbh
->
do
(
$sql
);
"...done.\n"
;
# clean the job history table
unless
(
$SILENT_MODE
) {
"Deleting job history older than $DAYS days...\n"
; }
$sql
=
"DELETE FROM helios_job_history_tb WHERE complete_time <= $epoch_horizon"
;
if
(
$DEBUG_MODE
) {
$sql
,
"\n"
; }
$dbh
->
do
(
$sql
);
unless
(
$SILENT_MODE
) {
"...done.\n"
; }
=head1 AUTHOR
Andrew Johnson, E<lt>lajandy at cpan dotorgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2008-9 by CEB Toolbox, Inc.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.0 or,
at your option, any later version of Perl 5 you may have available.
=head1 WARRANTY
This software comes with no warranty of any kind.
=cut