Retire ftp.d.o role, it is unused
[mirror/dsa-puppet.git] / modules / roles / files / mirror_health / mirror-health
index 5770366..2c582f2 100755 (executable)
@@ -13,10 +13,9 @@ HOSTS = os.environ['MIRROR_CHECK_HOSTS'].split()
 OUTPUT_DIR = "/run/dsa-mirror-health-{}".format(os.environ['MIRROR_CHECK_SERVICE'])
 HEALTH_FILE = os.path.join(OUTPUT_DIR, "health")
 URL = os.environ['MIRROR_CHECK_URL']
+HEALTH_CHECK_URL = os.environ['MIRROR_CHECK_HEALTH_URL']
 INTERVAL = int(os.environ.get('MIRROR_CHECK_INTERVAL', '60'))
 
-latest_ts = 0
-
 def retrieve_from_host(host, url):
     proxies = {
         'http': 'http://{}:80'.format(host),
@@ -30,6 +29,11 @@ def last_modified(response):
         lm = calendar.timegm(parsedate(response.headers['last-modified']))
     return lm
 
+def healthy(response):
+    if response.status_code == 200:
+        return True
+    return False
+
 def check_shutdown():
     if subprocess.call(['dsa-is-shutdown-scheduled']) == 0:
         logging.info("considering myself unhealthy, shutdown scheduled")
@@ -37,17 +41,18 @@ def check_shutdown():
     return True
 
 def check_uptodate():
-    global latest_ts
+    latest_ts = 0
     for host in HOSTS:
         try:
             lm = last_modified(retrieve_from_host(host, URL))
             logging.debug("lm for host %s: %s", host, lm)
-            latest_ts = max(latest_ts, lm)
-        except (requests.exceptions.ProxyError, requests.exceptions.ReadTimeout, requests.exceptions.ConnectTimeout):
+            if healthy(retrieve_from_host(host, HEALTH_CHECK_URL)):
+                latest_ts = max(latest_ts, lm)
+        except (requests.exceptions.ProxyError, requests.exceptions.ReadTimeout, requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError):
             pass
     try:
         local_lm = last_modified(retrieve_from_host('localhost', URL))
-    except (requests.exceptions.ProxyError, requests.exceptions.ReadTimeout, requests.exceptions.ConnectTimeout):
+    except (requests.exceptions.ProxyError, requests.exceptions.ReadTimeout, requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError):
         return False
     logging.debug("lm for localhost: %s", local_lm)
     if local_lm < latest_ts: