41 lines
884 B
Go
41 lines
884 B
Go
package metrics
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"git.sendico.io/tech/sxchnge/shared/logging"
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/metrics"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type metricsRouter struct {
|
|
logger mlogger.Logger
|
|
handler http.Handler
|
|
}
|
|
|
|
func (mr *metricsRouter) Finish() {
|
|
mr.logger.Debug("Stopped")
|
|
}
|
|
|
|
func (mr *metricsRouter) handle(w http.ResponseWriter, r *http.Request) {
|
|
mr.logger.Debug("Serving metrics request...")
|
|
mr.handler.ServeHTTP(w, r)
|
|
}
|
|
|
|
func newMetricsRouter(logger mlogger.Logger, router chi.Router, endpoint string) *metricsRouter {
|
|
mr := metricsRouter{
|
|
logger: logger.Named("metrics"),
|
|
handler: metrics.Handler(),
|
|
}
|
|
|
|
logger.Debug("Installing Prometheus middleware...")
|
|
router.Group(func(r chi.Router) {
|
|
ep := endpoint + "/metrics"
|
|
r.Get(ep, mr.handle)
|
|
logger.Info("Prometheus handler installed", zap.String("endpoint", ep))
|
|
})
|
|
|
|
return &mr
|
|
}
|