Add a tool to delete log entries more than 30 days old.
This commit is contained in:
parent
d4b593cada
commit
062b33c709
1 changed files with 45 additions and 0 deletions
45
tools/deleteoldlogentries.py
Normal file
45
tools/deleteoldlogentries.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
import logging
|
||||
|
||||
from datetime import timedelta, datetime
|
||||
|
||||
from app import app
|
||||
from data.model 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
|
||||
.select(LogEntry.id)
|
||||
.order_by(LogEntry.id)
|
||||
.limit(1)
|
||||
.tuples())[0][0]
|
||||
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)
|
Reference in a new issue