2016-09-02 22:05:09 +00:00
// Copyright 2016 Circonus, Inc. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
2016-07-22 19:49:23 +00:00
package circonusgometrics
// A Gauge is an instantaneous measurement of a value.
//
// Use a gauge to track metrics which increase and decrease (e.g., amount of
// free memory).
import (
"fmt"
)
// Gauge sets a gauge to a value
func ( m * CirconusMetrics ) Gauge ( metric string , val interface { } ) {
m . SetGauge ( metric , val )
}
// SetGauge sets a gauge to a value
func ( m * CirconusMetrics ) SetGauge ( metric string , val interface { } ) {
m . gm . Lock ( )
defer m . gm . Unlock ( )
m . gauges [ metric ] = m . gaugeValString ( val )
}
// RemoveGauge removes a gauge
func ( m * CirconusMetrics ) RemoveGauge ( metric string ) {
m . gm . Lock ( )
defer m . gm . Unlock ( )
delete ( m . gauges , metric )
}
2017-09-05 22:06:47 +00:00
// GetGaugeTest returns the current value for a gauge. (note: it is a function specifically for "testing", disable automatic submission during testing.)
func ( m * CirconusMetrics ) GetGaugeTest ( metric string ) ( string , error ) {
m . gm . Lock ( )
defer m . gm . Unlock ( )
if val , ok := m . gauges [ metric ] ; ok {
return val , nil
}
return "" , fmt . Errorf ( "Gauge metric '%s' not found" , metric )
}
2016-07-22 19:49:23 +00:00
// SetGaugeFunc sets a gauge to a function [called at flush interval]
func ( m * CirconusMetrics ) SetGaugeFunc ( metric string , fn func ( ) int64 ) {
m . gfm . Lock ( )
defer m . gfm . Unlock ( )
m . gaugeFuncs [ metric ] = fn
}
// RemoveGaugeFunc removes a gauge function
func ( m * CirconusMetrics ) RemoveGaugeFunc ( metric string ) {
m . gfm . Lock ( )
defer m . gfm . Unlock ( )
delete ( m . gaugeFuncs , metric )
}
// gaugeValString converts an interface value (of a supported type) to a string
func ( m * CirconusMetrics ) gaugeValString ( val interface { } ) string {
vs := ""
switch v := val . ( type ) {
default :
// ignore it, unsupported type
case int :
vs = fmt . Sprintf ( "%d" , v )
case int8 :
vs = fmt . Sprintf ( "%d" , v )
case int16 :
vs = fmt . Sprintf ( "%d" , v )
case int32 :
vs = fmt . Sprintf ( "%d" , v )
case int64 :
vs = fmt . Sprintf ( "%d" , v )
case uint :
vs = fmt . Sprintf ( "%d" , v )
case uint8 :
vs = fmt . Sprintf ( "%d" , v )
case uint16 :
vs = fmt . Sprintf ( "%d" , v )
case uint32 :
vs = fmt . Sprintf ( "%d" , v )
case uint64 :
vs = fmt . Sprintf ( "%d" , v )
case float32 :
vs = fmt . Sprintf ( "%f" , v )
case float64 :
vs = fmt . Sprintf ( "%f" , v )
}
return vs
}