From 2d80187faad205f1c267200ef7fd8dd0c4c064cd Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 17 Jul 2024 19:59:15 +0200 Subject: [PATCH] Clean expired sessions (also old sessions without expiry date) --- cps/schedule.py | 6 +++--- cps/tasks/{tempFolder.py => clean.py} | 27 ++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) rename cps/tasks/{tempFolder.py => clean.py} (58%) diff --git a/cps/schedule.py b/cps/schedule.py index 21c8d32a..d01aab16 100644 --- a/cps/schedule.py +++ b/cps/schedule.py @@ -21,7 +21,7 @@ import datetime from . import config, constants from .services.background_scheduler import BackgroundScheduler, CronTrigger, use_APScheduler from .tasks.database import TaskReconnectDatabase -from .tasks.tempFolder import TaskDeleteTempFolder +from .tasks.clean import TaskClean from .tasks.thumbnail import TaskGenerateCoverThumbnails, TaskGenerateSeriesThumbnails, TaskClearCoverThumbnailCache from .services.worker import WorkerThread from .tasks.metadata_backup import TaskBackupMetadata @@ -33,7 +33,7 @@ def get_scheduled_tasks(reconnect=True): tasks.append([lambda: TaskReconnectDatabase(), 'reconnect', False]) # Delete temp folder - tasks.append([lambda: TaskDeleteTempFolder(), 'delete temp', True]) + tasks.append([lambda: TaskClean(), 'delete temp', True]) # Generate metadata.opf file for each changed book if config.schedule_metadata_backup: @@ -94,7 +94,7 @@ def register_startup_tasks(): if constants.APP_MODE in ['development', 'test'] and not should_task_be_running(start, duration): scheduler.schedule_tasks_immediately(tasks=get_scheduled_tasks(False)) else: - scheduler.schedule_tasks_immediately(tasks=[[lambda: TaskDeleteTempFolder(), 'delete temp', True]]) + scheduler.schedule_tasks_immediately(tasks=[[lambda: TaskClean(), 'delete temp', True]]) def should_task_be_running(start, duration): diff --git a/cps/tasks/tempFolder.py b/cps/tasks/clean.py similarity index 58% rename from cps/tasks/tempFolder.py rename to cps/tasks/clean.py index e740cd1e..1a1681b4 100644 --- a/cps/tasks/tempFolder.py +++ b/cps/tasks/clean.py @@ -16,31 +16,48 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -from urllib.request import urlopen +import datetime from flask_babel import lazy_gettext as N_ +from sqlalchemy.sql.expression import or_ -from cps import logger, file_helper +from cps import logger, file_helper, ub from cps.services.worker import CalibreTask -class TaskDeleteTempFolder(CalibreTask): +class TaskClean(CalibreTask): def __init__(self, task_message=N_('Delete temp folder contents')): - super(TaskDeleteTempFolder, self).__init__(task_message) + super(TaskClean, self).__init__(task_message) self.log = logger.create() + self.app_db_session = ub.get_new_session_instance() def run(self, worker_thread): + # delete temp folder try: file_helper.del_temp_dir() except FileNotFoundError: pass except (PermissionError, OSError) as e: self.log.error("Error deleting temp folder: {}".format(e)) + # delete expired session keys + self.log.debug("Deleted expired session_keys" ) + expiry = int(datetime.datetime.now().timestamp()) + try: + self.app_db_session.query(ub.User_Sessions).filter(or_(ub.User_Sessions.expiry < expiry, + ub.User_Sessions.expiry == None)).delete() + self.app_db_session.commit() + except Exception as ex: + self.log.debug('Error deleting expired session keys: ' + str(ex)) + self._handleError('Error deleting expired session keys: ' + str(ex)) + self.app_db_session.rollback() + return + self._handleSuccess() + self.app_db_session.remove() @property def name(self): - return "Delete Temp Folder" + return "Clean up" @property def is_cancellable(self):