From eae1c0e505b41c250a0d7e5efafda51c557b29af Mon Sep 17 00:00:00 2001 From: Aashish Sharma Date: Thu, 3 Aug 2023 17:44:55 +0530 Subject: [PATCH] mgr/dashboard: fix average object size calculation in rgw overview dashboard Fixes: https://tracker.ceph.com/issues/62318 Signed-off-by: Aashish Sharma --- src/pybind/mgr/dashboard/services/cluster.py | 45 +++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/src/pybind/mgr/dashboard/services/cluster.py b/src/pybind/mgr/dashboard/services/cluster.py index f239471d8f35b..70619e8b8b90f 100644 --- a/src/pybind/mgr/dashboard/services/cluster.py +++ b/src/pybind/mgr/dashboard/services/cluster.py @@ -50,25 +50,40 @@ class ClusterModel: total_objects = 0 total_pool_bytes_used = 0 average_object_size = 0 - rgw_pools = cls.get_rgw_pools() + total_data_pool_objects = 0 + total_data_pool_bytes_used = 0 + rgw_pools_data = cls.get_rgw_pools() + for pool in df['pools']: - if pool['name'] in rgw_pools: - total_objects = total_objects + pool['stats']['objects'] - total_pool_bytes_used = total_pool_bytes_used + pool['stats']['bytes_used'] - if total_objects != 0: - average_object_size = total_pool_bytes_used / total_objects - return ClusterCapacity(total_avail_bytes=df['stats']['total_avail_bytes'], - total_bytes=df['stats']['total_bytes'], - total_used_raw_bytes=df['stats']['total_used_raw_bytes'], - total_objects=total_objects, - total_pool_bytes_used=total_pool_bytes_used, - average_object_size=average_object_size)._asdict() + pool_name = str(pool['name']) + if pool_name in rgw_pools_data: + objects = pool['stats']['objects'] + pool_bytes_used = pool['stats']['bytes_used'] + total_objects += objects + total_pool_bytes_used += pool_bytes_used + if pool_name.endswith('.data'): + total_data_pool_objects += objects + replica = rgw_pools_data[pool_name] + total_data_pool_bytes_used += pool_bytes_used / replica + + average_object_size = total_data_pool_bytes_used / total_data_pool_objects if total_data_pool_objects != 0 else 0 # noqa E501 #pylint: disable=line-too-long + + return ClusterCapacity( + total_avail_bytes=df['stats']['total_avail_bytes'], + total_bytes=df['stats']['total_bytes'], + total_used_raw_bytes=df['stats']['total_used_raw_bytes'], + total_objects=total_objects, + total_pool_bytes_used=total_pool_bytes_used, + average_object_size=average_object_size + )._asdict() @classmethod def get_rgw_pools(cls): - rgw_pool_names = [] + rgw_pool_size = {} + osd_map = mgr.get('osd_map') for pool in osd_map['pools']: if 'rgw' in pool.get('application_metadata', {}): - rgw_pool_names.append(pool['pool_name']) - return rgw_pool_names + name = pool['pool_name'] + rgw_pool_size[name] = pool['size'] + return rgw_pool_size -- 2.39.5