From e7e958e6658e3d0096b6cd1cc6d318c31ea579d9 Mon Sep 17 00:00:00 2001 From: Ricardo Dias Date: Wed, 21 Feb 2018 16:08:56 +0000 Subject: [PATCH] mgr/dashboard_v2: get tcmu_runner service list using CephService Signed-off-by: Ricardo Dias --- .../dashboard_v2/controllers/tcmu_iscsi.py | 105 +++++++++--------- .../mgr/dashboard_v2/tests/test_tcmu_iscsi.py | 2 + 2 files changed, 54 insertions(+), 53 deletions(-) diff --git a/src/pybind/mgr/dashboard_v2/controllers/tcmu_iscsi.py b/src/pybind/mgr/dashboard_v2/controllers/tcmu_iscsi.py index db1c1460f17..31136ef003e 100644 --- a/src/pybind/mgr/dashboard_v2/controllers/tcmu_iscsi.py +++ b/src/pybind/mgr/dashboard_v2/controllers/tcmu_iscsi.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import +from ..services.ceph_service import CephService from ..tools import ApiController, AuthRequired, RESTController SERVICE_TYPE = 'tcmu-runner' @@ -13,62 +14,60 @@ class TcmuIscsi(RESTController): def list(self): # pylint: disable=unused-argument daemons = {} images = {} - for server in self.mgr.list_servers(): - for service in server['services']: - if service['type'] == SERVICE_TYPE: - metadata = self.mgr.get_metadata(SERVICE_TYPE, - service['id']) - status = self.mgr.get_daemon_status(SERVICE_TYPE, - service['id']) + for service in CephService.get_service_list(SERVICE_TYPE): + metadata = service['metadata'] + status = service['status'] + hostname = service['hostname'] - daemon = daemons.get(server['hostname'], None) - if daemon is None: - daemon = { - 'server_hostname': server['hostname'], - 'version': metadata['ceph_version'], - 'optimized_paths': 0, - 'non_optimized_paths': 0 - } - daemons[server['hostname']] = daemon + daemon = daemons.get(hostname, None) + if daemon is None: + daemon = { + 'server_hostname': hostname, + 'version': metadata['ceph_version'], + 'optimized_paths': 0, + 'non_optimized_paths': 0 + } + daemons[hostname] = daemon - service_id = service['id'] - device_id = service_id.split(':')[-1] - image = images.get(device_id) - if image is None: - image = { - 'device_id': device_id, - 'pool_name': metadata['pool_name'], - 'name': metadata['image_name'], - 'id': metadata.get('image_id', None), - 'optimized_paths': [], - 'non_optimized_paths': [] - } - images[device_id] = image - if status.get('lock_owner', 'false') == 'true': - daemon['optimized_paths'] += 1 - image['optimized_paths'].append(server['hostname']) + service_id = service['id'] + device_id = service_id.split(':')[-1] + image = images.get(device_id) + if image is None: + image = { + 'device_id': device_id, + 'pool_name': metadata['pool_name'], + 'name': metadata['image_name'], + 'id': metadata.get('image_id', None), + 'optimized_paths': [], + 'non_optimized_paths': [] + } + images[device_id] = image - perf_key_prefix = "librbd-{id}-{pool}-{name}.".format( - id=metadata.get('image_id', ''), - pool=metadata['pool_name'], - name=metadata['image_name']) - perf_key = "{}lock_acquired_time".format(perf_key_prefix) - lock_acquired_time = (self.mgr.get_counter( - 'tcmu-runner', service_id, perf_key)[perf_key] or - [[0, 0]])[-1][1] / 1000000000 - if lock_acquired_time > image.get('optimized_since', 0): - image['optimized_since'] = lock_acquired_time - image['stats'] = {} - image['stats_history'] = {} - for s in ['rd', 'wr', 'rd_bytes', 'wr_bytes']: - perf_key = "{}{}".format(perf_key_prefix, s) - image['stats'][s] = self.mgr.get_rate( - 'tcmu-runner', service_id, perf_key) - image['stats_history'][s] = self.mgr.get_counter( - 'tcmu-runner', service_id, perf_key)[perf_key] - else: - daemon['non_optimized_paths'] += 1 - image['non_optimized_paths'].append(server['hostname']) + if status.get('lock_owner', 'false') == 'true': + daemon['optimized_paths'] += 1 + image['optimized_paths'].append(hostname) + + perf_key_prefix = "librbd-{id}-{pool}-{name}.".format( + id=metadata.get('image_id', ''), + pool=metadata['pool_name'], + name=metadata['image_name']) + perf_key = "{}lock_acquired_time".format(perf_key_prefix) + lock_acquired_time = (self.mgr.get_counter( + 'tcmu-runner', service_id, perf_key)[perf_key] or + [[0, 0]])[-1][1] / 1000000000 + if lock_acquired_time > image.get('optimized_since', 0): + image['optimized_since'] = lock_acquired_time + image['stats'] = {} + image['stats_history'] = {} + for s in ['rd', 'wr', 'rd_bytes', 'wr_bytes']: + perf_key = "{}{}".format(perf_key_prefix, s) + image['stats'][s] = self.mgr.get_rate( + 'tcmu-runner', service_id, perf_key) + image['stats_history'][s] = self.mgr.get_counter( + 'tcmu-runner', service_id, perf_key)[perf_key] + else: + daemon['non_optimized_paths'] += 1 + image['non_optimized_paths'].append(hostname) return { 'daemons': sorted(daemons.values(), key=lambda d: d['server_hostname']), diff --git a/src/pybind/mgr/dashboard_v2/tests/test_tcmu_iscsi.py b/src/pybind/mgr/dashboard_v2/tests/test_tcmu_iscsi.py index a8b48dba6af..f5b292e4fd3 100644 --- a/src/pybind/mgr/dashboard_v2/tests/test_tcmu_iscsi.py +++ b/src/pybind/mgr/dashboard_v2/tests/test_tcmu_iscsi.py @@ -3,6 +3,7 @@ import cherrypy import mock from ..controllers.auth import Auth +from ..services import Service from ..tools import SessionExpireAtBrowserCloseTool from ..controllers.tcmu_iscsi import TcmuIscsi from .helper import ControllerTestCase @@ -56,6 +57,7 @@ class TcmuIscsiControllerTest(ControllerTestCase, CPWebCase): mgr_mock.get_counter.return_value = mocked_get_counter mgr_mock.get_rate.return_value = mocked_get_rate mgr_mock.url_prefix = '' + Service.mgr = mgr_mock TcmuIscsi.mgr = mgr_mock TcmuIscsi._cp_config['tools.authenticate.on'] = False # pylint: disable=protected-access -- 2.39.5