]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/dashboard_v2: get tcmu_runner service list using CephService
authorRicardo Dias <rdias@suse.com>
Wed, 21 Feb 2018 16:08:56 +0000 (16:08 +0000)
committerRicardo Dias <rdias@suse.com>
Mon, 5 Mar 2018 13:07:13 +0000 (13:07 +0000)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/pybind/mgr/dashboard_v2/controllers/tcmu_iscsi.py
src/pybind/mgr/dashboard_v2/tests/test_tcmu_iscsi.py

index db1c1460f176aca13a502a8fa44c2daa5692c07d..31136ef003ec155a5bc8df80e29090e3bb5c7427 100644 (file)
@@ -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']),
index a8b48dba6af0e4db415c54796f87512dd6aa96c9..f5b292e4fd348c5a2798c54f8151808f5be6208b 100644 (file)
@@ -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