package metrics import "github.com/prometheus/client_golang/prometheus" // Counter is a metrics that can only increment its current count type Counter interface { // Inc adds Sum(vs) to the counter. Sum(vs) must be positive. // // If len(vs) == 0, increments the counter by 1. Inc(vs ...float64) } // LabeledCounter is counter that must have labels populated before use. type LabeledCounter interface { WithValues(vs ...string) Counter } type labeledCounter struct { pc *prometheus.CounterVec } func (lc *labeledCounter) WithValues(vs ...string) Counter { return &counter{pc: lc.pc.WithLabelValues(vs...)} } func (lc *labeledCounter) Describe(ch chan<- *prometheus.Desc) { lc.pc.Describe(ch) } func (lc *labeledCounter) Collect(ch chan<- prometheus.Metric) { lc.pc.Collect(ch) } type counter struct { pc prometheus.Counter } func (c *counter) Inc(vs ...float64) { if len(vs) == 0 { c.pc.Inc() } c.pc.Add(sumFloat64(vs...)) } func (c *counter) Describe(ch chan<- *prometheus.Desc) { c.pc.Describe(ch) } func (c *counter) Collect(ch chan<- prometheus.Metric) { c.pc.Collect(ch) }