package net
import (
"flag"
"time"
weaveworks "github.com/weaveworks/common/server"
)
const (
DefaultHTTPPort = 8080
DefaultGRPCPort = 8081
)
type ServerConfig struct {
HTTP *HTTPConfig `river:"http,block,optional"`
GRPC *GRPCConfig `river:"grpc,block,optional"`
GracefulShutdownTimeout time.Duration `river:"graceful_shutdown_timeout,attr,optional"`
}
type HTTPConfig struct {
ListenAddress string `river:"listen_address,attr,optional"`
ListenPort int `river:"listen_port,attr,optional"`
ConnLimit int `river:"conn_limit,attr,optional"`
ServerReadTimeout time.Duration `river:"server_read_timeout,attr,optional"`
ServerWriteTimeout time.Duration `river:"server_write_timeout,attr,optional"`
ServerIdleTimeout time.Duration `river:"server_idle_timeout,attr,optional"`
}
func (h *HTTPConfig) Into(c *weaveworks.Config) {
c.HTTPListenAddress = h.ListenAddress
c.HTTPListenPort = h.ListenPort
c.HTTPConnLimit = h.ConnLimit
c.HTTPServerReadTimeout = h.ServerReadTimeout
c.HTTPServerWriteTimeout = h.ServerWriteTimeout
c.HTTPServerIdleTimeout = h.ServerIdleTimeout
}
type GRPCConfig struct {
ListenAddress string `river:"listen_address,attr,optional"`
ListenPort int `river:"listen_port,attr,optional"`
ConnLimit int `river:"conn_limit,attr,optional"`
MaxConnectionAge time.Duration `river:"max_connection_age,attr,optional"`
MaxConnectionAgeGrace time.Duration `river:"max_connection_age_grace,attr,optional"`
MaxConnectionIdle time.Duration `river:"max_connection_idle,attr,optional"`
ServerMaxRecvMsg int `river:"server_max_recv_msg_size,attr,optional"`
ServerMaxSendMsg int `river:"server_max_send_msg_size,attr,optional"`
ServerMaxConcurrentStreams uint `river:"server_max_concurrent_streams,attr,optional"`
}
func (g *GRPCConfig) Into(c *weaveworks.Config) {
c.GRPCListenAddress = g.ListenAddress
c.GRPCListenPort = g.ListenPort
c.GRPCConnLimit = g.ConnLimit
c.GRPCServerMaxConnectionAge = g.MaxConnectionAge
c.GRPCServerMaxConnectionAgeGrace = g.MaxConnectionAgeGrace
c.GRPCServerMaxConnectionIdle = g.MaxConnectionIdle
c.GPRCServerMaxRecvMsgSize = g.ServerMaxRecvMsg
c.GRPCServerMaxSendMsgSize = g.ServerMaxSendMsg
c.GPRCServerMaxConcurrentStreams = g.ServerMaxConcurrentStreams
}
func (c *ServerConfig) UnmarshalRiver(f func(v interface{}) error) error {
type config ServerConfig
if err := f((*config)(c)); err != nil {
return err
}
return nil
}
func (c *ServerConfig) Convert() weaveworks.Config {
cfg := newDefaultConfig()
if c.HTTP != nil {
c.HTTP.Into(&cfg)
}
if c.GRPC != nil {
c.GRPC.Into(&cfg)
}
if c.GracefulShutdownTimeout != 0 {
cfg.ServerGracefulShutdownTimeout = c.GracefulShutdownTimeout
}
return cfg
}
func newDefaultConfig() weaveworks.Config {
c := weaveworks.Config{}
c.RegisterFlags(flag.NewFlagSet("empty", flag.ContinueOnError))
c.HTTPListenPort = DefaultHTTPPort
c.GRPCListenPort = DefaultGRPCPort
c.RegisterInstrumentation = false
return c
}