summaryrefslogtreecommitdiff
path: root/src/hub/src/spreadspace.org/sfive/s5srvWeb.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/hub/src/spreadspace.org/sfive/s5srvWeb.go')
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srvWeb.go47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go
index a112585..65e677a 100644
--- a/src/hub/src/spreadspace.org/sfive/s5srvWeb.go
+++ b/src/hub/src/spreadspace.org/sfive/s5srvWeb.go
@@ -397,26 +397,11 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
return tc, nil
}
-func (srv *Server) webRun(listener *net.TCPListener) (err error) {
- mux := http.NewServeMux()
- mux.Handle("/healthz", webHandler{srv, webHealthz})
- mux.Handle("/hubs", webHandler{srv, webHubs})
- mux.Handle("/sources", webHandler{srv, webSources})
- mux.Handle("/clients", webHandler{srv, webClients})
- mux.Handle("/updates/", webHandler{srv, webUpdatesWithParam})
- mux.Handle("/updates", webHandler{srv, webUpdates})
- mux.Handle("/lastupdate/", webHandler{srv, webLastUpdateIDForUUID})
- mux.Handle("/lastupdate", webHandler{srv, webLastUpdateID})
-
- // mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir( ..staticDir.. ))))
- mux.Handle("/", webHandler{srv, webNotFound})
-
- srv.interfaces.web = &http.Server{Handler: mux, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second}
- return srv.interfaces.web.Serve(tcpKeepAliveListener{listener})
+func (srv *Server) webRun(listener *net.TCPListener) {
+ srv.interfaces.web.Serve(tcpKeepAliveListener{listener})
}
func (srv *Server) webStop(ctx context.Context) (err error) {
- // TODO: this is a race condition between a call to webRun and webStop...
if srv.interfaces.web == nil {
return nil
}
@@ -424,15 +409,35 @@ func (srv *Server) webStop(ctx context.Context) (err error) {
return srv.interfaces.web.Shutdown(ctx)
}
-func (srv *Server) ServeWeb(cfg WebInterfaceConfig) {
+func (srv *Server) ServeWeb(cfg WebInterfaceConfig) error {
ln, err := net.Listen("tcp", cfg.ListenAddr)
if err != nil {
s5l.Printf("srv|web: listen() failed: %v", err)
- return
+ return err
}
s5l.Printf("srv|web: listening on '%s'", cfg.ListenAddr)
- defer s5l.Println("srv|web: interface stopped")
- srv.webRun(ln.(*net.TCPListener))
+ mux := http.NewServeMux()
+ mux.Handle("/healthz", webHandler{srv, webHealthz})
+ mux.Handle("/hubs", webHandler{srv, webHubs})
+ mux.Handle("/sources", webHandler{srv, webSources})
+ mux.Handle("/clients", webHandler{srv, webClients})
+ mux.Handle("/updates/", webHandler{srv, webUpdatesWithParam})
+ mux.Handle("/updates", webHandler{srv, webUpdates})
+ mux.Handle("/lastupdate/", webHandler{srv, webLastUpdateIDForUUID})
+ mux.Handle("/lastupdate", webHandler{srv, webLastUpdateID})
+ // mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir( ..staticDir.. ))))
+ mux.Handle("/", webHandler{srv, webNotFound})
+
+ srv.interfaces.web = &http.Server{Handler: mux, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second}
+
+ srv.wgInterfaces.Add(1)
+ go func() {
+ defer srv.wgInterfaces.Done()
+ defer s5l.Println("srv|web: interface stopped listening")
+
+ srv.webRun(ln.(*net.TCPListener))
+ }()
+ return nil
}