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  }