status.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package ccq
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "github.com/certusone/wormhole/node/pkg/common"
  8. promremotew "github.com/certusone/wormhole/node/pkg/telemetry/prom_remote_write"
  9. "github.com/gorilla/mux"
  10. "github.com/prometheus/client_golang/prometheus/promhttp"
  11. "go.uber.org/zap"
  12. )
  13. type statusServer struct {
  14. logger *zap.Logger
  15. env common.Environment
  16. }
  17. func NewStatusServer(addr string, logger *zap.Logger, env common.Environment) *http.Server {
  18. s := &statusServer{
  19. logger: logger,
  20. env: env,
  21. }
  22. r := mux.NewRouter()
  23. r.HandleFunc("/health", s.handleHealth).Methods("GET")
  24. r.Handle("/metrics", promhttp.Handler())
  25. return &http.Server{
  26. Addr: addr,
  27. Handler: r,
  28. ReadHeaderTimeout: 5 * time.Second,
  29. }
  30. }
  31. func (s *statusServer) handleHealth(w http.ResponseWriter, r *http.Request) {
  32. s.logger.Debug("health check")
  33. w.WriteHeader(http.StatusOK)
  34. fmt.Fprintf(w, "ok")
  35. }
  36. func RunPrometheusScraper(ctx context.Context, logger *zap.Logger, info promremotew.PromTelemetryInfo) error {
  37. promLogger := logger.With(zap.String("component", "prometheus_scraper"))
  38. errC := make(chan error)
  39. common.StartRunnable(ctx, errC, false, "prometheus_scraper", func(ctx context.Context) error {
  40. t := time.NewTicker(15 * time.Second)
  41. for {
  42. select {
  43. case <-ctx.Done():
  44. return nil
  45. case <-t.C:
  46. err := promremotew.ScrapeAndSendLocalMetrics(ctx, info, promLogger)
  47. if err != nil {
  48. promLogger.Error("ScrapeAndSendLocalMetrics error", zap.Error(err))
  49. return err
  50. }
  51. }
  52. }
  53. })
  54. return nil
  55. }