1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package metric
- import (
- "git.i2edu.net/i2/go-zero/core/proc"
- prom "github.com/prometheus/client_golang/prometheus"
- )
- 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) Inc(labels ...string) {
- cv.counter.WithLabelValues(labels...).Inc()
- }
- func (cv *promCounterVec) Add(v float64, labels ...string) {
- cv.counter.WithLabelValues(labels...).Add(v)
- }
- func (cv *promCounterVec) close() bool {
- return prom.Unregister(cv.counter)
- }
|