]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/rbd_iscsi.py
4 from remote_view_cache
import RemoteViewCache
6 SERVICE_TYPE
= 'tcmu-runner'
8 class DaemonsAndImages(RemoteViewCache
):
12 for server
in self
._module
.list_servers():
13 for service
in server
['services']:
14 if service
['type'] == SERVICE_TYPE
:
15 metadata
= self
._module
.get_metadata(SERVICE_TYPE
,
17 status
= self
._module
.get_daemon_status(SERVICE_TYPE
,
20 daemon
= daemons
.get(server
['hostname'], None)
23 'server_hostname': server
['hostname'],
24 'version': metadata
['ceph_version'],
26 'non_optimized_paths': 0
28 daemons
[server
['hostname']] = daemon
30 service_id
= service
['id']
31 device_id
= service_id
.split(':')[-1]
32 image
= images
.get(device_id
)
35 'device_id': device_id
,
36 'pool_name': metadata
['pool_name'],
37 'name': metadata
['image_name'],
38 'id': metadata
.get('image_id', None),
39 'optimized_paths': [],
40 'non_optimized_paths': []
42 images
[device_id
] = image
43 if status
.get('lock_owner', 'false') == 'true':
44 daemon
['optimized_paths'] += 1
45 image
['optimized_paths'].append(server
['hostname'])
47 perf_key_prefix
= "librbd-{id}-{pool}-{name}.".format(
48 id=metadata
.get('image_id', ''),
49 pool
=metadata
['pool_name'],
50 name
=metadata
['image_name'])
51 perf_key
= "{}lock_acquired_time".format(perf_key_prefix
)
52 lock_acquired_time
= (self
._module
.get_counter(
53 'tcmu-runner', service_id
, perf_key
)[perf_key
] or
54 [[0,0]])[-1][1] / 1000000000
55 if lock_acquired_time
> image
.get('optimized_since', None):
56 image
['optimized_since'] = lock_acquired_time
58 image
['stats_history'] = {}
59 for s
in ['rd', 'wr', 'rd_bytes', 'wr_bytes']:
60 perf_key
= "{}{}".format(perf_key_prefix
, s
)
61 image
['stats'][s
] = self
._module
.get_rate(
62 'tcmu-runner', service_id
, perf_key
)
63 image
['stats_history'][s
] = self
._module
.get_counter(
64 'tcmu-runner', service_id
, perf_key
)[perf_key
]
66 daemon
['non_optimized_paths'] += 1
67 image
['non_optimized_paths'].append(server
['hostname'])
70 'daemons': [daemons
[k
] for k
in sorted(daemons
, key
=daemons
.get
)],
71 'images': [images
[k
] for k
in sorted(images
, key
=images
.get
)]
75 def __init__(self
, module_inst
):
76 self
.content_data
= DaemonsAndImages(module_inst
)