By defining and using an proxy.Exchanger interface we make the proxy more generic and we can then fold back httproxy into proxy. This overrides #463 and #473 and should make futures extensions rather trivial * Add docs that talk about `protocol` and how to set it. * middleware/proxy: rename New to NewLookup It's used as a Lookup mechanism not as a completely new proxy, reflect that in the name. * Set maxfails to 3 by default when looking up names. Most of the changes have been copied from https://github.com/johnbelamaric/coredns/pull/1/files
30 lines
795 B
Go
30 lines
795 B
Go
package proxy
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/miekg/coredns/middleware"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
// Metrics the proxy middleware exports.
|
|
var (
|
|
RequestDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Namespace: middleware.Namespace,
|
|
Subsystem: "proxy",
|
|
Name: "request_duration_milliseconds",
|
|
Buckets: append(prometheus.DefBuckets, []float64{50, 100, 200, 500, 1000, 2000, 3000, 4000, 5000, 10000}...),
|
|
Help: "Histogram of the time (in milliseconds) each request took.",
|
|
}, []string{"protocol", "zone"})
|
|
)
|
|
|
|
// OnStartup sets up the metrics on startup. This is done for all proxy protocols.
|
|
func OnStartup() error {
|
|
metricsOnce.Do(func() {
|
|
prometheus.MustRegister(RequestDuration)
|
|
})
|
|
return nil
|
|
}
|
|
|
|
var metricsOnce sync.Once
|