summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorValery Piashchynski <[email protected]>2020-03-26 19:27:16 +0300
committerValery Piashchynski <[email protected]>2020-03-26 19:27:16 +0300
commitcbde9a2001657ae6a8e73e1a01dad6e660c2fc0a (patch)
treebcaff1553c179f0e8db5159c5b692cf5de908e11 /service
parent7b2e5d9ffcffd539cbff431855b775f1f8901f73 (diff)
Update servers timeouts and max header sizes [health, metrics]
Diffstat (limited to 'service')
-rw-r--r--service/health/service.go25
-rw-r--r--service/metrics/service.go28
2 files changed, 38 insertions, 15 deletions
diff --git a/service/health/service.go b/service/health/service.go
index c82f43b5..ce127340 100644
--- a/service/health/service.go
+++ b/service/health/service.go
@@ -6,12 +6,17 @@ import (
"github.com/sirupsen/logrus"
"net/http"
"sync"
+ "time"
rrhttp "github.com/spiral/roadrunner/service/http"
)
-// ID declares the public service name
-const ID = "health"
+const (
+ // ID declares public service name.
+ ID = "health"
+ // maxHeaderSize declares max header size for prometheus server
+ maxHeaderSize = 1024 * 1024 * 100 // 104MB
+)
// Service to serve an endpoint for checking the health of the worker pool
type Service struct {
@@ -39,15 +44,23 @@ func (s *Service) Init(cfg *Config, r *rrhttp.Service, log *logrus.Logger) (bool
func (s *Service) Serve() error {
// Configure and start the http server
s.mu.Lock()
- s.http = &http.Server{Addr: s.cfg.Address, Handler: s}
+ s.http = &http.Server{
+ Addr: s.cfg.Address,
+ Handler: s,
+ IdleTimeout: time.Hour * 24,
+ ReadTimeout: time.Minute * 60,
+ MaxHeaderBytes: maxHeaderSize,
+ ReadHeaderTimeout: time.Minute * 60,
+ WriteTimeout: time.Minute * 60,
+ }
s.mu.Unlock()
err := s.http.ListenAndServe()
- if err == nil || err == http.ErrServerClosed {
- return nil
+ if err != nil && err != http.ErrServerClosed {
+ return err
}
- return err
+ return nil
}
// Stop the health endpoint
diff --git a/service/metrics/service.go b/service/metrics/service.go
index 6fa4da50..0b667f2d 100644
--- a/service/metrics/service.go
+++ b/service/metrics/service.go
@@ -11,10 +11,15 @@ import (
"github.com/spiral/roadrunner/service/rpc"
"net/http"
"sync"
+ "time"
)
-// ID declares public service name.
-const ID = "metrics"
+const (
+ // ID declares public service name.
+ ID = "metrics"
+ // maxHeaderSize declares max header size for prometheus server
+ maxHeaderSize = 1024 * 1024 * 100 // 104MB
+)
// Service to manage application metrics using Prometheus.
type Service struct {
@@ -76,18 +81,23 @@ func (s *Service) Serve() error {
}
s.mu.Lock()
- s.http = &http.Server{Addr: s.cfg.Address, Handler: promhttp.HandlerFor(
- s.registry,
- promhttp.HandlerOpts{},
- )}
+ s.http = &http.Server{
+ Addr: s.cfg.Address,
+ Handler: promhttp.HandlerFor(s.registry, promhttp.HandlerOpts{}, ),
+ IdleTimeout: time.Hour * 24,
+ ReadTimeout: time.Minute * 60,
+ MaxHeaderBytes: maxHeaderSize,
+ ReadHeaderTimeout: time.Minute * 60,
+ WriteTimeout: time.Minute * 60,
+ }
s.mu.Unlock()
err = s.http.ListenAndServe()
- if err == nil || err == http.ErrServerClosed {
- return nil
+ if err != nil && err != http.ErrServerClosed {
+ return err
}
- return err
+ return nil
}
// Stop prometheus metrics service.