From b1e82497e370666a413093191f512e733cfd7531 Mon Sep 17 00:00:00 2001 From: Kihamo Date: Thu, 8 Dec 2016 04:15:07 +0300 Subject: [PATCH 1/2] Fixed overwrite global tags in Influx adapter --- metrics/influx/influx.go | 9 +++++++-- metrics/influx/influx_test.go | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/metrics/influx/influx.go b/metrics/influx/influx.go index 0c555e116..8e9ba123c 100644 --- a/metrics/influx/influx.go +++ b/metrics/influx/influx.go @@ -168,10 +168,15 @@ func mergeTags(tags map[string]string, labelValues []string) map[string]string { if len(labelValues)%2 != 0 { panic("mergeTags received a labelValues with an odd number of strings") } + + ret := make(map[string]string, len(tags) + len(labelValues) / 2) + for k, v := range tags { + ret[k] = v + } for i := 0; i < len(labelValues); i += 2 { - tags[labelValues[i]] = labelValues[i+1] + ret[labelValues[i]] = labelValues[i+1] } - return tags + return ret } func sum(a []float64) float64 { diff --git a/metrics/influx/influx_test.go b/metrics/influx/influx_test.go index b5d3df4e2..56d35bd42 100644 --- a/metrics/influx/influx_test.go +++ b/metrics/influx/influx_test.go @@ -30,6 +30,29 @@ func TestCounter(t *testing.T) { } } +func TestCounter_RewriteTags(t *testing.T) { + in := New(map[string]string{}, influxdb.BatchPointsConfig{}, log.NewNopLogger()) + + reFirst := regexp.MustCompile(`influx_counter_first,tag_for_counter_first=first count=([0-9\.]+) [0-9]+`) + counterFirst := in.NewCounter("influx_counter_first").With("tag_for_counter_first", "first") + counterFirst.Add(11) + + reSecond := regexp.MustCompile(`influx_counter_second,tag_for_counter_second=second count=([0-9\.]+) [0-9]+`) + counterSecond := in.NewCounter("influx_counter_second").With("tag_for_counter_second", "second") + counterSecond.Add(22) + + client := &bufWriter{} + in.WriteTo(client) + + for _, row := range strings.Split(client.buf.String(), string('\n')) { + if strings.HasPrefix(row, "influx_counter_first") && !reFirst.MatchString(row) { + t.Fatal(`First counter not equal "`, reFirst.String() , `" want "`, row, `"`) + } else if strings.HasPrefix(row, "influx_counter_second") && !reSecond.MatchString(row) { + t.Fatal(`Second counter not equal "`, reSecond.String() , `" want "`, row, `"`) + } + } +} + func TestGauge(t *testing.T) { in := New(map[string]string{"foo": "alpha"}, influxdb.BatchPointsConfig{}, log.NewNopLogger()) re := regexp.MustCompile(`influx_gauge,foo=alpha value=([0-9\.]+) [0-9]+`) From 3d2e0cbc2e7a24d045f8de815bd1856ccffa0a43 Mon Sep 17 00:00:00 2001 From: Kihamo Date: Sat, 10 Dec 2016 22:47:09 +0300 Subject: [PATCH 2/2] Fix after code review --- metrics/influx/influx.go | 3 +- metrics/influx/influx_test.go | 54 ++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/metrics/influx/influx.go b/metrics/influx/influx.go index 8e9ba123c..b9a3f6698 100644 --- a/metrics/influx/influx.go +++ b/metrics/influx/influx.go @@ -168,8 +168,7 @@ func mergeTags(tags map[string]string, labelValues []string) map[string]string { if len(labelValues)%2 != 0 { panic("mergeTags received a labelValues with an odd number of strings") } - - ret := make(map[string]string, len(tags) + len(labelValues) / 2) + ret := make(map[string]string, len(tags)+len(labelValues)/2) for k, v := range tags { ret[k] = v } diff --git a/metrics/influx/influx_test.go b/metrics/influx/influx_test.go index 56d35bd42..57950f30c 100644 --- a/metrics/influx/influx_test.go +++ b/metrics/influx/influx_test.go @@ -30,29 +30,6 @@ func TestCounter(t *testing.T) { } } -func TestCounter_RewriteTags(t *testing.T) { - in := New(map[string]string{}, influxdb.BatchPointsConfig{}, log.NewNopLogger()) - - reFirst := regexp.MustCompile(`influx_counter_first,tag_for_counter_first=first count=([0-9\.]+) [0-9]+`) - counterFirst := in.NewCounter("influx_counter_first").With("tag_for_counter_first", "first") - counterFirst.Add(11) - - reSecond := regexp.MustCompile(`influx_counter_second,tag_for_counter_second=second count=([0-9\.]+) [0-9]+`) - counterSecond := in.NewCounter("influx_counter_second").With("tag_for_counter_second", "second") - counterSecond.Add(22) - - client := &bufWriter{} - in.WriteTo(client) - - for _, row := range strings.Split(client.buf.String(), string('\n')) { - if strings.HasPrefix(row, "influx_counter_first") && !reFirst.MatchString(row) { - t.Fatal(`First counter not equal "`, reFirst.String() , `" want "`, row, `"`) - } else if strings.HasPrefix(row, "influx_counter_second") && !reSecond.MatchString(row) { - t.Fatal(`Second counter not equal "`, reSecond.String() , `" want "`, row, `"`) - } - } -} - func TestGauge(t *testing.T) { in := New(map[string]string{"foo": "alpha"}, influxdb.BatchPointsConfig{}, log.NewNopLogger()) re := regexp.MustCompile(`influx_gauge,foo=alpha value=([0-9\.]+) [0-9]+`) @@ -105,6 +82,37 @@ func TestHistogramLabels(t *testing.T) { } } +func TestIssue404(t *testing.T) { + in := New(map[string]string{}, influxdb.BatchPointsConfig{}, log.NewNopLogger()) + + counterOne := in.NewCounter("influx_counter_one").With("a", "b") + counterOne.Add(123) + + counterTwo := in.NewCounter("influx_counter_two").With("c", "d") + counterTwo.Add(456) + + w := &bufWriter{} + in.WriteTo(w) + + lines := strings.Split(strings.TrimSpace(w.buf.String()), "\n") + if want, have := 2, len(lines); want != have { + t.Fatalf("want %d, have %d", want, have) + } + for _, line := range lines { + if strings.HasPrefix(line, "influx_counter_one") { + if !strings.HasPrefix(line, "influx_counter_one,a=b count=123 ") { + t.Errorf("invalid influx_counter_one: %s", line) + } + } else if strings.HasPrefix(line, "influx_counter_two") { + if !strings.HasPrefix(line, "influx_counter_two,c=d count=456 ") { + t.Errorf("invalid influx_counter_two: %s", line) + } + } else { + t.Errorf("unexpected line: %s", line) + } + } +} + type bufWriter struct { buf bytes.Buffer }