From 874a3eeebf1b567c66907da7b32aceb10bf2a983 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 26 Oct 2020 14:48:37 +0800 Subject: [PATCH] =?UTF-8?q?perf(sessions):=20=E4=BC=98=E5=8C=96=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/terminal/tasks.py | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/apps/terminal/tasks.py b/apps/terminal/tasks.py index b1342543d..7efa7665d 100644 --- a/apps/terminal/tasks.py +++ b/apps/terminal/tasks.py @@ -1,14 +1,16 @@ # -*- coding: utf-8 -*- # +import os +import subprocess import datetime from celery import shared_task from celery.utils.log import get_task_logger from django.utils import timezone -from django.conf import settings from django.core.files.storage import default_storage +from common.utils import get_log_keep_day from ops.celery.decorator import ( register_as_period_task, after_app_ready_start, after_app_shutdown_clean_periodic ) @@ -51,23 +53,25 @@ def clean_orphan_session(): @after_app_shutdown_clean_periodic def clean_expired_session_period(): logger.info("Start clean expired session record, commands and replay") - days = settings.TERMINAL_SESSION_KEEP_DURATION - dt = timezone.now() - timezone.timedelta(days=days) - expired_sessions = Session.objects.filter(date_start__lt=dt) - for session in expired_sessions: - logger.info("Clean session: {}".format(session.id)) - Command.objects.filter(session=str(session.id)).delete() - # 删除录像文件 - session_path = session.get_rel_replay_path() - local_path = session.get_local_path() - local_path_v1 = session.get_local_path(version=1) + days = get_log_keep_day('TERMINAL_SESSION_KEEP_DURATION') + expire_date = timezone.now() - timezone.timedelta(days=days) + expired_sessions = Session.objects.filter(date_start__lt=expire_date) + timestamp = expire_date.timestamp() + expired_commands = Command.objects.filter(timestamp__lt=timestamp) + replay_dir = os.path.join(default_storage.base_location, 'replay') + + expired_sessions.delete() + logger.info("Clean session item done") + expired_commands.delete() + logger.info("Clean session command done") + command = "find %s -mtime +%s -name '*.gz' -exec rm -f {} \\;" % ( + replay_dir, days + ) + subprocess.call(command, shell=True) + command = "find %s -type d -empty -delete;" % replay_dir + subprocess.call(command, shell=True) + logger.info("Clean session replay done") - # 去default storage中查找 - for _local_path in (local_path, local_path_v1, session_path): - if default_storage.exists(_local_path): - default_storage.delete(_local_path) - # 删除session记录 - session.delete() @shared_task