diff --git a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/scraper.py b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/scraper.py index de5a25e0c86d1..66327405c4caa 100644 --- a/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/scraper.py +++ b/datadog_checks_base/datadog_checks/base/checks/openmetrics/v2/scraper.py @@ -285,7 +285,11 @@ def parse_metrics(self): # Since we determine `self.parse_metric_families` dynamically from the response and that's done as a # side effect inside the `line_streamer` generator, we need to consume the first line in order to # trigger that side effect. - line_streamer = chain([next(line_streamer)], line_streamer) + try: + line_streamer = chain([next(line_streamer)], line_streamer) + except StopIteration: + # If line_streamer is an empty iterator, next(line_streamer) fails. + return for metric in self.parse_metric_families(line_streamer): self.submit_telemetry_number_of_total_metric_samples(metric) diff --git a/openmetrics/tests/test_openmetrics.py b/openmetrics/tests/test_openmetrics.py index 3fd7eb75ffeb1..dc9e5c002077f 100644 --- a/openmetrics/tests/test_openmetrics.py +++ b/openmetrics/tests/test_openmetrics.py @@ -101,3 +101,12 @@ def test_openmetrics_use_latest_spec(aggregator, dd_run_check, mock_http_respons assert scraper.http.options['headers']['Accept'] == ( 'application/openmetrics-text;version=1.0.0,application/openmetrics-text;version=0.0.1' ) + + +def test_openmetrics_empty_response(aggregator, dd_run_check, mock_http_response, openmetrics_payload, caplog): + mock_http_response("") + + check = OpenMetricsCheck('openmetrics', {}, [instance_new]) + dd_run_check(check) + + aggregator.assert_all_metrics_covered()