From 6efb2d9ee23a330a118d0a411a989ff966f1abaf Mon Sep 17 00:00:00 2001 From: Luis Rascao Date: Sun, 14 May 2017 16:34:59 +0100 Subject: [PATCH 1/4] Support Datadog tag format Add support for datadog extension containing metric tags, besides supporting `gorets:1|c|@0.1` also support `gorets:1|c|#tag1:t1,tag2:t2`. --- statsd.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/statsd.go b/statsd.go index fabab1b..d2b3e5c 100644 --- a/statsd.go +++ b/statsd.go @@ -143,13 +143,20 @@ func parseLineToQueue(line string, rip net.Addr) { if bar2 != -1 { typeEnd = bar1 + 1 + bar2 rest := line[bar1+1+bar2+1:] - if len(rest) < 2 || rest[0] != '@' { - log.Printf("bad line [%s] from ip [%v]", line, rip) - return - } - if sampleRate, err = strconv.ParseFloat(rest[1:], 64); err != nil { - log.Printf("bad line [%s] from ip [%v]", line, rip) - return + // sampling format + if rest[0] == '@' { + if sampleRate, err = strconv.ParseFloat(rest[1:], 64); err != nil { + log.Printf("bad line [%s] from ip [%v]", line, rip) + return + } + } else if rest[0] == '#' { + // tag format + // TODO: do something with the tags, now simply tolerate them + // tags := rest[1:] + // log.Printf("tags: %s", tags) + } else { + log.Printf("bad line [%s] from ip [%v]", line, rip) + return } } From 39e93d462989106a0da63f3980da507b5703e401 Mon Sep 17 00:00:00 2001 From: Luis Rascao Date: Sun, 14 May 2017 16:37:51 +0100 Subject: [PATCH 2/4] Tolerate histogram datadog metrics Support them for now simply as gauges. --- statsd.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/statsd.go b/statsd.go index d2b3e5c..a1d2afa 100644 --- a/statsd.go +++ b/statsd.go @@ -202,6 +202,17 @@ func parseLineToQueue(line string, rip net.Addr) { //log.Printf("set: %s=%s", line[0:colon], value) op.op = SDOP_S op.sval = value + case "h": + // log.Printf("histogram: %s=%s", line[0:colon], value) + ival, err := strconv.ParseInt(value, 10, 64) + if err != nil { + log.Printf("bad line [%s] from ip [%v]", line, rip) + return + } + // TODO: properly support histogram counters + // http://docs.datadoghq.com/guides/metrics/#histograms + op.op = SDOP_G_SET + op.ival = ival default: log.Printf("bad line [%s] from ip [%v]", line, rip) return From afe0c1fb8d64b30e83f9981dccff6ad299f8b583 Mon Sep 17 00:00:00 2001 From: Luis Rascao Date: Mon, 12 Mar 2018 10:57:40 +0000 Subject: [PATCH 3/4] Fix sample rate format --- statsd.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/statsd.go b/statsd.go index a1d2afa..8648e04 100644 --- a/statsd.go +++ b/statsd.go @@ -145,8 +145,9 @@ func parseLineToQueue(line string, rip net.Addr) { rest := line[bar1+1+bar2+1:] // sampling format if rest[0] == '@' { - if sampleRate, err = strconv.ParseFloat(rest[1:], 64); err != nil { - log.Printf("bad line [%s] from ip [%v]", line, rip) + sampleEnd := strings.Index(rest[0:], "|") + if sampleRate, err = strconv.ParseFloat(rest[1:sampleEnd], 64); err != nil { + log.Printf("bad line [%s] from ip [%v], err: %s", line, rip, err) return } } else if rest[0] == '#' { From 7b3267dfdb19d32e5063579b84f1b891b76401fc Mon Sep 17 00:00:00 2001 From: Luis Rascao Date: Mon, 12 Mar 2018 10:58:28 +0000 Subject: [PATCH 4/4] Print unknown statsd messages --- statsd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/statsd.go b/statsd.go index 8648e04..1b593aa 100644 --- a/statsd.go +++ b/statsd.go @@ -215,7 +215,7 @@ func parseLineToQueue(line string, rip net.Addr) { op.op = SDOP_G_SET op.ival = ival default: - log.Printf("bad line [%s] from ip [%v]", line, rip) + log.Printf("bad line [%s] from ip [%v], unknown %s", line, rip, line[bar1 + 1 : typeEnd]) return }