update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b second try
[osm/SO.git] / rwlaunchpad / plugins / rwmonitor / rift / tasklets / rwmonitor / core.py
index b8abea7..36ea42a 100644 (file)
@@ -1,5 +1,5 @@
 
-# 
+#
 #   Copyright 2016 RIFT.IO Inc
 #
 #   Licensed under the Apache License, Version 2.0 (the "License");
@@ -94,7 +94,6 @@ class PluginFactory(object):
         except Exception:
             return list()
 
-
 class MonascaPluginFactory(PluginFactory):
     PLUGIN_NAME = "monasca"
     FALLBACKS = ["ceilometer",]
@@ -119,6 +118,21 @@ class CeilometerPluginFactory(PluginFactory):
 
         return impl
 
+class BrocadeVcpePluginFactory(PluginFactory):
+    PLUGIN_NAME = "brocade_vcpe"
+    FALLBACKS = ["unavailable",]
+
+    def create(self, cloud_account):
+        plugin = rw_peas.PeasPlugin("rwmon_brocade", 'RwMon-1.0')
+        impl = plugin.get_interface("Monitoring")
+
+        # Check that the plugin is available on the platform associated with
+        # the cloud account
+        _, available = impl.nfvi_metrics_available(cloud_account)
+        if not available:
+            raise PluginUnavailableError()
+
+        return impl
 
 class UnavailablePluginFactory(PluginFactory):
     PLUGIN_NAME = "unavailable"
@@ -158,6 +172,8 @@ class NfviMetricsPluginManager(object):
         self.register_plugin_factory(CeilometerPluginFactory())
         self.register_plugin_factory(MonascaPluginFactory())
         self.register_plugin_factory(UnavailablePluginFactory())
+        self.register_plugin_factory(BrocadeVcpePluginFactory())
+
 
     @property
     def log(self):
@@ -185,6 +201,7 @@ class NfviMetricsPluginManager(object):
             try:
                 factory = self._factories[name]
                 plugin = factory.create(cloud_account)
+
                 self._plugins[cloud_account.name] = plugin
                 return
 
@@ -231,7 +248,7 @@ class NfviMetrics(object):
         self._account = account
         self._plugin = plugin
         self._timestamp = 0
-        self._metrics = RwVnfrYang.YangData_Vnfr_VnfrCatalog_Vnfr_Vdur_NfviMetrics()
+        self._metrics = RwVnfrYang.YangData_RwProject_Project_VnfrCatalog_Vnfr_Vdur_NfviMetrics()
         self._vdur = vdur
         self._vim_id = vdur.vim_id
         self._updating = None
@@ -288,7 +305,7 @@ class NfviMetrics(object):
                             None,
                             self._plugin.nfvi_metrics,
                             self._account,
-                            self._vim_id,
+                            self._vim_id
                             ),
                         timeout=NfviMetrics.TIMEOUT,
                         loop=self.loop,
@@ -305,7 +322,7 @@ class NfviMetrics(object):
 
             try:
                 # Create uninitialized metric structure
-                vdu_metrics = RwVnfrYang.YangData_Vnfr_VnfrCatalog_Vnfr_Vdur_NfviMetrics()
+                vdu_metrics = RwVnfrYang.YangData_RwProject_Project_VnfrCatalog_Vnfr_Vdur_NfviMetrics()
 
                 # VCPU
                 vdu_metrics.vcpu.total = self.vdur.vm_flavor.vcpu_count
@@ -347,10 +364,10 @@ class NfviMetrics(object):
                 vdu_metrics.network.outgoing.byte_rate = metrics.network.outgoing.byte_rate
 
                 # External ports
-                vdu_metrics.external_ports.total = len(self.vdur.external_interface)
+                vdu_metrics.external_ports.total = len([intf for intf in self.vdur.interface if intf.type_yang == 'EXTERNAL'])
 
                 # Internal ports
-                vdu_metrics.internal_ports.total = len(self.vdur.internal_interface)
+                vdu_metrics.internal_ports.total = len([intf for intf in self.vdur.interface if intf.type_yang == 'INTERNAL'])
 
                 self._metrics = vdu_metrics
 
@@ -549,17 +566,19 @@ class Monitor(object):
     different sub-systems that are used to monitor the NFVI.
     """
 
-    def __init__(self, loop, log, config):
+    def __init__(self, loop, log, config, project):
         """Create a Monitor object
 
         Arguments:
-            loop   - an event loop
-            log    - the logger used by this object
-            config - an instance of InstanceConfiguration
+            loop    - an event loop
+            log     - the logger used by this object
+            config  - an instance of InstanceConfiguration
+            project - an instance of the project
 
         """
         self._loop = loop
         self._log = log
+        self._project = project
 
         self._cloud_accounts = dict()
         self._nfvi_plugins = NfviMetricsPluginManager(log)
@@ -580,6 +599,10 @@ class Monitor(object):
         """The event log used by this object"""
         return self._log
 
+    @property
+    def project(self):
+        return self._project
+
     @property
     def cache(self):
         """The NFVI metrics cache"""
@@ -624,6 +647,8 @@ class Monitor(object):
 
         if account.account_type == "openstack":
             self.register_cloud_account(account, "monasca")
+        elif account.account_type == "prop_cloud1":
+            self.register_cloud_account(account, "brocade_vcpe")
         else:
             self.register_cloud_account(account, "mock")
 
@@ -643,7 +668,7 @@ class Monitor(object):
 
         # Make sure that there are no VNFRs associated with this account
         for vnfr in self._vnfrs.values():
-            if vnfr.cloud_account == account_name:
+            if vnfr.datacenter == account_name:
                 raise AccountInUseError()
 
         del self._cloud_accounts[account_name]
@@ -693,10 +718,10 @@ class Monitor(object):
             the monitor.
 
         """
-        if vnfr.cloud_account not in self._cloud_accounts:
+        if vnfr.datacenter not in self._cloud_accounts:
             raise UnknownAccountError()
 
-        account = self._cloud_accounts[vnfr.cloud_account]
+        account = self._cloud_accounts[vnfr.datacenter]
 
         for vdur in vnfr.vdur:
             try:
@@ -719,10 +744,10 @@ class Monitor(object):
             the monitor.
 
         """
-        if vnfr.cloud_account not in self._cloud_accounts:
+        if vnfr.datacenter not in self._cloud_accounts:
             raise UnknownAccountError()
 
-        account = self._cloud_accounts[vnfr.cloud_account]
+        account = self._cloud_accounts[vnfr.datacenter]
 
         for vdur in vnfr.vdur:
             try: