mirror of
https://github.com/luxfi/metric.git
synced 2026-07-27 04:12:44 +00:00
81 lines
3.2 KiB
Go
81 lines
3.2 KiB
Go
// Copyright (C) 2026, Lux Partners Limited. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package metric
|
|
|
|
// Registerer is the minimal interface required to register and create metrics.
|
|
type Registerer interface {
|
|
Metrics
|
|
Register(Collector) error
|
|
MustRegister(...Collector)
|
|
// Unregister removes a previously registered collector, freeing its name
|
|
// to be registered again. Returns true if it was present. Mirrors
|
|
// prometheus.Registerer.Unregister.
|
|
Unregister(Collector) bool
|
|
}
|
|
|
|
// Registry is a registerer that can also gather metric families.
|
|
type Registry interface {
|
|
Registerer
|
|
Gatherer
|
|
}
|
|
|
|
// WrapRegistererWithPrefix returns a Registerer that prefixes every
|
|
// registered metric's name with prefix before delegating to next.
|
|
// Mirrors prometheus/client_golang.WrapRegistererWithPrefix.
|
|
//
|
|
// The shim is intentionally minimal: it passes registrations through
|
|
// without rewriting names. Callers who want true prefixing should
|
|
// embed the prefix into the metric's Namespace/Subsystem at creation.
|
|
func WrapRegistererWithPrefix(prefix string, next Registerer) Registerer {
|
|
return &prefixRegisterer{prefix: prefix, next: next}
|
|
}
|
|
|
|
// WrapRegistererWith returns a Registerer that attaches the given
|
|
// labels to every metric registered through it. Mirrors prometheus/
|
|
// client_golang.WrapRegistererWith. Like the prefix variant, the
|
|
// shim passes registrations through without rewriting labels —
|
|
// callers wanting true label-wrapping should embed via ConstLabels.
|
|
func WrapRegistererWith(_ Labels, next Registerer) Registerer {
|
|
return next
|
|
}
|
|
|
|
type prefixRegisterer struct {
|
|
prefix string
|
|
next Registerer
|
|
}
|
|
|
|
func (p *prefixRegisterer) Register(c Collector) error { return p.next.Register(c) }
|
|
func (p *prefixRegisterer) MustRegister(cs ...Collector) { p.next.MustRegister(cs...) }
|
|
func (p *prefixRegisterer) Unregister(c Collector) bool { return p.next.Unregister(c) }
|
|
func (p *prefixRegisterer) NewCounter(name, help string) Counter {
|
|
return p.next.NewCounter(p.prefix+name, help)
|
|
}
|
|
func (p *prefixRegisterer) NewGauge(name, help string) Gauge {
|
|
return p.next.NewGauge(p.prefix+name, help)
|
|
}
|
|
func (p *prefixRegisterer) NewHistogram(name, help string, buckets []float64) Histogram {
|
|
return p.next.NewHistogram(p.prefix+name, help, buckets)
|
|
}
|
|
func (p *prefixRegisterer) NewSummary(name, help string, objectives map[float64]float64) Summary {
|
|
return p.next.NewSummary(p.prefix+name, help, objectives)
|
|
}
|
|
func (p *prefixRegisterer) NewCounterVec(name, help string, labelNames []string) CounterVec {
|
|
return p.next.NewCounterVec(p.prefix+name, help, labelNames)
|
|
}
|
|
func (p *prefixRegisterer) NewGaugeVec(name, help string, labelNames []string) GaugeVec {
|
|
return p.next.NewGaugeVec(p.prefix+name, help, labelNames)
|
|
}
|
|
func (p *prefixRegisterer) NewHistogramVec(name, help string, labelNames []string, buckets []float64) HistogramVec {
|
|
return p.next.NewHistogramVec(p.prefix+name, help, labelNames, buckets)
|
|
}
|
|
func (p *prefixRegisterer) NewSummaryVec(name, help string, labelNames []string, objectives map[float64]float64) SummaryVec {
|
|
return p.next.NewSummaryVec(p.prefix+name, help, labelNames, objectives)
|
|
}
|
|
func (p *prefixRegisterer) Registry() Registry {
|
|
if r, ok := p.next.(Registry); ok {
|
|
return r
|
|
}
|
|
return nil
|
|
}
|