<?php
/*
очистка таблицы хитов по крону.
в crontab поставить команду вида:
0 1 * * * /usr/bin/php -q /home/user/antibot.cloud/antibot/code/clear_old_hits.php > /dev/null 2>&1
суть которой: 
0 1 * * * - это значит запускать в час ночи каждый день.
/home/user/antibot.cloud/antibot/code/clear_old_hits.php путь к этому скрипту относительно корня сервера.

lastday - удалять старше суток
lastweek - удалять старше недели
lastmonth - - удалять старше месяца
lastyear - удалить старше года
all - удалить все логи
*/

require_once(__DIR__.'/../data/conf.php');
//@include(__DIR__.'/../data/subsalt.php');
//$ab_config['salt'] = $ab_config['subsalt'].$ab_config['salt'];

if (php_sapi_name() != 'cli') die('no cli');

$lastlog = 'Cron start time: '.date('d.m.Y H:i:s', time())."\n";
clearstatcache();
$startsize = filesize(__DIR__.'/../data/sqlite.db');

$antibot_db = new SQLite3(__DIR__.'/../data/sqlite.db'); 
$antibot_db->busyTimeout(2000);
$antibot_db->exec("PRAGMA journal_mode = WAL;");

$ab_config['time'] = time();
$ab_config['period_cleaning'] = isset($ab_config['period_cleaning']) ? $ab_config['period_cleaning'] : 'lastmonth';
$ab_config['ptrcache_time'] = isset($ab_config['ptrcache_time']) ? $ab_config['ptrcache_time'] : 7;

// искать до указанной даты
$tl['lastday'] = $ab_config['time'] - 86400; // сутки
$tl['lastweek'] = $ab_config['time'] - (86400*7); // неделя
$tl['lastmonth'] = $ab_config['time'] - (86400*30); // месяц
$tl['quarter'] = $ab_config['time'] - (86400*91); // квартал
$tl['lastyear'] = $ab_config['time'] - (86400*365); // год

if (isset($tl[$ab_config['period_cleaning']])) {
$datelimit = 'WHERE date < \''.$tl[$ab_config['period_cleaning']].'\'';
} else {
$datelimit = '';
}

$del = @$antibot_db->exec("DELETE FROM hits ".$datelimit.";");
$deleted = (int) $antibot_db->changes(); // кол-во строк удалено

if ($antibot_db->lastErrorMsg() != 'database is locked') {
$vacuum = @$antibot_db->exec("VACUUM;");
}

// удаление старого PTR кэша:
$ab_config['ptrcache_time'] = $ab_config['time'] - (86400*$ab_config['ptrcache_time']); // 
$del = @$antibot_db->exec("DELETE FROM ptrcache WHERE date < ".$ab_config['ptrcache_time'].";");
$deleted2 = (int) $antibot_db->changes(); // кол-во строк удалено

$antibot_db->close();
sleep(1);

clearstatcache();
$finalsize = filesize(__DIR__.'/../data/sqlite.db');
$lastlog .= 'Cron final time: '.date('d.m.Y H:i:s', time())."\n";
$lastlog .= 'Start DB size: '.round($startsize / 1024 / 1024, 2).' MiB'."\n";
$lastlog .= 'Final DB size: '.round($finalsize / 1024 / 1024, 2).' MiB'."\n";
$lastlog .= 'Log Entries deleted: '.$deleted."\n";
$lastlog .= 'PTR Entries deleted: '.$deleted2."\n";
$lastlog .= 'Period: '.$ab_config['period_cleaning']."\n";
file_put_contents(__DIR__.'/../data/cronlog', $lastlog, LOCK_EX);
echo "ok\n";
