import logging
from datetime import timedelta, datetime
from app import app
from data.database import LogEntry
logger = logging.getLogger(__name__)
LOG_FORMAT = "%(asctime)s [%(process)d] [%(levelname)s] [%(name)s] %(message)s"
BATCH_SIZE = 1000
def delete_old_logentries(delete_before):
delete_up_to_id = (LogEntry
.select(LogEntry.id)
.where(LogEntry.datetime <= delete_before)
.order_by(LogEntry.id.desc())
.limit(1)
.tuples())[0][0]
logger.debug('Deleting up to id: %s', delete_up_to_id)
start_from_id = (LogEntry
.order_by(LogEntry.id)
logger.debug('Starting from id: %s', start_from_id)
deleted = 1
current_batch_end = min(start_from_id + BATCH_SIZE, delete_up_to_id)
while deleted > 0 or current_batch_end < delete_up_to_id:
deleted = (LogEntry
.delete()
.where(LogEntry.id <= current_batch_end)
.execute())
logger.debug('Deleted %s entries', deleted)
current_batch_end = min(current_batch_end + BATCH_SIZE, delete_up_to_id)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
now = datetime.now()
one_month_ago = now - timedelta(days=30)
delete_old_logentries(one_month_ago)