class_docstr: This is piggybacked into existing scalability tests.
code: def update_release_test_result(self, release_result: dict):
      test_result = self.get_result()
  
      def calc_endpoints_p(result, percent):
          return {
              # sort -> get PX -> convert second to ms -> round up.
              endpoint: calc_p(latencies, percent)
              for endpoint, latencies in result.items()
          }
  
      print("======Print per dashboard endpoint latencies======")
      print("=====================P50==========================")
      pprint(calc_endpoints_p(test_result.result, 50))
      print("=====================P95==========================")
      pprint(calc_endpoints_p(test_result.result, 95))
      print("=====================P99==========================")
      pprint(calc_endpoints_p(test_result.result, 99))
  
      latencies = []
      for per_endpoint_latencies in test_result.result.values():
          latencies.extend(per_endpoint_latencies)
      aggregated_metrics = {
          "p50": calc_p(latencies, 50),
          "p95": calc_p(latencies, 95),
          "p99": calc_p(latencies, 99),
      }
  
      print("=====================Aggregated====================")
      pprint(aggregated_metrics)
  
      release_result["_dashboard_test_success"] = test_result.success
      if test_result.success:
          if "perf_metrics" not in release_result:
              release_result["perf_metrics"] = []
  
          release_result["perf_metrics"].extend(
              [
                  {
                      "perf_metric_name": f"dashboard_{p}_latency_ms",
                      "perf_metric_value": value,
                      "perf_metric_type": "LATENCY",
                  }
                  for p, value in aggregated_metrics.items()
              ]
          )
          release_result[
              "_dashboard_memory_usage_mb"
          ] = test_result.memory_mb
  
imports: import asyncio
  import time
  import urllib
  from typing import Dict, Optional, List
  from pprint import pprint
  import requests
  import ray
  import logging
  from collections import defaultdict
  from ray.util.state import list_nodes
  from ray._private.test_utils import fetch_prometheus_metrics
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
  from pydantic import BaseModel
  from ray.dashboard.consts import DASHBOARD_METRIC_PORT
  from ray.dashboard.utils import get_address_for_submission_client
label_desc: Use image node_id 3 for calling the DashboardTestAtScale obj's underlying member method code with example usage: obj.update_release_test_result(release_result) and returns: unknown