diff --git a/smash/smash/settings.py b/smash/smash/settings.py index fbdd6e22c2d3175ec692b63332269d03b3ba4e29..86456861f9b30ff0d43c6dcf224ec70038765597 100644 --- a/smash/smash/settings.py +++ b/smash/smash/settings.py @@ -71,7 +71,8 @@ TEMPLATES = [ ] CRON_CLASSES = [ - 'web.views.kit.KitRequestEmailSendJob' + 'web.views.kit.KitRequestEmailSendJob', + 'web.redcap_connector.RedCapRefreshJob' ] # Password validation diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py index 706c4e192574b1f42f902e2b6f41ae376b8d6447..6cc2cc1179af478f0abf9f45bf66a4287c4f7517 100644 --- a/smash/web/redcap_connector.py +++ b/smash/web/redcap_connector.py @@ -5,6 +5,7 @@ import logging import pycurl import certifi +from django_cron import CronJobBase, Schedule from web.models import ConfigurationItem, Subject, Language from web.models.constants import REDCAP_TOKEN_CONFIGURATION_TYPE, \ @@ -302,3 +303,21 @@ class RedcapConnector(object): return False return True + + +class RedCapRefreshJob(CronJobBase): + RUN_EVERY_MINUTES = 60 + schedule = Schedule(run_every_mins=RUN_EVERY_MINUTES) + code = 'web.red_cap_hourly_refresh' # a unique code + + def do(self): + connector = RedcapConnector() + if connector.is_valid(): + logger.info("Refreshing redcap data") + connector.refresh_inconsistent() + connector.refresh_missing() + logger.info("Redcap data refreshed") + return "ok" + else: + logger.info("Redcap connector is down") + return "connector down"