From dce5b81642fa18c4e4570347dbde5befeda0fc69 Mon Sep 17 00:00:00 2001 From: AshMenhennett Date: Sat, 2 Nov 2019 00:05:02 +1100 Subject: [PATCH] Safeguard against int64 Overflow and default to MaxInt64 --- pkg/external-provider/metric_converter.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/external-provider/metric_converter.go b/pkg/external-provider/metric_converter.go index 927aae50..b44b811b 100644 --- a/pkg/external-provider/metric_converter.go +++ b/pkg/external-provider/metric_converter.go @@ -16,6 +16,7 @@ package provider import ( "errors" "fmt" + "math" prom "github.com/directxman12/k8s-prometheus-adapter/pkg/client" "github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider" @@ -55,12 +56,21 @@ func (c *metricConverter) Convert(info provider.ExternalMetricInfo, queryResult func (c *metricConverter) convertSample(info provider.ExternalMetricInfo, sample *model.Sample) (*external_metrics.ExternalMetricValue, error) { labels := c.convertLabels(sample.Metric) + intQuantity := int64(0) + if float64(sample.Value) == math.Inf(+1) { + intQuantity = math.MaxInt64 + } else if float64(sample.Value) == math.Inf(-1) { + intQuantity = math.MinInt64 + } else { + intQuantity = int64(sample.Value * 1000.0) + } + singleMetric := external_metrics.ExternalMetricValue{ MetricName: info.Metric, Timestamp: metav1.Time{ sample.Timestamp.Time(), }, - Value: *resource.NewMilliQuantity(int64(sample.Value*1000.0), resource.DecimalSI), + Value: *resource.NewMilliQuantity(intQuantity, resource.DecimalSI), MetricLabels: labels, }