X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fcollector%2Fcollectors%2Fopenstack.py;h=5053902152891939c8102881aa1fb2815acf8d9f;hb=51f4486b06781541ee15ea332261247ed3e930f6;hp=811014db7ef367b136ecfc92159bea9670931eea;hpb=e27def0d99cc73c5c0b7550a28e95abd6c1cd996;p=osm%2FMON.git diff --git a/osm_mon/collector/collectors/openstack.py b/osm_mon/collector/collectors/openstack.py index 811014d..5053902 100644 --- a/osm_mon/collector/collectors/openstack.py +++ b/osm_mon/collector/collectors/openstack.py @@ -22,17 +22,18 @@ import datetime import json import logging -import multiprocessing -import gnocchiclient.exceptions +from typing import List +import gnocchiclient.exceptions from gnocchiclient.v1 import client as gnocchi_client from keystoneauth1 import session from keystoneauth1.identity import v3 from osm_mon.collector.collectors.base_vim import BaseVimCollector from osm_mon.collector.metric import Metric -from osm_mon.common.common_db_client import CommonDbClient +from osm_mon.core.common_db import CommonDbClient from osm_mon.core.auth import AuthManager +from osm_mon.core.exceptions import MetricNotFound from osm_mon.core.settings import Config log = logging.getLogger(__name__) @@ -83,14 +84,15 @@ class OpenstackCollector(BaseVimCollector): cfg = Config.instance() return cfg.OS_DEFAULT_GRANULARITY - def collect(self, vnfr: dict, queue: multiprocessing.Queue): + 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']) + metrics = [] for vdur in vnfr['vdur']: # This avoids errors when vdur records have not been completely filled if 'name' not in vdur: - return None + continue vdu = next( filter(lambda vdu: vdu['id'] == vdur['vdu-id-ref'], vnfd['vdu']) ) @@ -101,13 +103,30 @@ class OpenstackCollector(BaseVimCollector): start_date = datetime.datetime.now() - datetime.timedelta(seconds=self.granularity) resource_id = self._get_resource_uuid(nsr_id, vnf_member_index, vdur['name']) try: - metrics = self.gnocchi_client.metric.get_measures(gnocchi_metric_name, - start=start_date, - resource_id=resource_id, - granularity=self.granularity) - if len(metrics): - metric = Metric(nsr_id, vnf_member_index, vdur['name'], metric_name, metrics[-1][2]) - queue.put(metric) + measures = self.gnocchi_client.metric.get_measures(gnocchi_metric_name, + start=start_date, + resource_id=resource_id, + granularity=self.granularity) + if len(measures): + metric = Metric(nsr_id, vnf_member_index, vdur['name'], metric_name, measures[-1][2]) + metrics.append(metric) except gnocchiclient.exceptions.NotFound as e: log.debug("No metric found: %s", e) pass + return metrics + + def collect_one(self, nsr_id: str, vnf_member_index: int, vdur_name: str, metric_name: str) -> Metric: + gnocchi_metric_name = METRIC_MAPPINGS[metric_name] + start_date = datetime.datetime.now() - datetime.timedelta(seconds=self.granularity) + resource_id = self._get_resource_uuid(nsr_id, vnf_member_index, vdur_name) + try: + metrics = self.gnocchi_client.metric.get_measures(gnocchi_metric_name, + start=start_date, + resource_id=resource_id, + granularity=self.granularity) + if len(metrics): + metric = Metric(nsr_id, vnf_member_index, vdur_name, metric_name, metrics[-1][2]) + return metric + except gnocchiclient.exceptions.NotFound as e: + log.debug("No metric found: %s", e) + raise MetricNotFound()