diff --git a/Dockerfile b/Dockerfile index 7d40f06aac9fe3fa6c57669d4609413d0c1db8de..e6c2ed82db23be7de14e05877cd73051f06d8a8d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,6 @@ RUN yum -y install epel-release && cd /tmp/requirements && \ RUN cd /tmp/requirements && pip install -r requirements.txt COPY . /opt/jumpserver -COPY config_example.yml /opt/jumpserver/config.yml VOLUME /opt/jumpserver/data VOLUME /opt/jumpserver/logs diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 7e96ff91b0375ea75d2644d1cc02d873362528eb..b4f3ff0a133e1894c297a476de5958a46bae7833 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -340,29 +340,33 @@ defaults = { } -def load_user_config(): - sys.path.insert(0, PROJECT_DIR) - config = Config(PROJECT_DIR, defaults) - loaded = False - - for i in ['config.yml', 'config.yaml']: - if os.path.isfile(os.path.join(config.root_path, i)): - config.from_yaml(i) - loaded = True - +def load_from_object(config): try: from config import config as c config.from_object(c) - loaded = True + return True except ImportError: pass + return False - try: - config.from_yaml('config.yml') - loaded = True - except IOError: - pass +def load_from_yml(config): + for i in ['config.yml', 'config.yaml']: + if not os.path.isfile(os.path.join(config.root_path, i)): + continue + loaded = config.from_yaml(i) + if loaded: + return True + return False + + +def load_user_config(): + sys.path.insert(0, PROJECT_DIR) + config = Config(PROJECT_DIR, defaults) + + loaded = load_from_object(config) + if not loaded: + loaded = load_from_yml(config) if not loaded: msg = """ diff --git a/apps/ops/tasks.py b/apps/ops/tasks.py index ac0bdce89148d2e0357207771289ddff22e2f1e7..06bf3d51d6bacbb75de756cad6a5427849efd34d 100644 --- a/apps/ops/tasks.py +++ b/apps/ops/tasks.py @@ -1,9 +1,12 @@ # coding: utf-8 +import os + from celery import shared_task, subtask +from django.utils import timezone from common.utils import get_logger, get_object_or_none from .celery.utils import register_as_period_task, after_app_shutdown_clean -from .models import Task, CommandExecution +from .models import Task, CommandExecution, CeleryTask logger = get_logger(__file__) @@ -48,6 +51,24 @@ def clean_tasks_adhoc_period(): ad.delete() +@shared_task +@register_as_period_task(interval=3600*24) +@after_app_shutdown_clean +def clean_celery_tasks_period(): + logger.debug("Start clean celery task history") + one_month_ago = timezone.now() - timezone.timedelta(days=30) + tasks = CeleryTask.objects.filter(date_start__lt=one_month_ago) + for task in tasks: + if os.path.isfile(task.full_log_path): + try: + os.remove(task.full_log_path) + except (FileNotFoundError, PermissionError): + pass + task.delete() + tasks = CeleryTask.objects.filter(date_start__isnull=True) + tasks.delete() + + @shared_task def hello(name, callback=None): print("Hello {}".format(name)) diff --git a/apps/terminal/tasks.py b/apps/terminal/tasks.py index 77aa662269210f0f12766790fb3718c80b0a5eca..e47803b3c758929ea01bf74c64229116fd93d772 100644 --- a/apps/terminal/tasks.py +++ b/apps/terminal/tasks.py @@ -25,7 +25,7 @@ logger = get_task_logger(__name__) @after_app_ready_start @after_app_shutdown_clean def delete_terminal_status_period(): - yesterday = timezone.now() - datetime.timedelta(days=3) + yesterday = timezone.now() - datetime.timedelta(days=1) Status.objects.filter(date_created__lt=yesterday).delete() diff --git a/jms b/jms index f1d0a6944cbe6e3a43b9201caf056b33b55271ae..cd9ad396d2bb5e8e2cdc9efa3ce1baf3eb075481 100755 --- a/jms +++ b/jms @@ -15,7 +15,8 @@ sys.path.append(BASE_DIR) from apps import __version__ try: - from config import config as CONFIG + from apps.jumpserver.conf import load_user_config + CONFIG = load_user_config() except ImportError: print("Could not find config file, `cp config_example.py config.py`") sys.exit(1)