coredns/plugin/proxy/setup.go
Miek Gieben 90dd4bbd45
metrics: correctly register all metrics (#1335)
After initial startup, see if prometheus is loaded and if so, register
our metrics with it.
Stop doing the init() func and just use the sync.Once so we don't double
registrer our metrics.
2017-12-27 15:48:14 +00:00

59 lines
1.2 KiB
Go

package proxy
import (
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/metrics"
"github.com/mholt/caddy"
)
func init() {
caddy.RegisterPlugin("proxy", caddy.Plugin{
ServerType: "dns",
Action: setup,
})
}
func setup(c *caddy.Controller) error {
upstreams, err := NewStaticUpstreams(&c.Dispenser)
if err != nil {
return plugin.Error("proxy", err)
}
t := dnsserver.GetConfig(c).Handler("trace")
P := &Proxy{Trace: t}
dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler {
P.Next = next
P.Upstreams = &upstreams
return P
})
c.OnStartup(func() error {
once.Do(func() {
m := dnsserver.GetConfig(c).Handler("prometheus")
if m == nil {
return
}
if x, ok := m.(*metrics.Metrics); ok {
x.MustRegister(RequestCount)
x.MustRegister(RequestDuration)
}
})
return nil
})
for i := range upstreams {
u := upstreams[i]
c.OnStartup(func() error {
return u.Exchanger().OnStartup(P)
})
c.OnShutdown(func() error {
return u.Exchanger().OnShutdown(P)
})
// Register shutdown handlers.
c.OnShutdown(u.Stop)
}
return nil
}