Accept an HTTP request body without newline at end (#2266)
I don't like this behavior, but it's what InfluxDB accepts, so the telegraf listener should be consistent with that. I accidentally reverted this behavior when I refactored the telegraf metric representation earlier in this release cycle.
This commit is contained in:
parent
411853fc74
commit
e812a2efc6
|
@ -300,6 +300,9 @@ func (h *HTTPListener) serveWrite(res http.ResponseWriter, req *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *HTTPListener) parse(b []byte, t time.Time) error {
|
func (h *HTTPListener) parse(b []byte, t time.Time) error {
|
||||||
|
if !bytes.HasSuffix(b, []byte("\n")) {
|
||||||
|
b = append(b, '\n')
|
||||||
|
}
|
||||||
metrics, err := h.parser.ParseWithDefaultTime(b, t)
|
metrics, err := h.parser.ParseWithDefaultTime(b, t)
|
||||||
|
|
||||||
for _, m := range metrics {
|
for _, m := range metrics {
|
||||||
|
|
|
@ -16,6 +16,8 @@ import (
|
||||||
const (
|
const (
|
||||||
testMsg = "cpu_load_short,host=server01 value=12.0 1422568543702900257\n"
|
testMsg = "cpu_load_short,host=server01 value=12.0 1422568543702900257\n"
|
||||||
|
|
||||||
|
testMsgNoNewline = "cpu_load_short,host=server01 value=12.0 1422568543702900257"
|
||||||
|
|
||||||
testMsgs = `cpu_load_short,host=server02 value=12.0 1422568543702900257
|
testMsgs = `cpu_load_short,host=server02 value=12.0 1422568543702900257
|
||||||
cpu_load_short,host=server03 value=12.0 1422568543702900257
|
cpu_load_short,host=server03 value=12.0 1422568543702900257
|
||||||
cpu_load_short,host=server04 value=12.0 1422568543702900257
|
cpu_load_short,host=server04 value=12.0 1422568543702900257
|
||||||
|
@ -81,6 +83,28 @@ func TestWriteHTTP(t *testing.T) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// http listener should add a newline at the end of the buffer if it's not there
|
||||||
|
func TestWriteHTTPNoNewline(t *testing.T) {
|
||||||
|
listener := newTestHTTPListener()
|
||||||
|
|
||||||
|
acc := &testutil.Accumulator{}
|
||||||
|
require.NoError(t, listener.Start(acc))
|
||||||
|
defer listener.Stop()
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond * 25)
|
||||||
|
|
||||||
|
// post single message to listener
|
||||||
|
resp, err := http.Post("http://localhost:8186/write?db=mydb", "", bytes.NewBuffer([]byte(testMsgNoNewline)))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, 204, resp.StatusCode)
|
||||||
|
|
||||||
|
time.Sleep(time.Millisecond * 15)
|
||||||
|
acc.AssertContainsTaggedFields(t, "cpu_load_short",
|
||||||
|
map[string]interface{}{"value": float64(12)},
|
||||||
|
map[string]string{"host": "server01"},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
func TestWriteHTTPMaxLineSizeIncrease(t *testing.T) {
|
func TestWriteHTTPMaxLineSizeIncrease(t *testing.T) {
|
||||||
listener := &HTTPListener{
|
listener := &HTTPListener{
|
||||||
ServiceAddress: ":8296",
|
ServiceAddress: ":8296",
|
||||||
|
|
Loading…
Reference in New Issue