|
1 | 1 | import io |
2 | 2 |
|
| 3 | +import pytest |
3 | 4 | import requests |
4 | 5 |
|
| 6 | +from datadog_checks.base import AgentCheck |
5 | 7 | from datadog_checks.dev.utils import get_metadata_metrics |
6 | 8 | from datadog_checks.stonebranch import StonebranchCheck |
7 | 9 |
|
|
20 | 22 | uc_database_connection_pool_allocated{db_type="MySQL",pool="Client"} 5.0 |
21 | 23 | """ |
22 | 24 |
|
| 25 | +PROM_TEXT_JVM = """\ |
| 26 | +# HELP jvm_threads_current Current thread count of a JVM |
| 27 | +# TYPE jvm_threads_current gauge |
| 28 | +jvm_threads_current 42.0 |
| 29 | +
|
| 30 | +# HELP jvm_threads_peak Peak thread count of a JVM |
| 31 | +# TYPE jvm_threads_peak gauge |
| 32 | +jvm_threads_peak 60.0 |
| 33 | +
|
| 34 | +# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area. |
| 35 | +# TYPE jvm_memory_used_bytes gauge |
| 36 | +jvm_memory_used_bytes{area="heap"} 123456789.0 |
| 37 | +
|
| 38 | +# HELP jvm_memory_committed_bytes Committed (bytes) of a given JVM memory area. |
| 39 | +# TYPE jvm_memory_committed_bytes gauge |
| 40 | +jvm_memory_committed_bytes{area="heap"} 256000000.0 |
| 41 | +
|
| 42 | +# HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds. |
| 43 | +# TYPE jvm_gc_collection_seconds gauge |
| 44 | +jvm_gc_collection_seconds{gc="G1 Young Generation"} 0.123 |
| 45 | +""" |
| 46 | + |
23 | 47 |
|
24 | 48 | def make_streaming_response(url: str, text: str) -> requests.Response: |
25 | 49 | r = requests.Response() |
@@ -87,3 +111,90 @@ def test_openmetrics_basic_auth_and_labels(aggregator, dd_run_check, mocker): |
87 | 111 |
|
88 | 112 | aggregator.assert_all_metrics_covered() |
89 | 113 | aggregator.assert_metrics_using_metadata(get_metadata_metrics()) |
| 114 | + |
| 115 | + |
| 116 | +def test_metric_groups_jvm(aggregator, dd_run_check, mocker): |
| 117 | + url = "http://test.local/metrics" |
| 118 | + instance = { |
| 119 | + "openmetrics_endpoint": url, |
| 120 | + "metric_groups": ["jvm"], |
| 121 | + "tags": ["environment:test"], |
| 122 | + } |
| 123 | + |
| 124 | + mocker.patch( |
| 125 | + "requests.sessions.Session.request", |
| 126 | + autospec=True, |
| 127 | + return_value=make_streaming_response(url, PROM_TEXT_JVM), |
| 128 | + ) |
| 129 | + |
| 130 | + check = StonebranchCheck("stonebranch", {}, [instance]) |
| 131 | + dd_run_check(check) |
| 132 | + |
| 133 | + endpoint_tag = f"endpoint:{url}" |
| 134 | + base_tags = ["environment:test", endpoint_tag] |
| 135 | + |
| 136 | + aggregator.assert_metric("stonebranch.jvm_threads_current", value=42.0, tags=base_tags) |
| 137 | + aggregator.assert_metric("stonebranch.jvm_threads_peak", value=60.0, tags=base_tags) |
| 138 | + aggregator.assert_metric( |
| 139 | + "stonebranch.jvm_memory_used_bytes", |
| 140 | + value=123456789.0, |
| 141 | + tags=base_tags + ["area:heap"], |
| 142 | + ) |
| 143 | + aggregator.assert_metric( |
| 144 | + "stonebranch.jvm_memory_committed_bytes", |
| 145 | + value=256000000.0, |
| 146 | + tags=base_tags + ["area:heap"], |
| 147 | + ) |
| 148 | + aggregator.assert_metric( |
| 149 | + "stonebranch.jvm_gc_collection_seconds", |
| 150 | + tags=base_tags + ["gc:G1 Young Generation"], |
| 151 | + ) |
| 152 | + |
| 153 | + |
| 154 | +def test_can_connect_ok(aggregator, dd_run_check, mocker): |
| 155 | + url = "http://test.local/metrics" |
| 156 | + instance = { |
| 157 | + "openmetrics_endpoint": url, |
| 158 | + "metrics": [{"uc_build_info": "uc_build.info"}], |
| 159 | + } |
| 160 | + |
| 161 | + mocker.patch( |
| 162 | + "requests.sessions.Session.request", |
| 163 | + autospec=True, |
| 164 | + return_value=make_streaming_response( |
| 165 | + url, "# HELP uc_build_info info\n# TYPE uc_build_info gauge\nuc_build_info{release=\"7.9\"} 1\n" |
| 166 | + ), |
| 167 | + ) |
| 168 | + |
| 169 | + check = StonebranchCheck("stonebranch", {}, [instance]) |
| 170 | + dd_run_check(check) |
| 171 | + |
| 172 | + aggregator.assert_service_check( |
| 173 | + "stonebranch.openmetrics.health", |
| 174 | + status=AgentCheck.OK, |
| 175 | + tags=[f"endpoint:{url}"], |
| 176 | + ) |
| 177 | + |
| 178 | + |
| 179 | +def test_can_connect_critical(aggregator, dd_run_check, mocker): |
| 180 | + url = "http://unreachable.local/metrics" |
| 181 | + instance = { |
| 182 | + "openmetrics_endpoint": url, |
| 183 | + "metrics": [{"uc_build_info": "uc_build.info"}], |
| 184 | + } |
| 185 | + |
| 186 | + mocker.patch( |
| 187 | + "requests.sessions.Session.request", |
| 188 | + autospec=True, |
| 189 | + side_effect=requests.exceptions.ConnectionError("Connection refused"), |
| 190 | + ) |
| 191 | + |
| 192 | + check = StonebranchCheck("stonebranch", {}, [instance]) |
| 193 | + with pytest.raises(Exception): |
| 194 | + dd_run_check(check) |
| 195 | + |
| 196 | + aggregator.assert_service_check( |
| 197 | + "stonebranch.openmetrics.health", |
| 198 | + status=AgentCheck.CRITICAL, |
| 199 | + tags=[f"endpoint:{url}"], |
| 200 | + ) |
0 commit comments