From e8737faf0ae94c8b2bfa6d8ffd4517c2bf6d785c Mon Sep 17 00:00:00 2001 From: Igor Cherkaev Date: Tue, 28 Apr 2020 22:56:12 -0500 Subject: [PATCH] fix(prometheus): Handle +Inf/-Inf from Prometheus (#707) * Handle +Inf/-Inf from prometheus Prometheus can return not only "NaN", but also "+Inf" and "-Inf" as values for metrics. Handle it properly and not crash if received such. * fix(prometheus): Handle +Inf/-Inf as values from prometheus Prometheus can return not only "NaN", but also "+Inf" and "-Inf" as values for metrics. Handle it properly and not crash if received such. Co-authored-by: Justin Field --- .../config/PrometheusResponseConverter.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/kayenta-prometheus/src/main/java/com/netflix/kayenta/prometheus/config/PrometheusResponseConverter.java b/kayenta-prometheus/src/main/java/com/netflix/kayenta/prometheus/config/PrometheusResponseConverter.java index ea2359c36..ffdffb28a 100644 --- a/kayenta-prometheus/src/main/java/com/netflix/kayenta/prometheus/config/PrometheusResponseConverter.java +++ b/kayenta-prometheus/src/main/java/com/netflix/kayenta/prometheus/config/PrometheusResponseConverter.java @@ -73,7 +73,22 @@ public Object fromBody(TypedInput body, Type type) throws ConversionException { List dataValues = new ArrayList(values.size()); for (List tuple : values) { - dataValues.add(Double.valueOf((String) tuple.get(1))); + String val = (String) tuple.get(1); + if (val != null) { + switch (val) { + case "+Inf": + dataValues.add(Double.POSITIVE_INFINITY); + break; + case "-Inf": + dataValues.add(Double.NEGATIVE_INFINITY); + break; + case "NaN": + dataValues.add(Double.NaN); + break; + default: + dataValues.add(Double.valueOf(val)); + } + } } long startTimeMillis =