summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/armon/go-metrics/circonus/circonus.go
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2017-05-17 16:51:25 -0400
committerGitHub <noreply@github.com>2017-05-17 16:51:25 -0400
commitd103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26 (patch)
treedbde13123c6add150448f7b75753ac022d862475 /vendor/github.com/armon/go-metrics/circonus/circonus.go
parentcd23b8139a9463b67e3096744321f6f4eb0ca40a (diff)
downloadchat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.tar.gz
chat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.tar.bz2
chat-d103ed6ca97ca5a2669f6cf5fe4b3d2a9c945f26.zip
Upgrading server dependancies (#6431)
Diffstat (limited to 'vendor/github.com/armon/go-metrics/circonus/circonus.go')
-rw-r--r--vendor/github.com/armon/go-metrics/circonus/circonus.go92
1 files changed, 92 insertions, 0 deletions
diff --git a/vendor/github.com/armon/go-metrics/circonus/circonus.go b/vendor/github.com/armon/go-metrics/circonus/circonus.go
new file mode 100644
index 000000000..c6e3974b5
--- /dev/null
+++ b/vendor/github.com/armon/go-metrics/circonus/circonus.go
@@ -0,0 +1,92 @@
+// Circonus Metrics Sink
+
+package circonus
+
+import (
+ "strings"
+
+ cgm "github.com/circonus-labs/circonus-gometrics"
+)
+
+// CirconusSink provides an interface to forward metrics to Circonus with
+// automatic check creation and metric management
+type CirconusSink struct {
+ metrics *cgm.CirconusMetrics
+}
+
+// Config options for CirconusSink
+// See https://github.com/circonus-labs/circonus-gometrics for configuration options
+type Config cgm.Config
+
+// NewCirconusSink - create new metric sink for circonus
+//
+// one of the following must be supplied:
+// - API Token - search for an existing check or create a new check
+// - API Token + Check Id - the check identified by check id will be used
+// - API Token + Check Submission URL - the check identified by the submission url will be used
+// - Check Submission URL - the check identified by the submission url will be used
+// metric management will be *disabled*
+//
+// Note: If submission url is supplied w/o an api token, the public circonus ca cert will be used
+// to verify the broker for metrics submission.
+func NewCirconusSink(cc *Config) (*CirconusSink, error) {
+ cfg := cgm.Config{}
+ if cc != nil {
+ cfg = cgm.Config(*cc)
+ }
+
+ metrics, err := cgm.NewCirconusMetrics(&cfg)
+ if err != nil {
+ return nil, err
+ }
+
+ return &CirconusSink{
+ metrics: metrics,
+ }, nil
+}
+
+// Start submitting metrics to Circonus (flush every SubmitInterval)
+func (s *CirconusSink) Start() {
+ s.metrics.Start()
+}
+
+// Flush manually triggers metric submission to Circonus
+func (s *CirconusSink) Flush() {
+ s.metrics.Flush()
+}
+
+// SetGauge sets value for a gauge metric
+func (s *CirconusSink) SetGauge(key []string, val float32) {
+ flatKey := s.flattenKey(key)
+ s.metrics.SetGauge(flatKey, int64(val))
+}
+
+// EmitKey is not implemented in circonus
+func (s *CirconusSink) EmitKey(key []string, val float32) {
+ // NOP
+}
+
+// IncrCounter increments a counter metric
+func (s *CirconusSink) IncrCounter(key []string, val float32) {
+ flatKey := s.flattenKey(key)
+ s.metrics.IncrementByValue(flatKey, uint64(val))
+}
+
+// AddSample adds a sample to a histogram metric
+func (s *CirconusSink) AddSample(key []string, val float32) {
+ flatKey := s.flattenKey(key)
+ s.metrics.RecordValue(flatKey, float64(val))
+}
+
+// Flattens key to Circonus metric name
+func (s *CirconusSink) flattenKey(parts []string) string {
+ joined := strings.Join(parts, "`")
+ return strings.Map(func(r rune) rune {
+ switch r {
+ case ' ':
+ return '_'
+ default:
+ return r
+ }
+ }, joined)
+}