Newer
Older
// Code generated by go-swagger/go-orusapi; 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"
"{{ 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 {

Christophe de Vienne
committed
if err := database.AutoMigrate(DatabaseOptions.DSN, migration.Source, Logger); err != nil {

Christophe de Vienne
committed
if err := database.IsUptodate(DatabaseOptions.DSN, migration.Source); err != nil {
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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.FindOptionByLongName("socket-path").Default = []string{"/var/run/{{dasherize .Name}}.sock"}
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())
}
}
}