Adds alarm engine
[osm/MON.git] / osm_mon / collector / collectors / openstack.py
index 811014d..5053902 100644 (file)
 import datetime
 import json
 import logging
-import multiprocessing
-import gnocchiclient.exceptions
+from typing import List
 
+import gnocchiclient.exceptions
 from gnocchiclient.v1 import client as gnocchi_client
 from keystoneauth1 import session
 from keystoneauth1.identity import v3
 
 from osm_mon.collector.collectors.base_vim import BaseVimCollector
 from osm_mon.collector.metric import Metric
-from osm_mon.common.common_db_client import CommonDbClient
+from osm_mon.core.common_db import CommonDbClient
 from osm_mon.core.auth import AuthManager
+from osm_mon.core.exceptions import MetricNotFound
 from osm_mon.core.settings import Config
 
 log = logging.getLogger(__name__)
@@ -83,14 +84,15 @@ class OpenstackCollector(BaseVimCollector):
             cfg = Config.instance()
             return cfg.OS_DEFAULT_GRANULARITY
 
-    def collect(self, vnfr: dict, queue: multiprocessing.Queue):
+    def collect(self, vnfr: dict) -> List[Metric]:
         nsr_id = vnfr['nsr-id-ref']
         vnf_member_index = vnfr['member-vnf-index-ref']
         vnfd = self.common_db.get_vnfd(vnfr['vnfd-id'])
+        metrics = []
         for vdur in vnfr['vdur']:
             # This avoids errors when vdur records have not been completely filled
             if 'name' not in vdur:
-                return None
+                continue
             vdu = next(
                 filter(lambda vdu: vdu['id'] == vdur['vdu-id-ref'], vnfd['vdu'])
             )
@@ -101,13 +103,30 @@ class OpenstackCollector(BaseVimCollector):
                     start_date = datetime.datetime.now() - datetime.timedelta(seconds=self.granularity)
                     resource_id = self._get_resource_uuid(nsr_id, vnf_member_index, vdur['name'])
                     try:
-                        metrics = self.gnocchi_client.metric.get_measures(gnocchi_metric_name,
-                                                                          start=start_date,
-                                                                          resource_id=resource_id,
-                                                                          granularity=self.granularity)
-                        if len(metrics):
-                            metric = Metric(nsr_id, vnf_member_index, vdur['name'], metric_name, metrics[-1][2])
-                            queue.put(metric)
+                        measures = self.gnocchi_client.metric.get_measures(gnocchi_metric_name,
+                                                                           start=start_date,
+                                                                           resource_id=resource_id,
+                                                                           granularity=self.granularity)
+                        if len(measures):
+                            metric = Metric(nsr_id, vnf_member_index, vdur['name'], metric_name, measures[-1][2])
+                            metrics.append(metric)
                     except gnocchiclient.exceptions.NotFound as e:
                         log.debug("No metric found: %s", e)
                         pass
+        return metrics
+
+    def collect_one(self, nsr_id: str, vnf_member_index: int, vdur_name: str, metric_name: str) -> Metric:
+        gnocchi_metric_name = METRIC_MAPPINGS[metric_name]
+        start_date = datetime.datetime.now() - datetime.timedelta(seconds=self.granularity)
+        resource_id = self._get_resource_uuid(nsr_id, vnf_member_index, vdur_name)
+        try:
+            metrics = self.gnocchi_client.metric.get_measures(gnocchi_metric_name,
+                                                              start=start_date,
+                                                              resource_id=resource_id,
+                                                              granularity=self.granularity)
+            if len(metrics):
+                metric = Metric(nsr_id, vnf_member_index, vdur_name, metric_name, metrics[-1][2])
+                return metric
+        except gnocchiclient.exceptions.NotFound as e:
+            log.debug("No metric found: %s", e)
+        raise MetricNotFound()