12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package metric
- import (
- "zero/core/proc"
- prom "github.com/prometheus/client_golang/prometheus"
- )
- type (
- CounterVecOpts VectorOpts
- CounterVec interface {
- Inc(lables ...string)
- Add(v float64, labels ...string)
- close() bool
- }
- promCounterVec struct {
- counter *prom.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, lables ...string) {
- cv.counter.WithLabelValues(lables...).Add(v)
- }
- func (cv *promCounterVec) close() bool {
- return prom.Unregister(cv.counter)
- }
|