Commit 7a79b819 authored by John Belamaric's avatar John Belamaric Committed by GitHub

Merge pull request #613 from coredns/err-multiple-mon-handler

middleware/metrics: allow multiple listeners
parents 2196dde9 c2629460
......@@ -49,5 +49,5 @@ prometheus localhost:9253
# Bugs
When reloading, we keep the handler running, meaning that any changes to the handler aren't picked
up. You'll need to restart CoreDNS for that to happen.
When reloading, we keep the handler running, meaning that any changes to the handler's address
aren't picked up. You'll need to restart CoreDNS for that to happen.
......@@ -2,7 +2,6 @@ package metrics
import (
"net"
"sync"
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/middleware"
......@@ -15,6 +14,8 @@ func init() {
ServerType: "dns",
Action: setup,
})
uniqAddr = addrs{a: make(map[string]int)}
}
func setup(c *caddy.Controller) error {
......@@ -28,11 +29,14 @@ func setup(c *caddy.Controller) error {
return m
})
// During restarts we will keep this handler running.
metricsOnce.Do(func() {
for a, v := range uniqAddr.a {
if v == todo {
// During restarts we will keep this handler running, BUG.
c.OncePerServerBlock(m.OnStartup)
}
uniqAddr.a[a] = done
}
c.OnFinalShutdown(m.OnShutdown)
})
return nil
}
......@@ -43,6 +47,10 @@ func prometheusParse(c *caddy.Controller) (*Metrics, error) {
err error
)
defer func() {
uniqAddr.SetAddress(met.Addr)
}()
for c.Next() {
if len(met.ZoneNames()) > 0 {
return met, c.Err("can only have one metrics module per server")
......@@ -86,7 +94,25 @@ func prometheusParse(c *caddy.Controller) (*Metrics, error) {
return met, err
}
var metricsOnce sync.Once
var uniqAddr addrs
// Keep track on which addrs we listen, so we only start one listener.
type addrs struct {
a map[string]int
}
func (a *addrs) SetAddress(addr string) {
// If already there and set to done, we've already started this listener.
if a.a[addr] == done {
return
}
a.a[addr] = todo
}
// Addr is the address the where the metrics are exported by default.
const addr = "localhost:9153"
const (
todo = 1
done = 2
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment