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 {
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 {

Christophe de Vienne
committed
var infoGauge = prometheus.NewGauge(prometheus.GaugeOpts{
Name: "{{ snakize .Name }}_info",
Help: "Informations about the {{ pascalize .Name }} server",
ConstLabels: map[string]string{
"environment": InfoOptions.Environment,
"version": Version,
},
})
infoGauge.Set(1)
if err := prometheus.Register(infoGauge); err != nil {
return err
}
defer prometheus.Unregister(infoGauge)
collector := sqlstats.NewStatsCollector("db", db)
if err := prometheus.Register(collector); err != nil {
return err
}

Christophe de Vienne
committed
defer prometheus.Unregister(collector)
}
config := restapi.Config{
Log: Logger,
DB: db,
}
if err := setupServeConfig(&config); err != nil {
return err
}
cmd.Server.SetLog(Logger)

Christophe de Vienne
committed
cmd.Server.Environment = InfoOptions.Environment
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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())
}
}
}