Как передать httprouter.Handle в Prometheus http.HandleFunc - PullRequest
0 голосов
/ 18 апреля 2019

Невозможно передать промежуточное ПО Prometheus в httprouter определения конечной точки.

Я пытаюсь добавить промежуточное программное обеспечение Prometheus в нашу конечную реализацию. Но наша конечная точка использует сторонний пакет mux с именем httprouter. Затем, когда я попытался добавить это промежуточное программное обеспечение в существующую кодовую базу, я не смог найти хороший способ объединить их вместе.


router := httprouter.New()
router.GET("/hello", r.Hello)

func (r configuration) Hello(w http.ResponseWriter, req *http.Request, ps httprouter.Params)

func InstrumentHandlerFunc(name string, handler http.HandlerFunc) http.HandlerFunc {
    counter := prometheus.NewCounterVec(
        do something...
    )

    duration := prometheus.NewHistogramVec(
        do something...
    )
    return promhttp.InstrumentHandlerDuration(duration,
        promhttp.InstrumentHandlerCounter(counter, handler))
}

Моя проблема в том, что я не могу передать свой дескриптор прометея этой функции конечной точки httprouter в качестве параметра

Вот что я хочу сделать:


func InstrumentHandlerFunc(name string, handler httprouter.Handle) httprouter.Handel {

}

router.Get("/hello", InstrumentHandlerFunc("/hello", r.Hello))

1 Ответ

0 голосов
/ 10 июля 2019

Если вы хотите использовать оба из них в одном и том же проекте, вы можете достичь одного и того же результата простым способом прослушивания разных ports

router := httprouter.New()
// register prometheus exporter 
go func() {
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}()
http.ListenAndServe(":80", router)
...