X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwmonitor%2Frift%2Ftasklets%2Frwmonitor%2Fcore.py;h=36ea42a3c6ba9950915f679b573967bb67a48cd2;hb=f314b4af9744068a7ed7a6a6314220c3aa857523;hp=b8abea7441a9d85ccfa7c891d704c9bcaafb4ebe;hpb=6f1a3fe149e4a6b9803382cb299c902f4cf58ec9;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwmonitor/rift/tasklets/rwmonitor/core.py b/rwlaunchpad/plugins/rwmonitor/rift/tasklets/rwmonitor/core.py index b8abea74..36ea42a3 100644 --- a/rwlaunchpad/plugins/rwmonitor/rift/tasklets/rwmonitor/core.py +++ b/rwlaunchpad/plugins/rwmonitor/rift/tasklets/rwmonitor/core.py @@ -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: