From 2a48ef9ab5f88f9c9f6210e05132e77d372be3b6 Mon Sep 17 00:00:00 2001 From: Hanne Moa Date: Fri, 20 Feb 2026 10:51:13 +0100 Subject: [PATCH] Add setting to toggle cron jobs --- .../management/commands/check_ended_maintenance.py | 14 ++++++++++++++ .../commands/check_started_maintenance.py | 14 ++++++++++++++ src/argus/site/settings/base.py | 2 ++ 3 files changed, 30 insertions(+) diff --git a/src/argus/dev/management/commands/check_ended_maintenance.py b/src/argus/dev/management/commands/check_ended_maintenance.py index ec1c4e981..765061209 100644 --- a/src/argus/dev/management/commands/check_ended_maintenance.py +++ b/src/argus/dev/management/commands/check_ended_maintenance.py @@ -1,11 +1,17 @@ +import logging from datetime import timedelta +import sys +from django.conf import settings from django.core.management.base import BaseCommand from django.utils import timezone from argus.plannedmaintenance.models import PlannedMaintenanceTask +LOG = logging.getLogger(__name__) + + class Command(BaseCommand): help = "Find all planned maintenance tasks that have ended recently and remove the incidents connection" @@ -19,8 +25,16 @@ def add_arguments(self, parser): ) def handle(self, *args, **options): + if not getattr(settings, "ENABLE_CRON_JOBS", False): + sys.exit() end_time = timezone.now() - timedelta(minutes=options.get("minutes")) ended_pm_tasks = PlannedMaintenanceTask.objects.ended_after_time(end_time) + if count := ended_pm_tasks.count(): + LOG.info("Cleaning up after %s ended planned maintenance tasks", count) + else: + LOG.info("No planned maintenance tasks to clean up after") for pm_task in ended_pm_tasks: pm_task.incidents.clear() + else: + LOG.info("Finished cleaning up after ended planned maintenance tasks") diff --git a/src/argus/dev/management/commands/check_started_maintenance.py b/src/argus/dev/management/commands/check_started_maintenance.py index e491cfb49..327ad7f51 100644 --- a/src/argus/dev/management/commands/check_started_maintenance.py +++ b/src/argus/dev/management/commands/check_started_maintenance.py @@ -1,11 +1,17 @@ +import logging from datetime import timedelta +import sys +from django.conf import settings from django.core.management.base import BaseCommand from django.utils import timezone from argus.plannedmaintenance.models import PlannedMaintenanceTask +LOG = logging.getLogger(__name__) + + class Command(BaseCommand): help = "Find all planned maintenance tasks that have started recently and connect them with incidents that are hit by them" @@ -19,8 +25,16 @@ def add_arguments(self, parser): ) def handle(self, *args, **options): + if not getattr(settings, "ENABLE_CRON_JOBS", False): + sys.exit() start_time = timezone.now() - timedelta(minutes=options.get("minutes")) started_pm_tasks = PlannedMaintenanceTask.objects.started_after_time(start_time) + if count := started_pm_tasks.count(): + LOG.info("Linking up %i just started planned maintenance tasks to incidents", count) + else: + LOG.info("No planned maintenance tasks to link up") for pm_task in started_pm_tasks: pm_task.connect_covered_incidents() + else: + LOG.info("Finished linking up incidents to started planned maintenance tasks") diff --git a/src/argus/site/settings/base.py b/src/argus/site/settings/base.py index e9873ef71..d25db98b3 100644 --- a/src/argus/site/settings/base.py +++ b/src/argus/site/settings/base.py @@ -327,3 +327,5 @@ update_settings(globals(), EXTRA_APPS) BANNER_MESSAGE = get_str_env("ARGUS_BANNER_MESSAGE", default=None) + +ENABLE_CRON_JOBS = get_bool_env("ARGUS_ENABLE_CRON_JOBS", default=False)