def test_usage_lib_report_data(monkeypatch, shutdown_only, tmp_path): with monkeypatch.context() as m: m.setenv("RAY_USAGE_STATS_ENABLED", "1") # Runtime env is required to run this test in minimal installation test. ray.init(num_cpus=0, runtime_env={"pip": ["ray[serve]"]}) """ Make sure the generated data is following the schema. """ cluster_metadata = ray_usage_lib.get_cluster_metadata( ray.experimental.internal_kv.internal_kv_get_gcs_client(), num_retries=20 ) d = ray_usage_lib.generate_report_data(cluster_metadata, 2, 2, 2) validate(instance=asdict(d), schema=schema) """ Make sure writing to a file works as expected """ client = ray_usage_lib.UsageReportClient() temp_dir = Path(tmp_path) client._write_usage_data(d, temp_dir) wait_for_condition(lambda: file_exists(temp_dir)) """ Make sure report usage data works as expected """ @ray.remote(num_cpus=0, runtime_env={"pip": ["ray[serve]"]}) class ServeInitator: def __init__(self): # Start the ray serve server to verify requests are sent # to the right place. from ray import serve serve.start() @serve.deployment(ray_actor_options={"num_cpus": 0}) async def usage(request): body = await request.json() if body == asdict(d): return True else: return False usage.deploy() def ready(self): pass # We need to start a serve with runtime env to make this test # work with minimal installation. s = ServeInitator.remote() ray.get(s.ready.remote()) # Query our endpoint over HTTP. r = client._report_usage_data("http://127.0.0.1:8000/usage", d) r.raise_for_status() assert json.loads(r.text) is True
def __init__(self, dashboard_head): super().__init__(dashboard_head) self.cluster_metadata = ray_usage_lib.get_cluster_metadata( ray.experimental.internal_kv.internal_kv_get_gcs_client(), num_retries=20, ) self.session_dir = dashboard_head.session_dir self.client = ray_usage_lib.UsageReportClient() # The total number of report succeeded. self.total_success = 0 # The total number of report failed. self.total_failed = 0 # The seq number of report. It increments whenever a new report is sent. self.seq_no = 0
def __init__(self, dashboard_head): super().__init__(dashboard_head) self.usage_stats_enabled = ray_usage_lib.usage_stats_enabled() self.cluster_metadata = ray_usage_lib.get_cluster_metadata( ray.experimental.internal_kv.internal_kv_get_gcs_client(), num_retries=20, ) self.cluster_config_to_report = ray_usage_lib.get_cluster_config_to_report( os.path.expanduser("~/ray_bootstrap_config.yaml")) self.session_dir = dashboard_head.session_dir self.client = ray_usage_lib.UsageReportClient() # The total number of report succeeded. self.total_success = 0 # The total number of report failed. self.total_failed = 0 # The seq number of report. It increments whenever a new report is sent. self.seq_no = 0
def test_usage_lib_report_data( monkeypatch, ray_start_cluster, tmp_path, reset_lib_usage ): with monkeypatch.context() as m: m.setenv("RAY_USAGE_STATS_ENABLED", "1") m.setenv("RAY_USAGE_STATS_REPORT_URL", "http://127.0.0.1:8000") cluster = ray_start_cluster cluster.add_node(num_cpus=0) # Runtime env is required to run this test in minimal installation test. ray.init(address=cluster.address, runtime_env={"pip": ["ray[serve]"]}) """ Make sure the generated data is following the schema. """ cluster_metadata = ray_usage_lib.get_cluster_metadata( ray.experimental.internal_kv.internal_kv_get_gcs_client(), num_retries=20 ) cluster_config_file_path = tmp_path / "ray_bootstrap_config.yaml" cluster_config_file_path.write_text( """ cluster_name: minimal max_workers: 1 provider: type: aws region: us-west-2 availability_zone: us-west-2a """ ) cluster_config_to_report = ray_usage_lib.get_cluster_config_to_report( cluster_config_file_path ) d = ray_usage_lib.generate_report_data( cluster_metadata, cluster_config_to_report, 2, 2, 2 ) validate(instance=asdict(d), schema=schema) """ Make sure writing to a file works as expected """ client = ray_usage_lib.UsageReportClient() temp_dir = Path(tmp_path) client.write_usage_data(d, temp_dir) wait_for_condition(lambda: file_exists(temp_dir)) """ Make sure report usage data works as expected """ @ray.remote(num_cpus=0) class ServeInitator: def __init__(self): # Start the ray serve server to verify requests are sent # to the right place. from ray import serve serve.start() @serve.deployment(ray_actor_options={"num_cpus": 0}) async def usage(request): body = await request.json() if body == asdict(d): return True else: return False usage.deploy() def ready(self): pass # We need to start a serve with runtime env to make this test # work with minimal installation. s = ServeInitator.remote() ray.get(s.ready.remote()) # Query our endpoint over HTTP. r = client.report_usage_data("http://127.0.0.1:8000/usage", d) r.raise_for_status() assert json.loads(r.text) is True