diff options
Diffstat (limited to 'cmd/_____/http/service.go')
-rw-r--r-- | cmd/_____/http/service.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/cmd/_____/http/service.go b/cmd/_____/http/service.go new file mode 100644 index 00000000..008aeab8 --- /dev/null +++ b/cmd/_____/http/service.go @@ -0,0 +1,80 @@ +package http + +import ( + "context" + "github.com/sirupsen/logrus" + "github.com/spiral/roadrunner/service" + "net/http" + "github.com/spiral/roadrunner" +) + +const ServiceName = "http" + +type Service struct { + cfg *serviceConfig + http *http.Server + srv *Server +} + +func (s *Service) Name() string { + return ServiceName +} + +func (s *Service) Configure(cfg service.Config) (bool, error) { + config := &serviceConfig{} + if err := cfg.Unmarshal(config); err != nil { + return false, err + } + + if !config.Enabled { + return false, nil + } + + if err := config.Valid(); err != nil { + return false, err + } + + s.cfg = config + return true, nil +} + +func (s *Service) RPC() interface{} { + return &rpcServer{s} +} + +func (s *Service) Serve() error { + logrus.Debugf("http: started") + defer logrus.Debugf("http: stopped") + + rr, term, err := s.cfg.Pool.NewServer() + if err != nil { + return err + } + defer term() + + //todo: remove + rr.Observe(func(event int, ctx interface{}) { + switch event { + case roadrunner.EventPoolError: + logrus.Error(ctx) + case roadrunner.EventWorkerError: + logrus.Errorf("%s: %s", ctx.(roadrunner.WorkerError).Worker, ctx.(roadrunner.WorkerError).Error()) + } + }) + + s.srv = NewServer(s.cfg.httpConfig(), rr) + s.http = &http.Server{ + Addr: s.cfg.httpAddr(), + Handler: s.srv, + } + + if err := s.http.ListenAndServe(); err != nil { + return err + } + + return nil +} + +func (s *Service) Stop() error { + return s.http.Shutdown(context.Background()) +} |