cmd/sh-api: add metric for GraphQL query duration
This commit is contained in:
parent
541d829069
commit
2b6407eacb
1 changed files with 16 additions and 1 deletions
|
@ -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)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue