|
39 | 39 | BASE_HTTP_METRICS = b""" |
40 | 40 | # HELP python_gc_objects_collected_total Objects collected during gc |
41 | 41 | # TYPE python_gc_objects_collected_total counter |
42 | | -python_gc_objects_collected_total{generation="0"} 16262.0 |
43 | | -python_gc_objects_collected_total{generation="1"} 3588.0 |
44 | | -python_gc_objects_collected_total{generation="2"} 325.0 |
| 42 | +python_gc_objects_collected_total{generation="0"} 13159.0 |
| 43 | +python_gc_objects_collected_total{generation="1"} 1583.0 |
| 44 | +python_gc_objects_collected_total{generation="2"} 81.0 |
45 | 45 | # HELP python_gc_objects_uncollectable_total Uncollectable objects found during GC |
46 | 46 | # TYPE python_gc_objects_uncollectable_total counter |
47 | 47 | python_gc_objects_uncollectable_total{generation="0"} 0.0 |
48 | 48 | python_gc_objects_uncollectable_total{generation="1"} 0.0 |
49 | 49 | python_gc_objects_uncollectable_total{generation="2"} 0.0 |
50 | 50 | # HELP python_gc_collections_total Number of times this generation was collected |
51 | 51 | # TYPE python_gc_collections_total counter |
52 | | -python_gc_collections_total{generation="0"} 1687.0 |
53 | | -python_gc_collections_total{generation="1"} 153.0 |
54 | | -python_gc_collections_total{generation="2"} 10.0 |
| 52 | +python_gc_collections_total{generation="0"} 1609.0 |
| 53 | +python_gc_collections_total{generation="1"} 146.0 |
| 54 | +python_gc_collections_total{generation="2"} 9.0 |
55 | 55 | # HELP python_info Python platform information |
56 | 56 | # TYPE python_info gauge |
57 | 57 | python_info{implementation="CPython",major="3",minor="12",patchlevel="2",version="3.12.2"} 1.0 |
58 | | -# HELP dstack_server_http_requests_total Total number of requests by method, status and handler. |
59 | | -# TYPE dstack_server_http_requests_total counter |
60 | | -dstack_server_http_requests_total{handler="/metrics",method="GET",status="2xx"} 1.0 |
61 | | -# HELP dstack_server_http_requests_created Total number of requests by method, status and handler. |
62 | | -# TYPE dstack_server_http_requests_created gauge |
63 | | -dstack_server_http_requests_created{handler="/metrics",method="GET",status="2xx"} 1.67262864e+09 |
64 | | -# HELP dstack_server_http_request_size_bytes Content length of incoming requests by handler. Only value of header is respected. Otherwise ignored. No percentile calculated. |
65 | | -# TYPE dstack_server_http_request_size_bytes summary |
66 | | -dstack_server_http_request_size_bytes_count{handler="/metrics"} 1.0 |
67 | | -dstack_server_http_request_size_bytes_sum{handler="/metrics"} 0.0 |
68 | | -# HELP dstack_server_http_request_size_bytes_created Content length of incoming requests by handler. Only value of header is respected. Otherwise ignored. No percentile calculated. |
69 | | -# TYPE dstack_server_http_request_size_bytes_created gauge |
70 | | -dstack_server_http_request_size_bytes_created{handler="/metrics"} 1.67262864e+09 |
71 | | -# HELP dstack_server_http_response_size_bytes Content length of outgoing responses by handler. Only value of header is respected. Otherwise ignored. No percentile calculated. |
72 | | -# TYPE dstack_server_http_response_size_bytes summary |
73 | | -dstack_server_http_response_size_bytes_count{handler="/metrics"} 1.0 |
74 | | -dstack_server_http_response_size_bytes_sum{handler="/metrics"} 17846.0 |
75 | | -# HELP dstack_server_http_response_size_bytes_created Content length of outgoing responses by handler. Only value of header is respected. Otherwise ignored. No percentile calculated. |
76 | | -# TYPE dstack_server_http_response_size_bytes_created gauge |
77 | | -dstack_server_http_response_size_bytes_created{handler="/metrics"} 1.67262864e+09 |
78 | | -# HELP dstack_server_http_request_duration_highr_seconds Latency with many buckets but no API specific labels. Made for more accurate percentile calculations. |
79 | | -# TYPE dstack_server_http_request_duration_highr_seconds histogram |
80 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.01"} 1.0 |
81 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.025"} 1.0 |
82 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.05"} 1.0 |
83 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.075"} 1.0 |
84 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.1"} 1.0 |
85 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.25"} 1.0 |
86 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.5"} 1.0 |
87 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="0.75"} 1.0 |
88 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="1.0"} 1.0 |
89 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="1.5"} 1.0 |
90 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="2.0"} 1.0 |
91 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="2.5"} 1.0 |
92 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="3.0"} 1.0 |
93 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="3.5"} 1.0 |
94 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="4.0"} 1.0 |
95 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="4.5"} 1.0 |
96 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="5.0"} 1.0 |
97 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="7.5"} 1.0 |
98 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="10.0"} 1.0 |
99 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="30.0"} 1.0 |
100 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="60.0"} 1.0 |
101 | | -dstack_server_http_request_duration_highr_seconds_bucket{le="+Inf"} 1.0 |
102 | | -dstack_server_http_request_duration_highr_seconds_count 1.0 |
103 | | -dstack_server_http_request_duration_highr_seconds_sum 0.0 |
104 | | -# HELP dstack_server_http_request_duration_highr_seconds_created Latency with many buckets but no API specific labels. Made for more accurate percentile calculations. |
105 | | -# TYPE dstack_server_http_request_duration_highr_seconds_created gauge |
106 | | -dstack_server_http_request_duration_highr_seconds_created 1.67262864e+09 |
107 | | -# HELP dstack_server_http_request_duration_seconds Latency with only few buckets by handler. Made to be only used if aggregation by handler is important. |
108 | | -# TYPE dstack_server_http_request_duration_seconds histogram |
109 | | -dstack_server_http_request_duration_seconds_bucket{handler="/metrics",le="0.1",method="GET"} 1.0 |
110 | | -dstack_server_http_request_duration_seconds_bucket{handler="/metrics",le="0.5",method="GET"} 1.0 |
111 | | -dstack_server_http_request_duration_seconds_bucket{handler="/metrics",le="1.0",method="GET"} 1.0 |
112 | | -dstack_server_http_request_duration_seconds_bucket{handler="/metrics",le="+Inf",method="GET"} 1.0 |
113 | | -dstack_server_http_request_duration_seconds_count{handler="/metrics",method="GET"} 1.0 |
114 | | -dstack_server_http_request_duration_seconds_sum{handler="/metrics",method="GET"} 0.0 |
115 | | -# HELP dstack_server_http_request_duration_seconds_created Latency with only few buckets by handler. Made to be only used if aggregation by handler is important. |
116 | | -# TYPE dstack_server_http_request_duration_seconds_created gauge |
117 | | -dstack_server_http_request_duration_seconds_created{handler="/metrics",method="GET"} 1.67262864e+09 |
| 58 | +# HELP dstack_server_requests_total Total number of HTTP requests |
| 59 | +# TYPE dstack_server_requests_total counter |
| 60 | +dstack_server_requests_total{endpoint="/metrics",http_status="200",method="GET",project_name="None"} 1.0 |
| 61 | +# HELP dstack_server_requests_created Total number of HTTP requests |
| 62 | +# TYPE dstack_server_requests_created gauge |
| 63 | +dstack_server_requests_created{endpoint="/metrics",http_status="200",method="GET",project_name="None"} 1.67262864e+09 |
| 64 | +# HELP dstack_server_request_duration_seconds HTTP request duration in seconds |
| 65 | +# TYPE dstack_server_request_duration_seconds histogram |
| 66 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.005",method="GET",project_name="None"} 1.0 |
| 67 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.01",method="GET",project_name="None"} 1.0 |
| 68 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.025",method="GET",project_name="None"} 1.0 |
| 69 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.05",method="GET",project_name="None"} 1.0 |
| 70 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.075",method="GET",project_name="None"} 1.0 |
| 71 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.1",method="GET",project_name="None"} 1.0 |
| 72 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.25",method="GET",project_name="None"} 1.0 |
| 73 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.5",method="GET",project_name="None"} 1.0 |
| 74 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="0.75",method="GET",project_name="None"} 1.0 |
| 75 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="1.0",method="GET",project_name="None"} 1.0 |
| 76 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="2.5",method="GET",project_name="None"} 1.0 |
| 77 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="5.0",method="GET",project_name="None"} 1.0 |
| 78 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="7.5",method="GET",project_name="None"} 1.0 |
| 79 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="10.0",method="GET",project_name="None"} 1.0 |
| 80 | +dstack_server_request_duration_seconds_bucket{endpoint="/metrics",http_status="200",le="+Inf",method="GET",project_name="None"} 1.0 |
| 81 | +dstack_server_request_duration_seconds_count{endpoint="/metrics",http_status="200",method="GET",project_name="None"} 1.0 |
| 82 | +dstack_server_request_duration_seconds_sum{endpoint="/metrics",http_status="200",method="GET",project_name="None"} 0.0 |
| 83 | +# HELP dstack_server_request_duration_seconds_created HTTP request duration in seconds |
| 84 | +# TYPE dstack_server_request_duration_seconds_created gauge |
| 85 | +dstack_server_request_duration_seconds_created{endpoint="/metrics",http_status="200",method="GET",project_name="None"} 1.67262864e+09 |
118 | 86 | """ |
119 | 87 |
|
120 | 88 |
|
@@ -283,7 +251,7 @@ async def test_returns_metrics(self, session: AsyncSession, client: AsyncClient) |
283 | 251 | response = await client.get("/metrics") |
284 | 252 |
|
285 | 253 | assert response.status_code == 200 |
286 | | - actual = ( |
| 254 | + expected = ( |
287 | 255 | dedent(f"""\ |
288 | 256 | # HELP dstack_instance_duration_seconds_total Total seconds the instance is running |
289 | 257 | # TYPE dstack_instance_duration_seconds_total counter |
@@ -365,7 +333,7 @@ async def test_returns_metrics(self, session: AsyncSession, client: AsyncClient) |
365 | 333 | + "\n" |
366 | 334 | + BASE_HTTP_METRICS.decode().strip() |
367 | 335 | ) |
368 | | - assert response.text.strip() == actual |
| 336 | + assert response.text.strip() == expected |
369 | 337 |
|
370 | 338 | @patch("dstack._internal.server.routers.prometheus.generate_latest", lambda: BASE_HTTP_METRICS) |
371 | 339 | async def test_returns_empty_response_if_no_runs(self, client: AsyncClient): |
|
0 commit comments