You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.0 KiB
104 lines
3.0 KiB
package metric
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
// Opts contains the common arguments for creating Metric.
|
|
type Opts struct {
|
|
}
|
|
|
|
// Metric is a sample interface.
|
|
// Implementations of Metrics in metric package are Counter, Gauge,
|
|
// PointGauge, RollingCounter and RollingGauge.
|
|
type Metric interface {
|
|
// Add adds the given value to the counter.
|
|
Add(int64)
|
|
// Value gets the current value.
|
|
// If the metric's type is PointGauge, RollingCounter, RollingGauge,
|
|
// it returns the sum value within the window.
|
|
Value() int64
|
|
}
|
|
|
|
// Aggregation contains some common aggregation function.
|
|
// Each aggregation can compute summary statistics of window.
|
|
type Aggregation interface {
|
|
// Min finds the min value within the window.
|
|
Min() float64
|
|
// Max finds the max value within the window.
|
|
Max() float64
|
|
// Avg computes average value within the window.
|
|
Avg() float64
|
|
// Sum computes sum value within the window.
|
|
Sum() float64
|
|
}
|
|
|
|
// VectorOpts contains the common arguments for creating vec Metric..
|
|
type VectorOpts struct {
|
|
Namespace string
|
|
Subsystem string
|
|
Name string
|
|
Help string
|
|
Labels []string
|
|
}
|
|
|
|
const (
|
|
_businessNamespace = "business"
|
|
_businessSubsystemCount = "count"
|
|
_businessSubSystemGauge = "gauge"
|
|
_businessSubSystemHistogram = "histogram"
|
|
)
|
|
|
|
var (
|
|
_defaultBuckets = []float64{5, 10, 25, 50, 100, 250, 500}
|
|
)
|
|
|
|
// NewBusinessMetricCount business Metric count vec.
|
|
// name or labels should not be empty.
|
|
func NewBusinessMetricCount(name string, labels ...string) CounterVec {
|
|
if name == "" || len(labels) == 0 {
|
|
panic(errors.New("stat:metric business count metric name should not be empty or labels length should be greater than zero"))
|
|
}
|
|
return NewCounterVec(&CounterVecOpts{
|
|
Namespace: _businessNamespace,
|
|
Subsystem: _businessSubsystemCount,
|
|
Name: name,
|
|
Labels: labels,
|
|
Help: fmt.Sprintf("business metric count %s", name),
|
|
})
|
|
}
|
|
|
|
// NewBusinessMetricGauge business Metric gauge vec.
|
|
// name or labels should not be empty.
|
|
func NewBusinessMetricGauge(name string, labels ...string) GaugeVec {
|
|
if name == "" || len(labels) == 0 {
|
|
panic(errors.New("stat:metric business gauge metric name should not be empty or labels length should be greater than zero"))
|
|
}
|
|
return NewGaugeVec(&GaugeVecOpts{
|
|
Namespace: _businessNamespace,
|
|
Subsystem: _businessSubSystemGauge,
|
|
Name: name,
|
|
Labels: labels,
|
|
Help: fmt.Sprintf("business metric gauge %s", name),
|
|
})
|
|
}
|
|
|
|
// NewBusinessMetricHistogram business Metric histogram vec.
|
|
// name or labels should not be empty.
|
|
func NewBusinessMetricHistogram(name string, buckets []float64, labels ...string) HistogramVec {
|
|
if name == "" || len(labels) == 0 {
|
|
panic(errors.New("stat:metric business histogram metric name should not be empty or labels length should be greater than zero"))
|
|
}
|
|
if len(buckets) == 0 {
|
|
buckets = _defaultBuckets
|
|
}
|
|
return NewHistogramVec(&HistogramVecOpts{
|
|
Namespace: _businessNamespace,
|
|
Subsystem: _businessSubSystemHistogram,
|
|
Name: name,
|
|
Labels: labels,
|
|
Buckets: buckets,
|
|
Help: fmt.Sprintf("business metric histogram %s", name),
|
|
})
|
|
}
|
|
|