cmd/sh-api: add metric for GraphQL query duration

This commit is contained in:
Simon Ser 2022-07-14 17:10:24 +00:00 committed by Drew DeVault
parent 541d829069
commit 2b6407eacb

View file

@ -24,6 +24,15 @@ import (
"git.sr.ht/~sircmpwn/searchhut/graph/generated"
)
var durationMetric = prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "query_duration_seconds",
Help: "GraphQL query latency in seconds.",
Buckets: prometheus.DefBuckets,
},
nil,
)
func main() {
debug := false
opts, _, err := getopt.Getopts(os.Args, "d")
@ -54,6 +63,8 @@ func main() {
}
prometheus.DefaultRegisterer.Register(promcollectors.NewDBStatsCollector(db, "main"))
prometheus.MustRegister(durationMetric)
schema := generated.NewExecutableSchema(generated.Config{
Resolvers: &graph.Resolver{},
})
@ -65,7 +76,7 @@ func main() {
router.Use(middleware.Logger)
router.Use(middleware.Timeout(10 * time.Second))
router.Handle("/query", srv)
router.With(promQueryMiddleware).Handle("/query", srv)
if debug {
router.Handle("/", playground.Handler("GraphQL playground", "/query"))
}
@ -79,3 +90,7 @@ func main() {
log.Printf("Running server on %s", port)
log.Fatal(http.ListenAndServe(port, router))
}
func promQueryMiddleware(next http.Handler) http.Handler {
return promhttp.InstrumentHandlerDuration(durationMetric, next)
}