12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package metric
- import (
- prom "github.com/prometheus/client_golang/prometheus"
- "github.com/tal-tech/go-zero/core/proc"
- )
- type (
- // A HistogramVecOpts is a histogram vector options.
- HistogramVecOpts struct {
- Namespace string
- Subsystem string
- Name string
- Help string
- Labels []string
- Buckets []float64
- }
- // A HistogramVec interface represents a histogram vector.
- HistogramVec interface {
- // Observe adds observation v to labels.
- Observe(v int64, lables ...string)
- close() bool
- }
- promHistogramVec struct {
- histogram *prom.HistogramVec
- }
- )
- // NewHistogramVec returns a HistogramVec.
- func NewHistogramVec(cfg *HistogramVecOpts) HistogramVec {
- if cfg == nil {
- return nil
- }
- vec := prom.NewHistogramVec(prom.HistogramOpts{
- Namespace: cfg.Namespace,
- Subsystem: cfg.Subsystem,
- Name: cfg.Name,
- Help: cfg.Help,
- Buckets: cfg.Buckets,
- }, cfg.Labels)
- prom.MustRegister(vec)
- hv := &promHistogramVec{
- histogram: vec,
- }
- proc.AddShutdownListener(func() {
- hv.close()
- })
- return hv
- }
- func (hv *promHistogramVec) Observe(v int64, labels ...string) {
- hv.histogram.WithLabelValues(labels...).Observe(float64(v))
- }
- func (hv *promHistogramVec) close() bool {
- return prom.Unregister(hv.histogram)
- }
|