- Decouple exporter from the DefaultRegistry.
This commit is contained in:
parent
7675c256ad
commit
2c4784f8ee
|
@ -92,33 +92,32 @@ func (r *Registry) Register(name string, metric metrics.Metric) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleJson(w http.ResponseWriter, r *http.Request) {
|
// Create a http.HandlerFunc that is tied to r Registry such that requests
|
||||||
|
// against it generate a representation of the housed metrics.
|
||||||
|
func (registry *Registry) YieldExporter() *http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
var instrumentable metrics.InstrumentableCall = func() {
|
var instrumentable metrics.InstrumentableCall = func() {
|
||||||
|
|
||||||
requestCount.Increment()
|
requestCount.Increment()
|
||||||
|
url := r.URL
|
||||||
|
|
||||||
|
if strings.HasSuffix(url.Path, ".json") {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
composite := make(map[string]interface{}, len(registry.NameToMetric))
|
||||||
composite := make(map[string]interface{}, len(DefaultRegistry.NameToMetric))
|
for name, metric := range registry.NameToMetric {
|
||||||
for name, metric := range DefaultRegistry.NameToMetric {
|
|
||||||
composite[name] = metric.Marshallable()
|
composite[name] = metric.Marshallable()
|
||||||
}
|
}
|
||||||
|
|
||||||
data, _ := json.Marshal(composite)
|
data, _ := json.Marshal(composite)
|
||||||
|
|
||||||
w.Write(data)
|
w.Write(data)
|
||||||
|
} else {
|
||||||
|
w.WriteHeader(http.StatusNotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
metrics.InstrumentCall(instrumentable, requestLatencyAccumulator)
|
metrics.InstrumentCall(instrumentable, requestLatencyAccumulator)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(mtp): Make instance-specific.
|
|
||||||
var Exporter http.HandlerFunc = func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
url := r.URL
|
|
||||||
|
|
||||||
if strings.HasSuffix(url.Path, ".json") {
|
|
||||||
handleJson(w, r)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
4
main.go
4
main.go
|
@ -6,6 +6,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
http.Handle("/metrics.json", export.Exporter)
|
exporter := export.DefaultRegistry.YieldExporter()
|
||||||
|
|
||||||
|
http.Handle("/metrics.json", exporter)
|
||||||
http.ListenAndServe(":8080", nil)
|
http.ListenAndServe(":8080", nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
// event values or samples. The underlying histogram implementation is designed
|
// event values or samples. The underlying histogram implementation is designed
|
||||||
// to be performant in that it accepts tolerable inaccuracies.
|
// to be performant in that it accepts tolerable inaccuracies.
|
||||||
|
|
||||||
// TOOD(mtp): Implement visualization and exporting.
|
|
||||||
|
|
||||||
package metrics
|
package metrics
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
Loading…
Reference in New Issue