X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fcollector%2Fvnf_collectors%2Fjuju.py;h=1ca8bf591043db6ca94304eab3d495ade2fea202;hb=73dbb4e243f47afef0d1bb61988608e256939e87;hp=6c5e314fe4f279bf67995e57205cf42e20907de4;hpb=5ac7c081ca13495185ecf6bdf302c16c25a4b759;p=osm%2FMON.git diff --git a/osm_mon/collector/vnf_collectors/juju.py b/osm_mon/collector/vnf_collectors/juju.py index 6c5e314..1ca8bf5 100644 --- a/osm_mon/collector/vnf_collectors/juju.py +++ b/osm_mon/collector/vnf_collectors/juju.py @@ -40,13 +40,24 @@ class VCACollector(BaseCollector): super().__init__(config) self.common_db = CommonDbClient(config) self.loop = asyncio.get_event_loop() - self.n2vc = N2VC(server=config.get('vca', 'host'), user=config.get('vca', 'user'), - secret=config.get('vca', 'secret')) + self.n2vc = N2VC(server=config.get('vca', 'host'), + user=config.get('vca', 'user'), + secret=config.get('vca', 'secret'), + ca_cert=config.get('vca', 'cacert')) 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']) + + # Populate extra tags for metrics + tags = {} + tags['ns_name'] = self.common_db.get_nsr(nsr_id)['name'] + if vnfr['_admin']['projects_read']: + tags['project_id'] = vnfr['_admin']['projects_read'][0] + else: + tags['project_id'] = '' + metrics = [] for vdur in vnfr['vdur']: # This avoids errors when vdur records have not been completely filled @@ -57,8 +68,10 @@ class VCACollector(BaseCollector): ) if 'vdu-configuration' in vdu and 'metrics' in vdu['vdu-configuration']: try: - vca_deployment_info = self.get_vca_deployment_info(nsr_id, vnf_member_index, vdur['name']) - except VcaDeploymentInfoNotFound: + vca_deployment_info = self.get_vca_deployment_info(nsr_id, vnf_member_index, vdur['vdu-id-ref'], + vdur['count-index']) + except VcaDeploymentInfoNotFound as e: + log.warning(repr(e)) continue measures = self.loop.run_until_complete(self.n2vc.GetMetrics(vca_deployment_info['model'], vca_deployment_info['application'])) @@ -67,28 +80,46 @@ class VCACollector(BaseCollector): for measure in measure_list: log.debug("Measure: %s", measure) metric = VnfMetric(nsr_id, vnf_member_index, vdur['name'], measure['key'], - float(measure['value'])) + float(measure['value']), tags) metrics.append(metric) if 'vnf-configuration' in vnfd and 'metrics' in vnfd['vnf-configuration']: try: - vca_deployment_info = self.get_vca_deployment_info(nsr_id, vnf_member_index, None) - except VcaDeploymentInfoNotFound: + vca_deployment_info = self.get_vca_deployment_info(nsr_id, vnf_member_index) + except VcaDeploymentInfoNotFound as e: + log.warning(repr(e)) return metrics measures = self.loop.run_until_complete(self.n2vc.GetMetrics(vca_deployment_info['model'], vca_deployment_info['application'])) + # Search for Mgmt VDU name, needed to query Prometheus based on alarm tags + # TODO: check a better way to look for Mgmt VDU + for vdur in vnfr['vdur']: + for interface in vdur['interfaces']: + if 'mgmt-vnf' in interface: + vdu_name = vdur['name'] + break log.debug('Measures: %s', measures) for measure_list in measures.values(): for measure in measure_list: log.debug("Measure: %s", measure) - metric = VnfMetric(nsr_id, vnf_member_index, '', measure['key'], float(measure['value'])) + metric = VnfMetric(nsr_id, vnf_member_index, vdu_name, + measure['key'], float(measure['value']), tags) metrics.append(metric) return metrics - def get_vca_deployment_info(self, nsr_id, vnf_member_index, vdur_name): + def get_vca_deployment_info(self, nsr_id, vnf_member_index, vdu_id=None, vdu_count=0): nsr = self.common_db.get_nsr(nsr_id) for vca_deployment in nsr["_admin"]["deployed"]["VCA"]: if vca_deployment: - if vca_deployment['member-vnf-index'] == vnf_member_index and vca_deployment['vdu_name'] == vdur_name: - return vca_deployment - raise VcaDeploymentInfoNotFound("VCA deployment info for nsr_id {}, index {} and vdur_name {} not found." - .format(nsr_id, vnf_member_index, vdur_name)) + if vdu_id is None: + if vca_deployment['member-vnf-index'] == vnf_member_index and vca_deployment['vdu_id'] is None: + return vca_deployment + else: + if vca_deployment['member-vnf-index'] == vnf_member_index and \ + vca_deployment['vdu_id'] == vdu_id and vca_deployment['vdu_count_index'] == vdu_count: + return vca_deployment + raise VcaDeploymentInfoNotFound( + "VCA deployment info for nsr_id {}, index {}, vdu_id {} and vdu_count_index {} not found.".format( + nsr_id, + vnf_member_index, + vdu_id, + vdu_count))