[AETHER-3114] Handle 500 error when making ROC request

Change-Id: If920152a426ba079e3acaacfe96691cc6897b3b0
diff --git a/VERSION b/VERSION
index bcab45a..c08daab 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.0.3
+0.0.4-dev
diff --git a/app.py b/app.py
index e7ede6a..cc85ce4 100644
--- a/app.py
+++ b/app.py
@@ -80,7 +80,10 @@
 
 def update(roc, prom, old):
     new = roc.update_devices(old)
-    prom.update_devices(new)
+    if new is not None:
+        new = prom.update_devices(new)
+    else:
+        new = old
     return new
 
 def probe(devices):
diff --git a/prom.py b/prom.py
index 5c4668c..2a9f1ce 100644
--- a/prom.py
+++ b/prom.py
@@ -28,7 +28,11 @@
         params = (
             ('query', 'subscribers_info>0'),
         )
-        response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token))
+        try:
+            response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("Rancher/Prometheus request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_subscriberinfo() failed, status_code: {}".format(response.status_code))
             return None
@@ -44,7 +48,11 @@
             ('query', 'subscribers_info'),
         )
 
-        response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token))
+        try:
+            response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("Rancher/Prometheus request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_subscriberinfo() failed, status_code: {}".format(response.status_code))
             sys.exit()
@@ -64,6 +72,8 @@
             else:
                 log.error("Ignoring device as imsi or mobile-ip not found - {}".format(metric))
 
+        return devices
+
     def dump(self):
         print(pyaml.dump(self.get_ips()))
 
diff --git a/roc.py b/roc.py
index be609bf..87ba152 100644
--- a/roc.py
+++ b/roc.py
@@ -3,6 +3,7 @@
 SPDX-License-Identifier: LicenseRef-ONF-Member-1.01
 """
 
+import sys
 import requests
 import json
 # noinspection PyUnresolvedReferences
@@ -99,7 +100,11 @@
 
     def get_devicegroups(self):
         url = URL + "device-group"
-        response = requests.get(url, headers=self.headers())
+        try:
+            response = requests.get(url, headers=self.headers(), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("ROC request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_devicegroups() failed, status_code: {}".format(response.status_code))
             return None
@@ -123,14 +128,15 @@
     def update_devices(self, devices):
         new = {}
         dgs = self.get_devicegroups()
-        for dg in dgs:
-            for d in dg['imsis']:
-                imsi_id = str(d['imsi-id'])
-                imsi = str(d['imsi-range-from'])
-                last_reachable = datetime.min
-                if imsi_id in devices:
-                    last_reachable = devices[imsi_id].last_reachable
-                new[imsi_id] = Device(imsi_id, imsi, last_reachable)
+        if dgs is not None:
+            for dg in dgs:
+                for d in dg['imsis']:
+                    imsi_id = str(d['imsi-id'])
+                    imsi = str(d['imsi-range-from'])
+                    last_reachable = datetime.min
+                    if imsi_id in devices:
+                        last_reachable = devices[imsi_id].last_reachable
+                    new[imsi_id] = Device(imsi_id, imsi, last_reachable)
         return new
 
     def get_subnet(self):