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__)
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'])
)
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()