Skip to content

Commit 931fd96

Browse files
author
Wimo
committed
Ability to scrape dynamic targets
1 parent 57719ba commit 931fd96

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

cmd/postgres_exporter/main.go

+33
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package main
1515

1616
import (
17+
"context"
1718
"net/http"
1819
"os"
1920

@@ -115,6 +116,12 @@ func main() {
115116
prometheus.MustRegister(exporter)
116117

117118
http.Handle(*metricPath, promhttp.Handler())
119+
120+
registries := make(map[string]*prometheus.Registry)
121+
http.HandleFunc("/probe", func(w http.ResponseWriter, req *http.Request) {
122+
probeHandler(w, req, logger, registries, opts...)
123+
})
124+
118125
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
119126
w.Header().Set("Content-Type", "text/html; charset=UTF-8") // nolint: errcheck
120127
w.Write(landingPage) // nolint: errcheck
@@ -127,3 +134,29 @@ func main() {
127134
os.Exit(1)
128135
}
129136
}
137+
138+
func probeHandler(w http.ResponseWriter, r *http.Request, logger log.Logger, registries map[string]*prometheus.Registry, opts ...ExporterOpt) {
139+
140+
ctx, cancel := context.WithCancel(r.Context())
141+
defer cancel()
142+
r = r.WithContext(ctx)
143+
144+
target := r.URL.Query().Get("target")
145+
if target == "" {
146+
http.Error(w, "Target parameter is missing", http.StatusBadRequest)
147+
return
148+
}
149+
150+
registry, target_registered := registries[target]
151+
if !target_registered {
152+
registry = prometheus.NewPedanticRegistry()
153+
exporter := NewExporter([]string{target}, opts...)
154+
registry.MustRegister(version.NewCollector(exporterName))
155+
registry.MustRegister(exporter)
156+
registries[target] = registry
157+
}
158+
159+
h := promhttp.HandlerFor(registry, promhttp.HandlerOpts{})
160+
h.ServeHTTP(w, r)
161+
162+
}

0 commit comments

Comments
 (0)