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" "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() { func main() {
debug := false debug := false
opts, _, err := getopt.Getopts(os.Args, "d") opts, _, err := getopt.Getopts(os.Args, "d")
@ -54,6 +63,8 @@ func main() {
} }
prometheus.DefaultRegisterer.Register(promcollectors.NewDBStatsCollector(db, "main")) prometheus.DefaultRegisterer.Register(promcollectors.NewDBStatsCollector(db, "main"))
prometheus.MustRegister(durationMetric)
schema := generated.NewExecutableSchema(generated.Config{ schema := generated.NewExecutableSchema(generated.Config{
Resolvers: &graph.Resolver{}, Resolvers: &graph.Resolver{},
}) })
@ -65,7 +76,7 @@ func main() {
router.Use(middleware.Logger) router.Use(middleware.Logger)
router.Use(middleware.Timeout(10 * time.Second)) router.Use(middleware.Timeout(10 * time.Second))
router.Handle("/query", srv) router.With(promQueryMiddleware).Handle("/query", srv)
if debug { if debug {
router.Handle("/", playground.Handler("GraphQL playground", "/query")) router.Handle("/", playground.Handler("GraphQL playground", "/query"))
} }
@ -79,3 +90,7 @@ func main() {
log.Printf("Running server on %s", port) log.Printf("Running server on %s", port)
log.Fatal(http.ListenAndServe(port, router)) log.Fatal(http.ListenAndServe(port, router))
} }
func promQueryMiddleware(next http.Handler) http.Handler {
return promhttp.InstrumentHandlerDuration(durationMetric, next)
}