tags["project_id"] = ""
metrics = []
- 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["vdu-id-ref"],
- vdur["count-index"],
- )
- except VcaDeploymentInfoNotFound as e:
- log.warning(repr(e))
- continue
- 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(
+ 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["name"],
- measure["key"],
- float(measure["value"]),
- tags,
+ vdur["vdu-id-ref"],
+ vdur["count-index"],
)
- 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
- )
- except VcaDeploymentInfoNotFound as e:
- log.warning(repr(e))
- return metrics
- measures = self.loop.run_until_complete(
- self.n2vc.get_metrics(
- vca_deployment_info["model"],
- vca_deployment_info["application"],
- vca_id=vnfr.get("vca-id"),
- )
- )
- # 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,
- vdu_name,
- measure["key"],
- float(measure["value"]),
- tags,
- )
- metrics.append(metric)
+ 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)
+
return metrics
def get_vca_deployment_info(