-
Christophe de Vienne authoredChristophe de Vienne authored
serve.go 1.43 KiB
package cmd
import (
"net/http"
"orus.io/orus-io/go-orusapi"
)
type ServeCmd struct {
Server *orusapi.Server
AutoMigrate bool `long:"auto-migrate" description:"Automaticaly migrate the database if necessary" env:"AUTOMIGRATE"`
program *Program
}
type serveAPI struct {
name string
handler http.Handler
}
func (api *serveAPI) Name() string {
return api.name
}
func (api *serveAPI) Handler() http.Handler {
return api.handler
}
func (api *serveAPI) PreServerShutdown() {
}
func (api *serveAPI) ServerShutdown() {
}
func (cmd *ServeCmd) Execute([]string) error {
if err := cmd.program.EnsureDB(cmd.AutoMigrate); err != nil {
return err
}
defer cmd.program.CloseDB()
handler := cmd.program.setupHandler(cmd.program)
cmd.Server.SetLog(cmd.program.Logger)
cmd.Server.Environment = cmd.program.InfoOptions.Environment
cmd.Server.SetAPI(&serveAPI{
name: cmd.program.Parser.Name,
handler: handler,
})
defer func() {
if err := cmd.Server.Shutdown(); err != nil {
cmd.program.Logger.Err(err).Msg("error shutting down the server")
}
}()
if err := cmd.Server.Serve(); err != nil {
return err
}
return nil
}
func SetupServeCmd(program *Program) *ServeCmd {
cmd := ServeCmd{
program: program,
Server: orusapi.NewServer(nil),
}