amazon-kinesis-client-go/batchconsumer/stats/stats.go

67 lines
1.2 KiB
Go
Raw Normal View History

2017-08-07 03:05:41 +00:00
package stats
import (
"time"
"gopkg.in/Clever/kayvee-go.v6/logger"
)
var log = logger.New("amazon-kinesis-client-go")
// DefaultCounters are core counters tracked by the batchconsumer
// These are stats we want to report on every tick, even if the values are zero
var DefaultCounters = []string{
"batches-sent",
"checkpoints-sent",
"msg-batched",
"batch-log-failures",
"unknown-error",
"processed-messages",
"no-tags",
"black-tag",
}
2017-08-07 03:05:41 +00:00
type datum struct {
name string
value int
category string
}
var queue = make(chan datum, 1000)
func init() {
data := map[string]int{}
tick := time.Tick(time.Minute)
go func() {
for {
select {
case d := <-queue:
if d.category == "counter" {
data[d.name] = data[d.name] + d.value
} else if d.category == "gauge" {
data[d.name] = d.value
} else {
2017-09-11 20:22:34 +00:00
log.ErrorD("unknown-stat-category", logger.M{"category": d.category})
2017-08-07 03:05:41 +00:00
}
case <-tick:
tmp := logger.M{}
for _, k := range DefaultCounters {
tmp[k] = 0
}
2017-08-07 03:05:41 +00:00
for k, v := range data {
tmp[k] = v
}
log.InfoD("stats", tmp)
}
}
}()
}
func Counter(name string, val int) {
queue <- datum{name, val, "counter"}
}
func Gauge(name string, val int) {
queue <- datum{name, val, "gauge"}
}