|
|
@@ -25,6 +25,8 @@ type HttpServer struct {
|
|
|
macaron *macaron.Macaron
|
|
|
context context.Context
|
|
|
streamManager *live.StreamManager
|
|
|
+
|
|
|
+ httpSrv *http.Server
|
|
|
}
|
|
|
|
|
|
func NewHttpServer() *HttpServer {
|
|
|
@@ -46,11 +48,20 @@ func (hs *HttpServer) Start(ctx context.Context) error {
|
|
|
listenAddr := fmt.Sprintf("%s:%s", setting.HttpAddr, setting.HttpPort)
|
|
|
hs.log.Info("Initializing HTTP Server", "address", listenAddr, "protocol", setting.Protocol, "subUrl", setting.AppSubUrl)
|
|
|
|
|
|
+ hs.httpSrv = &http.Server{Addr: listenAddr, Handler: hs.macaron}
|
|
|
switch setting.Protocol {
|
|
|
case setting.HTTP:
|
|
|
- err = http.ListenAndServe(listenAddr, hs.macaron)
|
|
|
+ err = hs.httpSrv.ListenAndServe()
|
|
|
+ if err == http.ErrServerClosed {
|
|
|
+ hs.log.Debug("server was shutdown gracefully")
|
|
|
+ return nil
|
|
|
+ }
|
|
|
case setting.HTTPS:
|
|
|
- err = hs.listenAndServeTLS(listenAddr, setting.CertFile, setting.KeyFile)
|
|
|
+ err = hs.httpSrv.ListenAndServeTLS(setting.CertFile, setting.KeyFile)
|
|
|
+ if err == http.ErrServerClosed {
|
|
|
+ hs.log.Debug("server was shutdown gracefully")
|
|
|
+ return nil
|
|
|
+ }
|
|
|
default:
|
|
|
hs.log.Error("Invalid protocol", "protocol", setting.Protocol)
|
|
|
err = errors.New("Invalid Protocol")
|
|
|
@@ -59,6 +70,12 @@ func (hs *HttpServer) Start(ctx context.Context) error {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
+func (hs *HttpServer) Shutdown(ctx context.Context) error {
|
|
|
+ err := hs.httpSrv.Shutdown(ctx)
|
|
|
+ hs.log.Info("stopped http server")
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
func (hs *HttpServer) listenAndServeTLS(listenAddr, certfile, keyfile string) error {
|
|
|
if certfile == "" {
|
|
|
return fmt.Errorf("cert_file cannot be empty when using HTTPS")
|