51 lines
879 B
Go
51 lines
879 B
Go
|
|
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 {
|
||
|
|
log.ErrorD("unknow-stat-category", logger.M{"category": d.category})
|
||
|
|
}
|
||
|
|
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"}
|
||
|
|
}
|