diff --git a/py/tests/test_fetcher.py b/py/tests/test_fetcher.py index 73564c3..6d949ed 100644 --- a/py/tests/test_fetcher.py +++ b/py/tests/test_fetcher.py @@ -131,6 +131,25 @@ def test_warn_multiple_units(self) -> None: ) assert len(cm.output) == 1 + def test_warn_multiple_units_no_unit(self) -> None: + """ + Datadog omits `unit` for metrics without unit metadata. + """ + series_list = self.good_response["series"] + series_list[0].pop("unit") # type: ignore + with self.assertNoLogs("fetcher"): + ddf.warn_multiple_units( + cast(Sequence[ddf.DatadogResponseSeries], series_list) + ) + + def test_warn_multiple_units_single_unit(self) -> None: + series_list = self.good_response["series"] + series_list[0]["unit"] = [{"plural": "bytes"}] # type: ignore + with self.assertNoLogs("fetcher"): + ddf.warn_multiple_units( + cast(Sequence[ddf.DatadogResponseSeries], series_list) + ) + def test_warn_multiple_units_empty_series(self) -> None: """ Test that warn_multiple_units handles empty series list gracefully. diff --git a/py/usageaccountant/datadog_fetcher.py b/py/usageaccountant/datadog_fetcher.py index 6400f64..4d2a932 100644 --- a/py/usageaccountant/datadog_fetcher.py +++ b/py/usageaccountant/datadog_fetcher.py @@ -174,8 +174,9 @@ def warn_multiple_units(series_list: Sequence[DatadogResponseSeries]) -> None: if not series_list: return - unit_list = series_list[0]["unit"] - if unit_list and unit_list[1] is not None: + # Datadog omits `unit` entirely for metrics without unit metadata. + unit_list = series_list[0].get("unit") + if unit_list and len(unit_list) > 1 and unit_list[1] is not None: logger.warning(f"Received multiple units from Datadog: {unit_list}.")