code: def print_sumup(self):
      ps = percentile(self.succ_times, [0.5, 0.95, 0.99])
      ps_fail = percentile(self.exec_times, [0.5, 0.95, 0.99])
      health = (1 - self.client_busy / max(self.req_total, 1)) * 100
      headers = (
          "Result",
          "Total",
          "Reqs/s",
          "Resp Time Avg",
          "P50",
          "P95",
          "P99",
      )
      r = (
          (
              "succ",
              self.success,
              self.success / max(self.sess_time, 1),
              sum(self.succ_times) / max(self.success, 1),
              ps[0],
              ps[1],
              ps[2],
          ),
          (
              "fail",
              self.fail,
              self.fail / max(self.sess_time, 1),
              sum(self.exec_times) / max(self.fail, 1),
              ps_fail[0],
              ps_fail[1],
              ps_fail[2],
          ),
      )
  
      print(tabulate(r, headers=headers, tablefmt="fancy_grid"))
  
      print(f"------ Client Health {health:.1f}% ------")
      if health < 90:
          print(
              """
                  *** WARNING ***
                  The client health rate is low. The benchmark result is not reliable.
                  Possible solutions:
                  * check the failure_rate and avoid request failures
                  * Rewrite your request_producer to reduce the CPU cost
                  * Run more instances with multiprocessing. (Multi-threading will not
                                                              work because of the GIL)
                  * Reduce the total_user of your session
                  """
          )
  
imports: import asyncio
  import math
  import time
  from collections import defaultdict
  from tabulate import tabulate
label_desc: Use image node_id 7 for calling the Stat obj's underlying member method code with example usage: obj.print_sumup() without return types