mirror of
https://github.com/coredns/coredns.git
synced 2025-11-02 02:03:13 -05:00
correct EDNS responses (#96)
Tests updated as well and all the middleware. And Prometheus renamed to metrics (directive is still prometheus).
This commit is contained in:
74
core/setup/metrics.go
Normal file
74
core/setup/metrics.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package setup
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
"github.com/miekg/coredns/middleware/metrics"
|
||||
)
|
||||
|
||||
const (
|
||||
path = "/metrics"
|
||||
addr = "localhost:9135" // 9153 is occupied by bind_exporter
|
||||
)
|
||||
|
||||
var once sync.Once
|
||||
|
||||
func Prometheus(c *Controller) (middleware.Middleware, error) {
|
||||
met, err := parsePrometheus(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
once.Do(func() {
|
||||
c.Startup = append(c.Startup, met.Start)
|
||||
})
|
||||
|
||||
return func(next middleware.Handler) middleware.Handler {
|
||||
met.Next = next
|
||||
return met
|
||||
}, nil
|
||||
}
|
||||
|
||||
func parsePrometheus(c *Controller) (metrics.Metrics, error) {
|
||||
var (
|
||||
met metrics.Metrics
|
||||
err error
|
||||
)
|
||||
|
||||
for c.Next() {
|
||||
if len(met.ZoneNames) > 0 {
|
||||
return metrics.Metrics{}, c.Err("metrics: can only have one metrics module per server")
|
||||
}
|
||||
met = metrics.Metrics{ZoneNames: c.ServerBlockHosts}
|
||||
for i, _ := range met.ZoneNames {
|
||||
met.ZoneNames[i] = middleware.Host(met.ZoneNames[i]).Normalize()
|
||||
}
|
||||
args := c.RemainingArgs()
|
||||
|
||||
switch len(args) {
|
||||
case 0:
|
||||
case 1:
|
||||
met.Addr = args[0]
|
||||
default:
|
||||
return metrics.Metrics{}, c.ArgErr()
|
||||
}
|
||||
for c.NextBlock() {
|
||||
switch c.Val() {
|
||||
case "address":
|
||||
args = c.RemainingArgs()
|
||||
if len(args) != 1 {
|
||||
return metrics.Metrics{}, c.ArgErr()
|
||||
}
|
||||
met.Addr = args[0]
|
||||
default:
|
||||
return metrics.Metrics{}, c.Errf("metrics: unknown item: %s", c.Val())
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if met.Addr == "" {
|
||||
met.Addr = addr
|
||||
}
|
||||
return met, err
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
package setup
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/miekg/coredns/middleware"
|
||||
prom "github.com/miekg/coredns/middleware/prometheus"
|
||||
)
|
||||
|
||||
const (
|
||||
path = "/metrics"
|
||||
addr = "localhost:9135" // 9153 is occupied by bind_exporter
|
||||
)
|
||||
|
||||
var once sync.Once
|
||||
|
||||
func Prometheus(c *Controller) (middleware.Middleware, error) {
|
||||
metrics, err := parsePrometheus(c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
once.Do(func() {
|
||||
c.Startup = append(c.Startup, metrics.Start)
|
||||
})
|
||||
|
||||
return func(next middleware.Handler) middleware.Handler {
|
||||
metrics.Next = next
|
||||
return metrics
|
||||
}, nil
|
||||
}
|
||||
|
||||
func parsePrometheus(c *Controller) (prom.Metrics, error) {
|
||||
var (
|
||||
metrics prom.Metrics
|
||||
err error
|
||||
)
|
||||
|
||||
for c.Next() {
|
||||
if len(metrics.ZoneNames) > 0 {
|
||||
return prom.Metrics{}, c.Err("prometheus: can only have one metrics module per server")
|
||||
}
|
||||
metrics = prom.Metrics{ZoneNames: c.ServerBlockHosts}
|
||||
for i, _ := range metrics.ZoneNames {
|
||||
metrics.ZoneNames[i] = middleware.Host(metrics.ZoneNames[i]).Normalize()
|
||||
}
|
||||
args := c.RemainingArgs()
|
||||
|
||||
switch len(args) {
|
||||
case 0:
|
||||
case 1:
|
||||
metrics.Addr = args[0]
|
||||
default:
|
||||
return prom.Metrics{}, c.ArgErr()
|
||||
}
|
||||
for c.NextBlock() {
|
||||
switch c.Val() {
|
||||
case "address":
|
||||
args = c.RemainingArgs()
|
||||
if len(args) != 1 {
|
||||
return prom.Metrics{}, c.ArgErr()
|
||||
}
|
||||
metrics.Addr = args[0]
|
||||
default:
|
||||
return prom.Metrics{}, c.Errf("prometheus: unknown item: %s", c.Val())
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if metrics.Addr == "" {
|
||||
metrics.Addr = addr
|
||||
}
|
||||
return metrics, err
|
||||
}
|
||||
Reference in New Issue
Block a user