infra/op-conductor-mon/pkg/service/service.go

81 lines
1.9 KiB
Go
Raw Normal View History

package service
import (
"context"
"errors"
"net"
"net/http"
"github.com/ethereum-optimism/optimism/op-conductor-mon/pkg/config"
"github.com/ethereum-optimism/optimism/op-conductor-mon/pkg/metrics"
"github.com/ethereum-optimism/optimism/op-conductor-mon/pkg/monitor"
"github.com/ethereum/go-ethereum/log"
)
type Service struct {
Config *config.Config
Healthz *HealthzServer
Metrics *MetricsServer
}
func New(cfg *config.Config) *Service {
s := &Service{
Config: cfg,
Healthz: &HealthzServer{},
Metrics: &MetricsServer{},
}
return s
}
func (s *Service) Start(ctx context.Context) {
log.Info("service starting")
if s.Config.Healthz.Enabled {
addr := net.JoinHostPort(s.Config.Healthz.Host, s.Config.Healthz.Port)
log.Info("starting healthz server",
"addr", addr)
go func() {
if err := s.Healthz.Start(ctx, addr); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Error("error starting healthz server",
"err", err)
}
}()
}
metrics.Debug = s.Config.Metrics.Debug
if s.Config.Metrics.Enabled {
addr := net.JoinHostPort(s.Config.Metrics.Host, s.Config.Metrics.Port)
log.Info("starting metrics server",
"addr", addr)
go func() {
if err := s.Metrics.Start(ctx, addr); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Error("error starting metrics server",
"err", err)
}
}()
}
n := monitor.New(s.Config, s.Config.Nodes)
n.Start(ctx)
log.Info("service started")
}
func (s *Service) Shutdown() {
log.Info("service shutting down")
if s.Config.Healthz.Enabled {
err := s.Healthz.Shutdown()
if err != nil {
log.Warn("failed to shutdown healthz server: %v", err)
}
log.Info("healthz stopped")
}
if s.Config.Metrics.Enabled {
err := s.Metrics.Shutdown()
if err != nil {
log.Warn("failed to shutdown metrics server: %v", err)
}
log.Info("metrics stopped")
}
log.Info("service stopped")
}