]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: fix average object size calculation in rgw overview 52787/head
authorAashish Sharma <aasharma@li-e74156cc-2f67-11b2-a85c-e98659a63c5c.ibm.com>
Thu, 3 Aug 2023 12:14:55 +0000 (17:44 +0530)
committerAashish Sharma <aasharma@li-e74156cc-2f67-11b2-a85c-e98659a63c5c.ibm.com>
Fri, 4 Aug 2023 07:45:53 +0000 (13:15 +0530)
dashboard

Fixes: https://tracker.ceph.com/issues/62318
Signed-off-by: Aashish Sharma <aasharma@redhat.com>
src/pybind/mgr/dashboard/services/cluster.py

index f239471d8f35bc2578d98c03feb216554b259f76..70619e8b8b90fdb3fd1546b3134ff5a9b7e9809a 100644 (file)
@@ -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