photoprism/internal/server/server.go
2019-06-04 00:22:25 +02:00

50 lines
1.1 KiB
Go

package server
import (
"context"
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/photoprism/photoprism/internal/config"
log "github.com/sirupsen/logrus"
)
// Start the REST API server using the configuration provided
func Start(ctx context.Context, conf *config.Config) {
if conf.HttpServerMode() != "" {
gin.SetMode(conf.HttpServerMode())
} else if conf.Debug() == false {
gin.SetMode(gin.ReleaseMode)
}
router := gin.New()
router.Use(gin.Logger(), gin.Recovery())
// Set template directory
router.LoadHTMLGlob(conf.HttpTemplatesPath() + "/*")
registerRoutes(router, conf)
server := &http.Server{
Addr: fmt.Sprintf("%s:%d", conf.HttpServerHost(), conf.HttpServerPort()),
Handler: router,
}
go func() {
if err := server.ListenAndServe(); err != nil {
if err == http.ErrServerClosed {
log.Info("web server shutdown complete")
} else {
log.Errorf("web server closed unexpect: %s", err)
}
}
}()
<-ctx.Done()
log.Info("shutting down web server")
err := server.Close()
if err != nil {
log.Errorf("web server shutdown failed: %v", err)
}
}