1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package metrics
- import (
- "time"
- "github.com/prometheus/client_golang/prometheus"
- )
- // StartTimer begins a timer observation at the callsite. When the target
- // operation is completed, the caller should call the return done func().
- func StartTimer(timer Timer) (done func()) {
- start := time.Now()
- return func() {
- timer.Update(time.Since(start))
- }
- }
- // Timer is a metric that allows collecting the duration of an action in seconds
- type Timer interface {
- // Update records an observation, duration, and converts to the target
- // units.
- Update(duration time.Duration)
- // UpdateSince will add the duration from the provided starting time to the
- // timer's summary with the precisions that was used in creation of the timer
- UpdateSince(time.Time)
- }
- // LabeledTimer is a timer that must have label values populated before use.
- type LabeledTimer interface {
- WithValues(labels ...string) Timer
- }
- type labeledTimer struct {
- m *prometheus.HistogramVec
- }
- func (lt *labeledTimer) WithValues(labels ...string) Timer {
- return &timer{m: lt.m.WithLabelValues(labels...)}
- }
- func (lt *labeledTimer) Describe(c chan<- *prometheus.Desc) {
- lt.m.Describe(c)
- }
- func (lt *labeledTimer) Collect(c chan<- prometheus.Metric) {
- lt.m.Collect(c)
- }
- type timer struct {
- m prometheus.Histogram
- }
- func (t *timer) Update(duration time.Duration) {
- t.m.Observe(duration.Seconds())
- }
- func (t *timer) UpdateSince(since time.Time) {
- t.m.Observe(time.Since(since).Seconds())
- }
- func (t *timer) Describe(c chan<- *prometheus.Desc) {
- t.m.Describe(c)
- }
- func (t *timer) Collect(c chan<- prometheus.Metric) {
- t.m.Collect(c)
- }
|