mirror of
https://github.com/go-kratos/kratos.git
synced 2025-01-10 00:29:01 +02:00
38 lines
668 B
Go
38 lines
668 B
Go
package metric
|
|
|
|
import "sync/atomic"
|
|
|
|
var _ Metric = &gauge{}
|
|
|
|
// Gauge stores a numerical value that can be add arbitrarily.
|
|
type Gauge interface {
|
|
Metric
|
|
// Sets sets the value to the given number.
|
|
Set(int64)
|
|
}
|
|
|
|
// GaugeOpts is an alias of Opts.
|
|
type GaugeOpts Opts
|
|
|
|
type gauge struct {
|
|
val int64
|
|
}
|
|
|
|
// NewGauge creates a new Gauge based on the GaugeOpts.
|
|
func NewGauge(opts GaugeOpts) Gauge {
|
|
return &gauge{}
|
|
}
|
|
|
|
func (g *gauge) Add(val int64) {
|
|
atomic.AddInt64(&g.val, val)
|
|
}
|
|
|
|
func (g *gauge) Set(val int64) {
|
|
old := atomic.LoadInt64(&g.val)
|
|
atomic.CompareAndSwapInt64(&g.val, old, val)
|
|
}
|
|
|
|
func (g *gauge) Value() int64 {
|
|
return atomic.LoadInt64(&g.val)
|
|
}
|