From 11645da636eff2991c7fb603bff3906fb4cdd61f Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 14 Sep 2017 11:53:52 +0200
Subject: [PATCH] cron job for refreshing redcap data

---
 smash/smash/settings.py       |  3 ++-
 smash/web/redcap_connector.py | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/smash/smash/settings.py b/smash/smash/settings.py
index fbdd6e22..86456861 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 706c4e19..6cc2cc11 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"
-- 
GitLab