mirror of
https://github.com/hanzoai/dns.git
synced 2026-10-30 18:40:55 +00:00
The mechanical migration (9b8e9a14b) left the tree uncompilable: it used
luxfi/metric as a prometheus drop-in, but several symbols were missing and a
few types were misused. Finish it against luxfi/metric v1.8.2 (which adds the
prometheus-compat surface):
- pin luxfi/metric v1.8.2 (native-histogram HistogramOpts fields, package
MustRegister/Unregister, AlreadyRegisteredError, With/AutoFactory,
GoCollectorOption/MetricsAll, Vec.Delete, no-op collector registration)
- use metric.Registry / metric.{Histogram,Counter}Vec as INTERFACES, not
concrete pointers (plugin/metrics, plugin/kubernetes)
- build with -tags metrics so luxfi/metric's collecting registry is active
(the default is a //go:build metrics no-op stub); wire it into Makefile
GOTAGS, the GHCR image build, and the CI test matrix
- test harness: select a metric-name validation scheme for the exposition
parser (client_golang used to set the global default; CoreDNS no longer
imports it)
go build ./... + go test -tags metrics ./plugin/metrics/... /kubernetes /reload
are green.
29 lines
497 B
Go
29 lines
497 B
Go
package metrics
|
|
|
|
import (
|
|
"sync"
|
|
|
|
metric "github.com/luxfi/metric"
|
|
)
|
|
|
|
type reg struct {
|
|
sync.RWMutex
|
|
r map[string]metric.Registry
|
|
}
|
|
|
|
func newReg() *reg { return ®{r: make(map[string]metric.Registry)} }
|
|
|
|
// update sets the registry if not already there and returns the input. Or it returns
|
|
// a previous set value.
|
|
func (r *reg) getOrSet(addr string, pr metric.Registry) metric.Registry {
|
|
r.Lock()
|
|
defer r.Unlock()
|
|
|
|
if v, ok := r.r[addr]; ok {
|
|
return v
|
|
}
|
|
|
|
r.r[addr] = pr
|
|
return pr
|
|
}
|