Source code for flexget.plugins.generic.db_vacuum

from datetime import datetime, timedelta

from loguru import logger
from sqlalchemy import text
from sqlalchemy.exc import OperationalError

from flexget.event import event
from flexget.manager import Session
from flexget.utils.simple_persistence import SimplePersistence

logger = logger.bind(name='db_vacuum')
VACUUM_INTERVAL = timedelta(weeks=24)  # 6 months


# Run after the cleanup is actually finished, but before analyze
[docs] @event('manager.db_vacuum', 1) def on_cleanup(manager): # Vacuum can take a long time, and is not needed frequently persistence = SimplePersistence('db_vacuum') last_vacuum = persistence.get('last_vacuum') if not last_vacuum or last_vacuum < datetime.now() - VACUUM_INTERVAL: logger.info('Running VACUUM on database to improve performance and decrease db size.') with Session() as session: try: session.execute(text('VACUUM')) except OperationalError as e: # Does not work on python 3.6, github issue #1596 logger.error('Could not execute VACUUM command: {}', e) else: persistence['last_vacuum'] = datetime.now()