mirror of
https://github.com/clearlinux/docker.git
synced 2026-10-03 15:28:35 +00:00
Make API server datastructure
Added daemon field to it, will use it later for acces to daemon from handlers Signed-off-by: Alexander Morozov <lk4d4@docker.com>
This commit is contained in:
+74
-48
@@ -40,10 +40,6 @@ import (
|
||||
"github.com/docker/docker/utils"
|
||||
)
|
||||
|
||||
var (
|
||||
activationLock = make(chan struct{})
|
||||
)
|
||||
|
||||
type ServerConfig struct {
|
||||
Logging bool
|
||||
EnableCors bool
|
||||
@@ -57,6 +53,80 @@ type ServerConfig struct {
|
||||
TlsKey string
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
daemon *daemon.Daemon
|
||||
cfg *ServerConfig
|
||||
router *mux.Router
|
||||
start chan struct{}
|
||||
|
||||
// TODO: delete engine
|
||||
eng *engine.Engine
|
||||
}
|
||||
|
||||
func New(cfg *ServerConfig, eng *engine.Engine) *Server {
|
||||
r := createRouter(
|
||||
eng,
|
||||
cfg.Logging,
|
||||
cfg.EnableCors,
|
||||
cfg.CorsHeaders,
|
||||
cfg.Version,
|
||||
)
|
||||
return &Server{
|
||||
cfg: cfg,
|
||||
router: r,
|
||||
start: make(chan struct{}),
|
||||
eng: eng,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) SetDaemon(d *daemon.Daemon) {
|
||||
s.daemon = d
|
||||
}
|
||||
|
||||
type serverCloser interface {
|
||||
Serve() error
|
||||
Close() error
|
||||
}
|
||||
|
||||
// ServeApi loops through all of the protocols sent in to docker and spawns
|
||||
// off a go routine to setup a serving http.Server for each.
|
||||
func (s *Server) ServeApi(protoAddrs []string) error {
|
||||
var chErrors = make(chan error, len(protoAddrs))
|
||||
|
||||
for _, protoAddr := range protoAddrs {
|
||||
protoAddrParts := strings.SplitN(protoAddr, "://", 2)
|
||||
if len(protoAddrParts) != 2 {
|
||||
return fmt.Errorf("bad format, expected PROTO://ADDR")
|
||||
}
|
||||
go func(proto, addr string) {
|
||||
logrus.Infof("Listening for HTTP on %s (%s)", proto, addr)
|
||||
srv, err := s.newServer(proto, addr)
|
||||
if err != nil {
|
||||
chErrors <- err
|
||||
return
|
||||
}
|
||||
s.eng.OnShutdown(func() {
|
||||
if err := srv.Close(); err != nil {
|
||||
logrus.Error(err)
|
||||
}
|
||||
})
|
||||
if err = srv.Serve(); err != nil && strings.Contains(err.Error(), "use of closed network connection") {
|
||||
err = nil
|
||||
}
|
||||
chErrors <- err
|
||||
}(protoAddrParts[0], protoAddrParts[1])
|
||||
}
|
||||
|
||||
for i := 0; i < len(protoAddrs); i++ {
|
||||
err := <-chErrors
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type HttpServer struct {
|
||||
srv *http.Server
|
||||
l net.Listener
|
||||
@@ -1632,50 +1702,6 @@ func allocateDaemonPort(addr string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type Server interface {
|
||||
Serve() error
|
||||
Close() error
|
||||
}
|
||||
|
||||
// ServeApi loops through all of the protocols sent in to docker and spawns
|
||||
// off a go routine to setup a serving http.Server for each.
|
||||
func ServeApi(protoAddrs []string, conf *ServerConfig, eng *engine.Engine) error {
|
||||
var chErrors = make(chan error, len(protoAddrs))
|
||||
|
||||
for _, protoAddr := range protoAddrs {
|
||||
protoAddrParts := strings.SplitN(protoAddr, "://", 2)
|
||||
if len(protoAddrParts) != 2 {
|
||||
return fmt.Errorf("bad format, expected PROTO://ADDR")
|
||||
}
|
||||
go func() {
|
||||
logrus.Infof("Listening for HTTP on %s (%s)", protoAddrParts[0], protoAddrParts[1])
|
||||
srv, err := NewServer(protoAddrParts[0], protoAddrParts[1], conf, eng)
|
||||
if err != nil {
|
||||
chErrors <- err
|
||||
return
|
||||
}
|
||||
eng.OnShutdown(func() {
|
||||
if err := srv.Close(); err != nil {
|
||||
logrus.Error(err)
|
||||
}
|
||||
})
|
||||
if err = srv.Serve(); err != nil && strings.Contains(err.Error(), "use of closed network connection") {
|
||||
err = nil
|
||||
}
|
||||
chErrors <- err
|
||||
}()
|
||||
}
|
||||
|
||||
for i := 0; i < len(protoAddrs); i++ {
|
||||
err := <-chErrors
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func toBool(s string) bool {
|
||||
s = strings.ToLower(strings.TrimSpace(s))
|
||||
return !(s == "" || s == "0" || s == "no" || s == "false" || s == "none")
|
||||
|
||||
Reference in New Issue
Block a user