nudge/internal/server/server.go

61 lines
1.1 KiB
Go

package server
import (
"context"
"os"
"os/signal"
"syscall"
"github.com/fmartingr/nudge/internal/http"
"github.com/fmartingr/nudge/internal/pinger"
"github.com/sirupsen/logrus"
)
type Server struct {
http *http.HttpServer
pinger *pinger.Pinger
logger *logrus.Entry
}
func (s *Server) Start(ctx context.Context) {
go s.http.Start()
go s.pinger.Start(ctx)
}
func (s *Server) Stop() error {
if err := s.http.Stop(); err != nil {
s.logger.Errorf("error stopping http server: %s", err)
}
s.pinger.Stop()
return nil
}
func (s *Server) WaitStop() error {
signals := make(chan os.Signal, 1)
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
<-signals
return s.Stop()
}
func NewServer(conf *Config) *Server {
loglevel, err := logrus.ParseLevel(conf.LogLevel)
if err != nil {
logrus.Warnf("Error parsing loglevel '%s', using default.", loglevel)
} else {
logrus.SetLevel(loglevel)
}
logger := logrus.WithField("service", "nudge")
ping := pinger.NewPinger(logger, conf.IPs, conf.Interval)
return &Server{
logger: logger.WithField("from", "server"),
pinger: ping,
http: http.NewHttpServer(logger, conf.Port, ping),
}
}