51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package metrics
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/labstack/echo-contrib/echoprometheus"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/rs/zerolog/log"
|
|
"github.com/thomiceli/opengist/internal/config"
|
|
)
|
|
|
|
type Server struct {
|
|
echo *echo.Echo
|
|
}
|
|
|
|
func NewServer() *Server {
|
|
e := echo.New()
|
|
e.HideBanner = true
|
|
e.HidePort = true
|
|
|
|
s := &Server{echo: e}
|
|
|
|
initMetrics()
|
|
|
|
e.GET("/metrics", func(ctx echo.Context) error {
|
|
updateMetrics()
|
|
return echoprometheus.NewHandler()(ctx)
|
|
})
|
|
|
|
return s
|
|
}
|
|
|
|
func (s *Server) Start() {
|
|
addr := config.C.MetricsHost + ":" + config.C.MetricsPort
|
|
log.Info().Msg("Starting metrics server on http://" + addr)
|
|
if err := s.echo.Start(addr); err != nil && err != http.ErrServerClosed {
|
|
log.Error().Err(err).Msg("Failed to start metrics server")
|
|
}
|
|
}
|
|
|
|
func (s *Server) Stop() {
|
|
log.Info().Msg("Stopping metrics server...")
|
|
if err := s.echo.Close(); err != nil {
|
|
log.Error().Err(err).Msg("Failed to stop metrics server")
|
|
}
|
|
}
|
|
|
|
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
s.echo.ServeHTTP(w, r)
|
|
}
|