From 4a2e6e31a638ec7f63942763c726c785567d4523 Mon Sep 17 00:00:00 2001 From: Daniel Clemente Laboreo Date: Wed, 10 Jan 2018 15:42:05 +0200 Subject: [PATCH] Allow customizing heartbeat checks --- cms/envs/aws.py | 5 +++++ cms/envs/common.py | 5 +++++ lms/envs/aws.py | 5 +++++ lms/envs/common.py | 15 +++++++++++++++ .../core/djangoapps/heartbeat/default_checks.py | 3 +-- openedx/core/djangoapps/heartbeat/defaults.py | 17 ----------------- openedx/core/djangoapps/heartbeat/runchecks.py | 8 ++------ 7 files changed, 33 insertions(+), 25 deletions(-) delete mode 100644 openedx/core/djangoapps/heartbeat/defaults.py diff --git a/cms/envs/aws.py b/cms/envs/aws.py index d68d194d1a..21131e8a5b 100644 --- a/cms/envs/aws.py +++ b/cms/envs/aws.py @@ -265,6 +265,11 @@ STUDIO_SHORT_NAME = ENV_TOKENS.get('STUDIO_SHORT_NAME', STUDIO_SHORT_NAME) if "TRACKING_IGNORE_URL_PATTERNS" in ENV_TOKENS: TRACKING_IGNORE_URL_PATTERNS = ENV_TOKENS.get("TRACKING_IGNORE_URL_PATTERNS") +# Heartbeat +HEARTBEAT_CHECKS = ENV_TOKENS.get('HEARTBEAT_CHECKS', HEARTBEAT_CHECKS) +HEARTBEAT_EXTENDED_CHECKS = ENV_TOKENS.get('HEARTBEAT_EXTENDED_CHECKS', HEARTBEAT_EXTENDED_CHECKS) +HEARTBEAT_CELERY_TIMEOUT = ENV_TOKENS.get('HEARTBEAT_CELERY_TIMEOUT', HEARTBEAT_CELERY_TIMEOUT) + # Django CAS external authentication settings CAS_EXTRA_LOGIN_PARAMS = ENV_TOKENS.get("CAS_EXTRA_LOGIN_PARAMS", None) if FEATURES.get('AUTH_USE_CAS'): diff --git a/cms/envs/common.py b/cms/envs/common.py index ec796329fc..033acce74e 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -76,6 +76,11 @@ from lms.envs.common import ( STATICI18N_OUTPUT_DIR, + # Heartbeat + HEARTBEAT_CHECKS, + HEARTBEAT_EXTENDED_CHECKS, + HEARTBEAT_CELERY_TIMEOUT, + # Theme to use when no site or site theme is defined, DEFAULT_SITE_THEME, diff --git a/lms/envs/aws.py b/lms/envs/aws.py index bf65051e9c..39ccbe0acb 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -644,6 +644,11 @@ TRACKING_SEGMENTIO_DISALLOWED_SUBSTRING_NAMES = ENV_TOKENS.get( ) TRACKING_SEGMENTIO_SOURCE_MAP = ENV_TOKENS.get("TRACKING_SEGMENTIO_SOURCE_MAP", TRACKING_SEGMENTIO_SOURCE_MAP) +# Heartbeat +HEARTBEAT_CHECKS = ENV_TOKENS.get('HEARTBEAT_CHECKS', HEARTBEAT_CHECKS) +HEARTBEAT_EXTENDED_CHECKS = ENV_TOKENS.get('HEARTBEAT_EXTENDED_CHECKS', HEARTBEAT_EXTENDED_CHECKS) +HEARTBEAT_CELERY_TIMEOUT = ENV_TOKENS.get('HEARTBEAT_CELERY_TIMEOUT', HEARTBEAT_CELERY_TIMEOUT) + # Student identity verification settings VERIFY_STUDENT = AUTH_TOKENS.get("VERIFY_STUDENT", VERIFY_STUDENT) DISABLE_ACCOUNT_ACTIVATION_REQUIREMENT_SWITCH = ENV_TOKENS.get( diff --git a/lms/envs/common.py b/lms/envs/common.py index 3220992aa6..d739be53d9 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -724,6 +724,21 @@ USERNAME_REGEX_PARTIAL = r'[\w .@_+-]+' USERNAME_PATTERN = r'(?P{regex})'.format(regex=USERNAME_REGEX_PARTIAL) +############################## HEARTBEAT ###################################### + +# Checks run in normal mode by the heartbeat djangoapp +HEARTBEAT_CHECKS = [ + 'openedx.core.djangoapps.heartbeat.default_checks.check_modulestore', + 'openedx.core.djangoapps.heartbeat.default_checks.check_database', +] + +# Other checks to run by default in "extended"/heavy mode +HEARTBEAT_EXTENDED_CHECKS = ( + 'openedx.core.djangoapps.heartbeat.default_checks.check_celery', +) + +HEARTBEAT_CELERY_TIMEOUT = 5 + ############################## EVENT TRACKING ################################# LMS_SEGMENT_KEY = None diff --git a/openedx/core/djangoapps/heartbeat/default_checks.py b/openedx/core/djangoapps/heartbeat/default_checks.py index 41f78d1cf7..925afe3a9b 100644 --- a/openedx/core/djangoapps/heartbeat/default_checks.py +++ b/openedx/core/djangoapps/heartbeat/default_checks.py @@ -13,7 +13,6 @@ from django.db.utils import DatabaseError from xmodule.modulestore.django import modulestore from xmodule.exceptions import HeartbeatFailure -from .defaults import HEARTBEAT_CELERY_TIMEOUT from .tasks import sample_task @@ -107,7 +106,7 @@ def check_celery(): """ now = time() datetimenow = datetime.now() - expires = datetimenow + timedelta(seconds=getattr(settings, 'HEARTBEAT_CELERY_TIMEOUT', HEARTBEAT_CELERY_TIMEOUT)) + expires = datetimenow + timedelta(seconds=settings.HEARTBEAT_CELERY_TIMEOUT) try: task = sample_task.apply_async(expires=expires) diff --git a/openedx/core/djangoapps/heartbeat/defaults.py b/openedx/core/djangoapps/heartbeat/defaults.py deleted file mode 100644 index 3f892d1671..0000000000 --- a/openedx/core/djangoapps/heartbeat/defaults.py +++ /dev/null @@ -1,17 +0,0 @@ -""" -Configuration defaults for the heartbeat djangoapp - -Configures what checks to run by default in normal and "extended"/heavy mode, -as well as providing settings for the default checks themselves -""" - -HEARTBEAT_DEFAULT_CHECKS = [ - '.default_checks.check_modulestore', - '.default_checks.check_database', -] - -HEARTBEAT_EXTENDED_DEFAULT_CHECKS = ( - '.default_checks.check_celery', -) - -HEARTBEAT_CELERY_TIMEOUT = 5 diff --git a/openedx/core/djangoapps/heartbeat/runchecks.py b/openedx/core/djangoapps/heartbeat/runchecks.py index bba1876455..c6972fc4de 100644 --- a/openedx/core/djangoapps/heartbeat/runchecks.py +++ b/openedx/core/djangoapps/heartbeat/runchecks.py @@ -3,8 +3,6 @@ from importlib import import_module from django.conf import settings from django.core.exceptions import ImproperlyConfigured -from .defaults import HEARTBEAT_DEFAULT_CHECKS, HEARTBEAT_EXTENDED_DEFAULT_CHECKS - def runchecks(include_extended=False): """ @@ -13,11 +11,9 @@ def runchecks(include_extended=False): """ response_dict = {} - #Taken straight from Django - #If there is a better way, I don't know it - list_of_checks = getattr(settings, 'HEARTBEAT_CHECKS', HEARTBEAT_DEFAULT_CHECKS) + list_of_checks = list(settings.HEARTBEAT_CHECKS) if include_extended: - list_of_checks += getattr(settings, 'HEARTBEAT_EXTENDED_CHECKS', HEARTBEAT_EXTENDED_DEFAULT_CHECKS) + list_of_checks += settings.HEARTBEAT_EXTENDED_CHECKS for path in list_of_checks: module, _, attr = path.rpartition('.')