From 2b6407eacb6f1d682e56157421b408a8cc1cd3a8 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 14 Jul 2022 17:10:24 +0000 Subject: [PATCH] cmd/sh-api: add metric for GraphQL query duration --- cmd/sh-api/main.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/cmd/sh-api/main.go b/cmd/sh-api/main.go index 6d0fcd7..5fc00fd 100644 --- a/cmd/sh-api/main.go +++ b/cmd/sh-api/main.go @@ -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) +}