This commit is contained in:
Jeffrey Duroyon
2019-04-04 14:29:48 +02:00
committed by Jeffrey Duroyon
parent 0df6d64c35
commit 33db360b03
38 changed files with 1476 additions and 1 deletions

118
cmd/root.go Normal file
View File

@@ -0,0 +1,118 @@
package cmd
import (
"fmt"
"github.com/kratisto/mam-contract/configuration"
"github.com/mitchellh/go-homedir"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"os"
)
const (
// Log
parameterLogLevel = "loglevel"
parameterLogFormat = "logformat"
defaultLogLevel = "debug"
defaultLogFormat = "text"
// Mock
parameterMock = "mock"
defaultMock = false
// Router
parameterPort = "port"
defaultPort = 8080
// DATABASE
parameterPostgresDBName = "postgresdbname"
defaultPostgresDBName = "postgres"
parameterPostgresDBSchema = "postgresdbschema"
defaultPostgresDBSchema = "workScheduler"
parameterPostgresHost = "postgreshost"
defaultPostgresHost = "database"
parameterPostgresUser = "postgresuser"
defaultPostgresUser = "postgres"
parameterPostgresPwd = "postgrespwd"
defaultPostgresPwd = "password"
)
var (
config = &configuration.Config{}
cfgFile string
// GITHASH : Stores the git revision to be displayed
GITHASH string
// VERSION : Stores the binary version to be displayed
VERSION string
// rootCmd represents the base command when called without any subcommands
rootCmd = &cobra.Command{
Use: "workScheduler",
Short: "workScheduler",
Version: fmt.Sprintf("%s (%s)", VERSION, GITHASH),
}
)
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
rootCmd.AddCommand(serveCmd)
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.workScheduler.yaml)")
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
if cfgFile != "" {
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
// Find home directory.
home, err := homedir.Dir()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Search config in home directory with name ".workScheduler" (without extension).
viper.AddConfigPath(home)
viper.SetConfigName(".workScheduler")
}
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
config.Mock = viper.GetBool(parameterMock)
config.Port = viper.GetInt(parameterPort)
config.LogLevel = viper.GetString(parameterLogLevel)
config.LogFormat = viper.GetString(parameterLogFormat)
config.PostgresDBName = viper.GetString(parameterPostgresDBName)
config.PostgresDBSchema = viper.GetString(parameterPostgresDBSchema)
config.PostgresHost = viper.GetString(parameterPostgresHost)
config.PostgresUser = viper.GetString(parameterPostgresUser)
config.PostgresPwd = viper.GetString(parameterPostgresPwd)
config.Version = VERSION
}

56
cmd/serve.go Normal file
View File

@@ -0,0 +1,56 @@
package cmd
import (
"github.com/kratisto/mam-contract/internal/ginserver"
"github.com/kratisto/mam-contract/internal/health"
"github.com/kratisto/mam-contract/internal/utils"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// serveCmd represents the serve command
var serveCmd = &cobra.Command{
Use: "serve",
Short: "Serve endpoints",
PreRun: initServeBindingsFlags,
Run: func(cmd *cobra.Command, args []string) {
initConfig()
utils.InitLogger(config.LogLevel, config.LogFormat)
logrus.
WithField(parameterLogLevel, config.LogLevel).
WithField(parameterLogFormat, config.LogFormat).
WithField(parameterPort, config.Port).
WithField(parameterPostgresHost, config.PostgresHost).
Warn("Configuration")
injector := &utils.Injector{}
ginserver.Setup(injector, config)
health.Setup(injector)
ginserver.Start(injector)
},
}
func init() {
serveCmd.Flags().String(parameterLogLevel, defaultLogLevel, "Use this flag to set the logging level")
serveCmd.Flags().String(parameterLogFormat, defaultLogFormat, "Use this flag to set the logging format")
serveCmd.Flags().Bool(parameterMock, defaultMock, "Use this flag to mock external services")
serveCmd.Flags().Int(parameterPort, defaultPort, "Use this flag to set the listening port of the api")
serveCmd.Flags().String(parameterPostgresDBName, defaultPostgresDBName, "Use this flag to set database name")
serveCmd.Flags().String(parameterPostgresDBSchema, defaultPostgresDBSchema, "Use this flag to set database schema name")
serveCmd.Flags().String(parameterPostgresHost, defaultPostgresHost, "Use this flag to set database host")
serveCmd.Flags().String(parameterPostgresUser, defaultPostgresUser, "Use this flag to set database user name")
serveCmd.Flags().String(parameterPostgresPwd, defaultPostgresPwd, "Use this flag to set database user password")
}
func initServeBindingsFlags(cmd *cobra.Command, args []string) {
viper.BindPFlag(parameterLogLevel, cmd.Flags().Lookup(parameterLogLevel))
viper.BindPFlag(parameterLogFormat, cmd.Flags().Lookup(parameterLogFormat))
viper.BindPFlag(parameterMock, cmd.Flags().Lookup(parameterMock))
viper.BindPFlag(parameterPort, cmd.Flags().Lookup(parameterPort))
viper.BindPFlag(parameterPostgresDBName, cmd.Flags().Lookup(parameterPostgresDBName))
viper.BindPFlag(parameterPostgresDBSchema, cmd.Flags().Lookup(parameterPostgresDBSchema))
viper.BindPFlag(parameterPostgresHost, cmd.Flags().Lookup(parameterPostgresHost))
viper.BindPFlag(parameterPostgresUser, cmd.Flags().Lookup(parameterPostgresUser))
viper.BindPFlag(parameterPostgresPwd, cmd.Flags().Lookup(parameterPostgresPwd))
}