Fixes bug with VM status collection when VIM is down
[osm/MON.git] / osm_mon / collector / collector.py
index aad395a..f4ffba4 100644 (file)
@@ -27,11 +27,12 @@ import time
 import peewee
 
 from osm_mon.collector.backends.prometheus import PrometheusBackend
+from osm_mon.collector.infra_collectors.onos import OnosInfraCollector
 from osm_mon.collector.infra_collectors.openstack import OpenstackInfraCollector
-from osm_mon.collector.metric import Metric
 from osm_mon.collector.vnf_collectors.juju import VCACollector
 from osm_mon.collector.vnf_collectors.openstack import OpenstackCollector
 from osm_mon.collector.vnf_collectors.vmware import VMwareCollector
+from osm_mon.collector.vnf_collectors.vio import VIOCollector
 from osm_mon.core.common_db import CommonDbClient
 from osm_mon.core.config import Config
 from osm_mon.core.database import DatabaseManager
@@ -40,11 +41,15 @@ log = logging.getLogger(__name__)
 
 VIM_COLLECTORS = {
     "openstack": OpenstackCollector,
-    "vmware": VMwareCollector
+    "vmware": VMwareCollector,
+    "vio": VIOCollector
 }
 VIM_INFRA_COLLECTORS = {
     "openstack": OpenstackInfraCollector
 }
+SDN_INFRA_COLLECTORS = {
+    "onos": OnosInfraCollector
+}
 METRIC_BACKENDS = [
     PrometheusBackend
 ]
@@ -73,7 +78,7 @@ class Collector:
                 log.exception("Error collecting metrics")
 
     def _collect_vim_metrics(self, vnfr: dict, vim_account_id: str):
-        # TODO(diazb) Add support for vrops and aws
+        # TODO(diazb) Add support for aws
         database_manager = DatabaseManager(self.conf)
         vim_type = database_manager.get_vim_type(vim_account_id)
         if vim_type in VIM_COLLECTORS:
@@ -89,12 +94,23 @@ class Collector:
         vim_type = database_manager.get_vim_type(vim_account_id)
         if vim_type in VIM_INFRA_COLLECTORS:
             collector = VIM_INFRA_COLLECTORS[vim_type](self.conf, vim_account_id)
-            status = collector.is_vim_ok()
-            status_metric = Metric({'vim_id': vim_account_id}, 'vim_status', status)
-            self.queue.put(status_metric)
+            metrics = collector.collect()
+            for metric in metrics:
+                self.queue.put(metric)
         else:
             log.debug("vimtype %s is not supported.", vim_type)
 
+    def _collect_sdnc_infra_metrics(self, sdnc_id: str):
+        common_db = CommonDbClient(self.conf)
+        sdn_type = common_db.get_sdnc(sdnc_id)['type']
+        if sdn_type in SDN_INFRA_COLLECTORS:
+            collector = SDN_INFRA_COLLECTORS[sdn_type](self.conf, sdnc_id)
+            metrics = collector.collect()
+            for metric in metrics:
+                self.queue.put(metric)
+        else:
+            log.debug("sdn_type %s is not supported.", sdn_type)
+
     def _collect_vca_metrics(self, vnfr: dict):
         log.debug('_collect_vca_metrics')
         log.debug('vnfr: %s', vnfr)
@@ -124,6 +140,12 @@ class Collector:
                                         args=(vim['_id'],))
             processes.append(p)
             p.start()
+        sdncs = self.common_db.get_sdncs()
+        for sdnc in sdncs:
+            p = multiprocessing.Process(target=self._collect_sdnc_infra_metrics,
+                                        args=(sdnc['_id'],))
+            processes.append(p)
+            p.start()
         for process in processes:
             process.join(timeout=10)
         metrics = []