- for vdur in vnfr['vdur']:
- # This avoids errors when vdur records have not been completely filled
- if 'name' not in vdur:
- continue
- vdu = next(
- filter(lambda vdu: vdu['id'] == vdur['vdu-id-ref'], vnfd['vdu'])
- )
- 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:
- continue
- measures = self.loop.run_until_complete(self.n2vc.GetMetrics(vca_deployment_info['model'],
- vca_deployment_info['application']))
- 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, vdur['name'], measure['key'],
- float(measure['value']))
- 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:
- return metrics
- measures = self.loop.run_until_complete(self.n2vc.GetMetrics(vca_deployment_info['model'],
- vca_deployment_info['application']))
- 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']))
- metrics.append(metric)
+ vdur = None
+ lcm_ops = vnfd["df"][0].get("lcm-operations-configuration")
+ if not lcm_ops:
+ return metrics
+ ops_config = lcm_ops.get("operate-vnf-op-config")
+ if not ops_config:
+ return metrics
+ day12ops = ops_config.get("day1-2", [])
+ for day12op in day12ops:
+ if day12op and "metrics" in day12op:
+ vdur = next(filter(lambda vdur: vdur["vdu-id-ref"] == day12op["id"], vnfr["vdur"]))
+
+ # This avoids errors when vdur records have not been completely filled
+ if vdur and "name" in vdur:
+ try:
+ 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
+ # This avoids errors before application and model is not ready till they are occured
+ if vca_deployment_info.get("model") and vca_deployment_info.get("application"):
+ measures = self.loop.run_until_complete(
+ self.n2vc.get_metrics(
+ vca_deployment_info["model"],
+ vca_deployment_info["application"],
+ vca_id=vnfr.get("vca-id"),
+ )
+ )
+ 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,
+ vdur["name"],
+ measure["key"],
+ float(measure["value"]),
+ tags,
+ )
+ metrics.append(metric)
+