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")
|
|
|
|
|
|
|
|
|
|
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, 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"}
|
|
|
|
|
}
|