From 173d32a2016cd29a1e679ee224f6f99c2ea1363f Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Mon, 3 Oct 2022 07:23:06 -0600 Subject: [PATCH] fix(inputs.influxdb_listener): error on invalid precision (#11866) --- plugins/inputs/influxdb_listener/influxdb_listener.go | 9 ++++++++- plugins/parsers/influx/influx_upstream/parser.go | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/inputs/influxdb_listener/influxdb_listener.go b/plugins/inputs/influxdb_listener/influxdb_listener.go index c106aee5f..328b0fc9c 100644 --- a/plugins/inputs/influxdb_listener/influxdb_listener.go +++ b/plugins/inputs/influxdb_listener/influxdb_listener.go @@ -371,7 +371,14 @@ func (h *InfluxDBListener) handleWriteUpstreamParser(res http.ResponseWriter, re precisionStr := req.URL.Query().Get("precision") if precisionStr != "" { precision := getPrecisionMultiplier(precisionStr) - parser.SetTimePrecision(precision) + err := parser.SetTimePrecision(precision) + if err != nil { + h.Log.Debugf("error in upstream parser: %v", err) + if err := badRequest(res, err.Error()); err != nil { + h.Log.Debugf("error in bad-request: %v", err) + } + return + } } if req.ContentLength >= 0 { diff --git a/plugins/parsers/influx/influx_upstream/parser.go b/plugins/parsers/influx/influx_upstream/parser.go index ca221e547..9995b6aa4 100644 --- a/plugins/parsers/influx/influx_upstream/parser.go +++ b/plugins/parsers/influx/influx_upstream/parser.go @@ -226,7 +226,7 @@ func (sp *StreamParser) SetTimeFunc(f TimeFunc) { sp.defaultTime = f } -func (sp *StreamParser) SetTimePrecision(u time.Duration) { +func (sp *StreamParser) SetTimePrecision(u time.Duration) error { switch u { case time.Nanosecond: sp.precision = lineprotocol.Nanosecond @@ -236,7 +236,13 @@ func (sp *StreamParser) SetTimePrecision(u time.Duration) { sp.precision = lineprotocol.Millisecond case time.Second: sp.precision = lineprotocol.Second + case time.Minute: + return fmt.Errorf("time precision 'm' is not supported") + case time.Hour: + return fmt.Errorf("time precision 'h' is not supported") } + + return nil } // Next parses the next item from the stream. You can repeat calls to this