#! /usr/bin/perl -w
################################################################################
# Copyright 2005-2011 MERETHIS
# Centreon is developped by : Julien Mathis and Romain Le Merlus under
# GPL Licence 2.0.
# 
# This program is free software; you can redistribute it and/or modify it under 
# the terms of the GNU General Public License as published by the Free Software 
# Foundation ; either version 2 of the License.
# 
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License along with 
# this program; if not, see <http://www.gnu.org/licenses>.
# 
# Linking this program statically or dynamically with other modules is making a 
# combined work based on this program. Thus, the terms and conditions of the GNU 
# General Public License cover the whole combination.
# 
# As a special exception, the copyright holders of this program give MERETHIS 
# permission to link this program with independent modules to produce an executable, 
# regardless of the license terms of these independent modules, and to copy and 
# distribute the resulting executable under terms of MERETHIS choice, provided that 
# MERETHIS also meet, for each linked independent module, the terms  and conditions 
# of the license of that module. An independent module is a module which is not 
# derived from this program. If you modify this program, you may extend this 
# exception to your version of the program, but you are not obliged to do so. If you
# do not wish to do so, delete this exception statement from your version.
# 
# For more information : contact@centreon.com
# 
# SVN : $URL: http://svn.centreon.com/branches/centreon-2.3.x/cron/purgeLogs $
# SVN : $Id: purgeLogs 11676 2011-02-14 15:03:15Z jmathis $
#
####################################################################################

use strict;
use warnings;
use DBI;
use Getopt::Long;
use POSIX;

use vars qw($mysql_user $mysql_passwd $mysql_host $mysql_database_oreon $mysql_database_ods $opt_h $opt_a $data);

require "/etc/centreon/conf.pm";

my $VarLib 	= "/var/lib/centreon";
my $LOG 	= "/var/log/centreon/centreon-purge.log";

sub writeLogFile($){
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
    open (LOG, ">> ".$LOG) || print "can't write $LOG: $!";
   
   	# Add initial 0 if value is under 10
    $hour = "0".$hour if ($hour < 10);
    $min = "0".$min if ($min < 10);
    $sec = "0".$sec if ($sec < 10);
   	
    print LOG "$mday/".($mon+1)."/".($year+1900)." $hour:$min:$sec - ".$_[0]."\n";
    close LOG or warn $!;
}

# logAnalyser's lock file
my $lock_file = "$VarLib/logAnalyser.lock";
my $pid;
for (my $x = 0; -e "$lock_file" ; $x++) {
	sleep(1);
	if ($x >= 1000) {
		writeLogFile("Cannot purge logs. Lock file found : $lock_file");
		exit();
	}
}

# Manage Lock
$pid = getpgrp(0);
`echo $pid > $lock_file`;

# Init MySQL Connexion
my $dbh = DBI->connect("DBI:mysql:database=".$mysql_database_ods.";host=".$mysql_host, $mysql_user, $mysql_passwd, {'RaiseError' => 1});

# Get conf Data
my $retention;
my $sth_config = $dbh->prepare("SELECT `archive_retention` FROM `config`");
if (!$sth_config->execute) {
	writeLogFile("Error:" . $sth_config->errstr);
} else {
	my $data = $sth_config->fetchrow_hashref();
	$retention = $data->{'archive_retention'};
	$sth_config->finish();
	undef($data);
}

if (defined($retention) && $retention ne 0){
    my $last_log = time() - ($retention * 24 * 60 * 60);
  	
	writeLogFile("Begin centstorage.log purge");

  	# Pugre Log Database
    my $res = $dbh->do("DELETE FROM `log` WHERE `ctime` < '$last_log'");
    if (!defined($res)) {
    	writeLogFile("SQL UPDATE Error : DELETE FROM `log` WHERE `ctime` < '$last_log'");
    }
    undef($res);

	writeLogFile("End centstorage.log purge");
}
$dbh->disconnect();

`rm -rf $lock_file`;

exit;