diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index e0c3f5d87e5..4d19e182423 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -25,6 +25,7 @@ from pgadmin.utils.heartbeat import log_server_heartbeat, \ get_server_heartbeat, stop_server_heartbeat import config +import threading import time import json import os @@ -183,6 +184,19 @@ def register(self, app, options): from .workspaces import blueprint as module self.submodules.append(module) + def autovacuum_sessions(): + try: + with app.app_context(): + cleanup_session_files() + finally: + # repeat every five minutes until exit + # https://github.com/python/cpython/issues/98230 + t = threading.Timer(5 * 60, autovacuum_sessions) + t.daemon = True + t.start() + + app.register_before_app_start(autovacuum_sessions) + super().register(app, options) @@ -213,8 +227,6 @@ def ping(): @pgCSRFProtect.exempt def cleanup(): driver.ping() - # Cleanup session files. - cleanup_session_files() return "" diff --git a/web/setup.py b/web/setup.py index 674190eeef2..947802cfc83 100644 --- a/web/setup.py +++ b/web/setup.py @@ -42,6 +42,7 @@ from pgadmin import create_app from pgadmin.utils import clear_database_servers, dump_database_servers, \ load_database_servers, _handle_error +from pgadmin.utils.session import cleanup_session_files from pgadmin.setup import db_upgrade, create_app_data_directory from typing import Optional, List from typing_extensions import Annotated @@ -636,6 +637,16 @@ def run_migration_for_others(): run_migration_for_sqlite() +class ManageSessions: + + @app.command() + def cleanup_session_files(): + """Delete expired session files.""" + app = create_app(config.APP_NAME + '-cli') + with app.app_context(): + cleanup_session_files() + + def main(): app()