diff --git a/middleware/metrics/metrics.go b/middleware/metrics/metrics.go index 5f93ec2f5..ee0e0ed16 100644 --- a/middleware/metrics/metrics.go +++ b/middleware/metrics/metrics.go @@ -61,6 +61,7 @@ func (m *Metrics) OnStartup() error { } m.ln = ln + ListenAddr = m.ln.Addr().String() m.mux = http.NewServeMux() @@ -97,3 +98,7 @@ func keys(m map[string]bool) []string { } return sx } + +// ListenAddr is assigned the address of the prometheus listener. Its use is mainly in tests where +// we listen on "localhost:0" and need to retrieve the actual address. +var ListenAddr string diff --git a/middleware/metrics/metrics_test.go b/middleware/metrics/metrics_test.go index 4272350f4..f93021fa5 100644 --- a/middleware/metrics/metrics_test.go +++ b/middleware/metrics/metrics_test.go @@ -13,7 +13,7 @@ import ( ) func TestMetrics(t *testing.T) { - met := &Metrics{Addr: Addr, zoneMap: make(map[string]bool)} + met := &Metrics{Addr: "localhost:0", zoneMap: make(map[string]bool)} if err := met.OnStartup(); err != nil { t.Fatalf("Failed to start metrics handler: %s", err) } @@ -71,7 +71,7 @@ func TestMetrics(t *testing.T) { t.Fatalf("Test %d: Expected no error, but got %s", i, err) } - result := mtest.Scrape(t, "http://"+Addr+"/metrics") + result := mtest.Scrape(t, "http://"+ListenAddr+"/metrics") if tc.expectedValue != "" { got, _ := mtest.MetricValue(tc.metric, result) diff --git a/middleware/metrics/setup.go b/middleware/metrics/setup.go index 6c52aead3..de82a1f1b 100644 --- a/middleware/metrics/setup.go +++ b/middleware/metrics/setup.go @@ -38,7 +38,7 @@ func setup(c *caddy.Controller) error { func prometheusParse(c *caddy.Controller) (*Metrics, error) { var ( - met = &Metrics{Addr: Addr, zoneMap: make(map[string]bool)} + met = &Metrics{Addr: addr, zoneMap: make(map[string]bool)} err error ) @@ -88,4 +88,4 @@ func prometheusParse(c *caddy.Controller) (*Metrics, error) { var metricsOnce sync.Once // Addr is the address the where the metrics are exported by default. -const Addr = "localhost:9153" +const addr = "localhost:9153" diff --git a/test/metrics_test.go b/test/metrics_test.go index d122f2545..bdf3fa382 100644 --- a/test/metrics_test.go +++ b/test/metrics_test.go @@ -20,12 +20,12 @@ import ( func TestMetricsServer(t *testing.T) { corefile := `example.org:0 { chaos CoreDNS-001 miek@miek.nl - prometheus + prometheus localhost:0 } example.com:0 { proxy . 8.8.4.4:53 - prometheus + prometheus localhost:0 } ` srv, err := CoreDNSServer(corefile) @@ -40,7 +40,7 @@ func TestMetricsRefused(t *testing.T) { corefile := `example.org:0 { proxy . 8.8.8.8:53 - prometheus + prometheus localhost:0 } ` srv, err := CoreDNSServer(corefile) @@ -58,7 +58,7 @@ func TestMetricsRefused(t *testing.T) { t.Fatalf("Could not send message: %s", err) } - data := mtest.Scrape(t, "http://"+metrics.Addr+"/metrics") + data := mtest.Scrape(t, "http://"+metrics.ListenAddr+"/metrics") got, labels := mtest.MetricValue(metricName, data) if got != "1" { @@ -77,7 +77,7 @@ func TestMetricsCache(t *testing.T) { corefile := `example.net:0 { proxy . 8.8.8.8:53 - prometheus + prometheus localhost:0 cache } ` @@ -96,7 +96,7 @@ func TestMetricsCache(t *testing.T) { t.Fatalf("Could not send message: %s", err) } - data := mtest.Scrape(t, "http://"+metrics.Addr+"/metrics") + data := mtest.Scrape(t, "http://"+metrics.ListenAddr+"/metrics") // Get the value for the metrics where the one of the labels values matches "success" got, _ := mtest.MetricValueLabel(metricName, cache.Success, data) @@ -111,12 +111,11 @@ func TestMetricsAuto(t *testing.T) { t.Fatal(err) } - // TODO(miek): Random port as string and use that later? corefile := `org:0 { auto { directory ` + tmpdir + ` db\.(.*) {1} 1 } - prometheus + prometheus localhost:0 } ` @@ -149,7 +148,7 @@ func TestMetricsAuto(t *testing.T) { metricName := "coredns_dns_request_count_total" //{zone, proto, family} - data := mtest.Scrape(t, "http://"+metrics.Addr+"/metrics") + data := mtest.Scrape(t, "http://"+metrics.ListenAddr+"/metrics") // Get the value for the metrics where the one of the labels values matches "example.org." got, _ := mtest.MetricValueLabel(metricName, "example.org.", data) @@ -164,7 +163,7 @@ func TestMetricsAuto(t *testing.T) { t.Fatalf("Could not send message: %s", err) } - data = mtest.Scrape(t, "http://"+metrics.Addr+"/metrics") + data = mtest.Scrape(t, "http://"+metrics.ListenAddr+"/metrics") got, _ = mtest.MetricValueLabel(metricName, "example.org.", data) if got != "1" {