Exits mon-evaluator process when encountered by a database exception
[osm/MON.git] / osm_mon / evaluator / evaluator.py
index 7613e0b..9dc8c48 100644 (file)
@@ -25,6 +25,7 @@ import logging
 import multiprocessing
 import time
 
+import peewee
 import requests
 from osm_common.dbbase import DbException
 
@@ -59,7 +60,7 @@ class Evaluator:
             OSM_METRIC_PREFIX + metric_name, nsr_id, vdur_name, vnf_member_index)
         request_url = cfg.OSMMON_PROMETHEUS_URL + "/api/v1/query?" + query_section
         log.info("Querying Prometheus: %s", request_url)
-        r = requests.get(request_url)
+        r = requests.get(request_url, timeout=cfg.OSMMON_REQUEST_TIMEOUT)
         if r.status_code == 200:
             json_response = r.json()
             if json_response['status'] == 'success':
@@ -87,6 +88,9 @@ class Evaluator:
             try:
                 self.evaluate()
                 time.sleep(cfg.OSMMON_EVALUATOR_INTERVAL)
+            except peewee.PeeweeException:
+                log.exception("Database error evaluating alarms: ")
+                raise
             except Exception:
                 log.exception("Error evaluating alarms")
 
@@ -136,8 +140,15 @@ class Evaluator:
                 processes.append(p)
                 p.start()
             if 'vnf-metric' in vnf_monitoring_param:
-                log.warning("vnf-metric is not currently supported.")
-                continue
+                vnf_metric_name = vnf_monitoring_param['vnf-metric']['vnf-metric-name-ref']
+                p = multiprocessing.Process(target=self._evaluate_metric,
+                                            args=(nsr_id,
+                                                  vnf_member_index,
+                                                  '',
+                                                  vnf_metric_name,
+                                                  alarm))
+                processes.append(p)
+                p.start()
 
         for process in processes:
             process.join()
@@ -157,7 +168,7 @@ class Evaluator:
         # Generate and send response
         resp_message = response.generate_response(
             'notify_alarm',
-            alarm_id=alarm.id,
+            alarm_id=alarm.uuid,
             vdu_name=alarm.vdur_name,
             vnf_member_index=alarm.vnf_member_index,
             ns_id=alarm.nsr_id,