-
Christophe de Vienne authored
They generate an app with 'serve' and 'migrate' commands.
Christophe de Vienne authoredThey generate an app with 'serve' and 'migrate' commands.
cmdServe.gotmpl 2.67 KiB
// Code generated by go-swagger/go-orus-api; DO NOT EDIT.
package cmd
import (
"github.com/dlmiddlecote/sqlstats"
"github.com/go-openapi/loads"
"github.com/jmoiron/sqlx"
flags "github.com/orus-io/go-flags"
"github.com/prometheus/client_golang/prometheus"
"orus.io/orus-io/go-orus-api/database"
"{{ joinFilePath .TargetImportPath "restapi" "operations" }}"
)
// NewServerCmd creates a ServerCmd
func NewServerCmd() *ServeCmd {
swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
if err != nil {
Logger.Fatal().Err(err).Msg("")
}
api := operations.New{{ pascalize .Name }}API(swaggerSpec)
server := orusapi.NewServer(nil)
cmd := ServeCmd{
Server: server,
API: api,
}
return &cmd
}
// ServeCmd is the 'serve' command
type ServeCmd struct {
Server *orusapi.Server
AutoMigrate bool `long:"auto-migrate" description:"automatically apply database migrations if needed"`
API *operations.{{ pascalize .Name }}API `no-flag:"t"`
}
// Execute setup a server and runs it
func (cmd *ServeCmd) Execute([]string) error {
if cmd.AutoMigrate {
if err := database.AutoMigrate(DatabaseOptions.DSN, migrationSource, Logger); err != nil {
return err
}
} else {
if err := database.IsUptodate(DatabaseOptions.DSN, migrationSource); err != nil {
return err
}
}
db, err := DatabaseOptions.Open()
if err != nil {
return err
}
defer func() {
if err := db.Close(); err != nil {
Logger.Err(err).Msg("could not close database connection properly")
}
}()
if err := db.Ping(); err != nil {
return err
}
if cmd.Server.Prometheus {
collector := sqlstats.NewStatsCollector("db", db)
if err := prometheus.Register(collector); err != nil {
return err
}
}
config := restapi.Config{
Log: Logger,
DB: db,
}
if err := setupServeConfig(&config); err != nil {
return err
}
cmd.Server.SetLog(Logger)
configuredAPI, err := restapi.ConfigureAPI(cmd.API, config)
if err != nil {
return err
}
cmd.Server.SetAPI(configuredAPI)
defer func() {
if err := cmd.Server.Shutdown(); err != nil {
Logger.Err(err).Msg("error shutting down the server")
}
}()
if err := cmd.Server.Serve(); err != nil {
return err
}
return nil
}
func init() {
var serveCmd = NewServerCmd()
serve, err := parser.AddCommand("serve", "Serves the API", "", serveCmd)
if err != nil {
Logger.Fatal().Msg(err.Error())
}
serve.EnvNamespace = "SERVE"
serve.FindOptionByLongName("scheme").EnvDefaultKey = "SCHEME"
for _, optsGroup := range serveCmd.API.CommandLineOptionsGroups {
_, err := serve.AddGroup(optsGroup.ShortDescription, optsGroup.LongDescription, optsGroup.Options)
if err != nil {
Logger.Fatal().Msg(err.Error())
}
}
}