-#
+#
# Copyright 2016 RIFT.IO Inc
#
# Licensed under the Apache License, Version 2.0 (the "License");
except Exception:
return list()
-
class MonascaPluginFactory(PluginFactory):
PLUGIN_NAME = "monasca"
FALLBACKS = ["ceilometer",]
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"
self.register_plugin_factory(CeilometerPluginFactory())
self.register_plugin_factory(MonascaPluginFactory())
self.register_plugin_factory(UnavailablePluginFactory())
+ self.register_plugin_factory(BrocadeVcpePluginFactory())
+
@property
def log(self):
try:
factory = self._factories[name]
plugin = factory.create(cloud_account)
+
self._plugins[cloud_account.name] = plugin
return
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
None,
self._plugin.nfvi_metrics,
self._account,
- self._vim_id,
+ self._vim_id
),
timeout=NfviMetrics.TIMEOUT,
loop=self.loop,
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
vdu_metrics.memory.utilization = 100 * vdu_metrics.memory.used / vdu_metrics.memory.total
# Storage
- vdu_metrics.storage.used = metrics.storage.used
- vdu_metrics.storage.total = 1e9 * self.vdur.vm_flavor.storage_gb
- vdu_metrics.storage.utilization = 100 * vdu_metrics.storage.used / vdu_metrics.storage.total
+ try:
+ vdu_metrics.storage.used = metrics.storage.used
+ if self.vdur.has_field('volumes'):
+ for volume in self.vdur.volumes:
+ if vdu_metrics.storage.total is None:
+ vdu_metrics.storage.total = 1e9 * volume.size
+ else:
+ vdu_metrics.storage.total += (1e9 * volume.size)
+ else:
+ vdu_metrics.storage.total = 1e9 * self.vdur.vm_flavor.storage_gb
+ utilization = 100 * vdu_metrics.storage.used / vdu_metrics.storage.total
+ if utilization > 100:
+ utilization = 100
+ vdu_metrics.storage.utilization = utilization
+ except ZeroDivisionError:
+ vdu_metrics.storage.utilization = 0
# Network (incoming)
vdu_metrics.network.incoming.packets = metrics.network.incoming.packets
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
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)
"""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"""
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")
# 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]
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:
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: