
This commit includes updates that affects the build, testing, and deployment of Tile38. - The root level build.sh has been broken up into multiple scripts and placed in the "scripts" directory. - The vendor directory has been updated to follow the Go modules rules, thus `make` should work on isolated environments. Also some vendored packages may have been updated to a later version, if needed. - The Makefile has been updated to allow for making single binaries such as `make tile38-server`. There is some scaffolding during the build process, so from now on all binaries should be made using make. For example, to run a development version of the tile38-cli binary, do this: make tile38-cli && ./tile38-cli not this: go run cmd/tile38-cli/main.go - Travis.CI docker push script has been updated to address a change to Docker's JSON repo meta output, which in turn fixes a bug where new Tile38 versions were not being properly pushed to Docker
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
// +build !windows
|
|
|
|
package metrics
|
|
|
|
import (
|
|
"fmt"
|
|
"log/syslog"
|
|
"time"
|
|
)
|
|
|
|
// Output each metric in the given registry to syslog periodically using
|
|
// the given syslogger.
|
|
func Syslog(r Registry, d time.Duration, w *syslog.Writer) {
|
|
for _ = range time.Tick(d) {
|
|
r.Each(func(name string, i interface{}) {
|
|
switch metric := i.(type) {
|
|
case Counter:
|
|
w.Info(fmt.Sprintf("counter %s: count: %d", name, metric.Count()))
|
|
case Gauge:
|
|
w.Info(fmt.Sprintf("gauge %s: value: %d", name, metric.Value()))
|
|
case GaugeFloat64:
|
|
w.Info(fmt.Sprintf("gauge %s: value: %f", name, metric.Value()))
|
|
case Healthcheck:
|
|
metric.Check()
|
|
w.Info(fmt.Sprintf("healthcheck %s: error: %v", name, metric.Error()))
|
|
case Histogram:
|
|
h := metric.Snapshot()
|
|
ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
|
|
w.Info(fmt.Sprintf(
|
|
"histogram %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f",
|
|
name,
|
|
h.Count(),
|
|
h.Min(),
|
|
h.Max(),
|
|
h.Mean(),
|
|
h.StdDev(),
|
|
ps[0],
|
|
ps[1],
|
|
ps[2],
|
|
ps[3],
|
|
ps[4],
|
|
))
|
|
case Meter:
|
|
m := metric.Snapshot()
|
|
w.Info(fmt.Sprintf(
|
|
"meter %s: count: %d 1-min: %.2f 5-min: %.2f 15-min: %.2f mean: %.2f",
|
|
name,
|
|
m.Count(),
|
|
m.Rate1(),
|
|
m.Rate5(),
|
|
m.Rate15(),
|
|
m.RateMean(),
|
|
))
|
|
case Timer:
|
|
t := metric.Snapshot()
|
|
ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999})
|
|
w.Info(fmt.Sprintf(
|
|
"timer %s: count: %d min: %d max: %d mean: %.2f stddev: %.2f median: %.2f 75%%: %.2f 95%%: %.2f 99%%: %.2f 99.9%%: %.2f 1-min: %.2f 5-min: %.2f 15-min: %.2f mean-rate: %.2f",
|
|
name,
|
|
t.Count(),
|
|
t.Min(),
|
|
t.Max(),
|
|
t.Mean(),
|
|
t.StdDev(),
|
|
ps[0],
|
|
ps[1],
|
|
ps[2],
|
|
ps[3],
|
|
ps[4],
|
|
t.Rate1(),
|
|
t.Rate5(),
|
|
t.Rate15(),
|
|
t.RateMean(),
|
|
))
|
|
}
|
|
})
|
|
}
|
|
}
|