123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package metric
- import (
- prom "github.com/prometheus/client_golang/prometheus"
- "github.com/wuntsong-org/go-zero-plus/core/proc"
- )
- type (
- // A CounterVecOpts is an alias of VectorOpts.
- CounterVecOpts VectorOpts
- // CounterVec interface represents a counter vector.
- CounterVec interface {
- // Inc increments labels.
- Inc(labels ...string)
- // Add adds labels with v.
- Add(v float64, labels ...string)
- close() bool
- }
- promCounterVec struct {
- counter *prom.CounterVec
- }
- )
- // NewCounterVec returns a CounterVec.
- func NewCounterVec(cfg *CounterVecOpts) CounterVec {
- if cfg == nil {
- return nil
- }
- vec := prom.NewCounterVec(prom.CounterOpts{
- Namespace: cfg.Namespace,
- Subsystem: cfg.Subsystem,
- Name: cfg.Name,
- Help: cfg.Help,
- }, cfg.Labels)
- prom.MustRegister(vec)
- cv := &promCounterVec{
- counter: vec,
- }
- proc.AddShutdownListener(func() {
- cv.close()
- })
- return cv
- }
- func (cv *promCounterVec) Add(v float64, labels ...string) {
- update(func() {
- cv.counter.WithLabelValues(labels...).Add(v)
- })
- }
- func (cv *promCounterVec) Inc(labels ...string) {
- update(func() {
- cv.counter.WithLabelValues(labels...).Inc()
- })
- }
- func (cv *promCounterVec) close() bool {
- return prom.Unregister(cv.counter)
- }
|