code: def store_stats_summary(reply):
      """Returns formatted string describing object store stats in all nodes."""
      store_summary = (
          "--- Aggregate object store stats across all nodes ---\n"
      )
      # TODO(ekl) it would be nice if we could provide a full memory usage
      # breakdown by type (e.g., pinned by worker, primary, etc.)
      store_summary += (
          "Plasma memory usage {} MiB, {} objects, {}% full, {}% "
          "needed\n".format(
              int(
                  reply.store_stats.object_store_bytes_used
                  / (1024 * 1024)
              ),
              reply.store_stats.num_local_objects,
              round(
                  100
                  * reply.store_stats.object_store_bytes_used
                  / reply.store_stats.object_store_bytes_avail,
                  2,
              ),
              round(
                  100
                  * reply.store_stats.object_store_bytes_primary_copy
                  / reply.store_stats.object_store_bytes_avail,
                  2,
              ),
          )
      )
      if reply.store_stats.object_store_bytes_fallback > 0:
          store_summary += (
              "Plasma filesystem mmap usage: {} MiB\n".format(
                  int(
                      reply.store_stats.object_store_bytes_fallback
                      / (1024 * 1024)
                  )
              )
          )
      if reply.store_stats.spill_time_total_s > 0:
          store_summary += "Spilled {} MiB, {} objects, avg write throughput {} MiB/s\n".format(
              int(
                  reply.store_stats.spilled_bytes_total / (1024 * 1024)
              ),
              reply.store_stats.spilled_objects_total,
              int(
                  reply.store_stats.spilled_bytes_total
                  / (1024 * 1024)
                  / reply.store_stats.spill_time_total_s
              ),
          )
      if reply.store_stats.restore_time_total_s > 0:
          store_summary += "Restored {} MiB, {} objects, avg read throughput {} MiB/s\n".format(
              int(
                  reply.store_stats.restored_bytes_total / (1024 * 1024)
              ),
              reply.store_stats.restored_objects_total,
              int(
                  reply.store_stats.restored_bytes_total
                  / (1024 * 1024)
                  / reply.store_stats.restore_time_total_s
              ),
          )
      if reply.store_stats.consumed_bytes > 0:
          store_summary += (
              "Objects consumed by Ray tasks: {} MiB.\n".format(
                  int(reply.store_stats.consumed_bytes / (1024 * 1024))
              )
          )
      if reply.store_stats.object_pulls_queued:
          store_summary += (
              "Object fetches queued, waiting for available memory."
          )
  
      return store_summary
  
file_path: ray/python/ray/_private/internal_api.py
imports: import ray
  import ray._private.profiling
  import ray._private.services
  import ray._private.utils
  import ray._private.worker
  from ray._private import ray_constants
  from ray._private.state import GlobalState
  from ray._raylet import GcsClientOptions
label_desc: Use image node_id 6 for calling a global function with example usage: store_stats_summary(reply) and returns: store_summary