github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/api/server/init.go (about) 1 package server 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "os/signal" 8 "strings" 9 10 "github.com/Sirupsen/logrus" 11 "github.com/gin-gonic/gin" 12 "github.com/spf13/viper" 13 ) 14 15 func init() { 16 viper.AutomaticEnv() // picks up env vars automatically 17 cwd, err := os.Getwd() 18 if err != nil { 19 logrus.WithError(err).Fatalln("") 20 } 21 // Replace forward slashes in case this is windows, URL parser errors 22 cwd = strings.Replace(cwd, "\\", "/", -1) 23 viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) 24 viper.SetDefault(EnvLogLevel, "info") 25 viper.SetDefault(EnvMQURL, fmt.Sprintf("bolt://%s/data/worker_mq.db", cwd)) 26 viper.SetDefault(EnvDBURL, fmt.Sprintf("bolt://%s/data/bolt.db?bucket=funcs", cwd)) 27 viper.SetDefault(EnvPort, 8080) 28 viper.SetDefault(EnvAPIURL, fmt.Sprintf("http://127.0.0.1:%d", viper.GetInt(EnvPort))) 29 viper.AutomaticEnv() // picks up env vars automatically 30 logLevel, err := logrus.ParseLevel(viper.GetString(EnvLogLevel)) 31 if err != nil { 32 logrus.WithError(err).Fatalln("Invalid log level.") 33 } 34 logrus.SetLevel(logLevel) 35 36 gin.SetMode(gin.ReleaseMode) 37 if logLevel == logrus.DebugLevel { 38 gin.SetMode(gin.DebugMode) 39 } 40 } 41 42 func contextWithSignal(ctx context.Context, signals ...os.Signal) context.Context { 43 ctx, halt := context.WithCancel(context.Background()) 44 c := make(chan os.Signal, 1) 45 signal.Notify(c, signals...) 46 go func() { 47 <-c 48 logrus.Info("Halting...") 49 halt() 50 }() 51 return ctx 52 }