LocalhostBunny/config.go

167 lines
4.3 KiB
Go

package bunny
import (
"github.com/rs/xid"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"gogs.mikescher.com/BlackForestBytes/goext/confext"
"os"
"time"
)
const APILevel = 1
var SelfProcessID int
type Config struct {
Namespace string
GinDebug bool `env:"GINDEBUG"`
ReturnRawErrors bool `env:"RETURNERRORS"`
Custom404 bool `env:"CUSTOM404"`
LogLevel zerolog.Level `env:"LOGLEVEL"`
ServerIP string `env:"IP"`
ServerPort int `env:"PORT"`
RequestTimeout time.Duration `env:"REQUEST_TIMEOUT"`
Cors bool `env:"CORS"`
VerifyConnTimeoutHTML time.Duration `env:"VERIFY_CONN_TIMEOUT_HTML"`
VerifyConnTimeoutAPI time.Duration `env:"VERIFY_CONN_TIMEOUT_API"`
LiveReload *string `env:"LIVERELOAD"`
CacheDuration time.Duration `env:"CACHE_DURATION"`
}
var Conf Config
var configLocHost = func() Config {
return Config{
Namespace: "local",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: 80,
Custom404: true,
ReturnRawErrors: true,
RequestTimeout: 16 * time.Second,
LogLevel: zerolog.DebugLevel,
Cors: true,
VerifyConnTimeoutAPI: 2 * time.Second,
VerifyConnTimeoutHTML: 500 * time.Millisecond,
LiveReload: nil,
CacheDuration: 8 * time.Second,
}
}
var configLocDocker = func() Config {
return Config{
Namespace: "local-docker",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: 80,
Custom404: true,
ReturnRawErrors: true,
RequestTimeout: 16 * time.Second,
LogLevel: zerolog.DebugLevel,
Cors: true,
VerifyConnTimeoutAPI: 2 * time.Second,
VerifyConnTimeoutHTML: 500 * time.Millisecond,
LiveReload: nil,
CacheDuration: 8 * time.Second,
}
}
var configDev = func() Config {
return Config{
Namespace: "develop",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: 80,
Custom404: false,
ReturnRawErrors: false,
RequestTimeout: 16 * time.Second,
LogLevel: zerolog.DebugLevel,
Cors: false,
VerifyConnTimeoutAPI: 2 * time.Second,
VerifyConnTimeoutHTML: 500 * time.Millisecond,
LiveReload: nil,
CacheDuration: 8 * time.Second,
}
}
var configStag = func() Config {
return Config{
Namespace: "staging",
GinDebug: true,
ServerIP: "0.0.0.0",
ServerPort: 80,
Custom404: false,
ReturnRawErrors: false,
RequestTimeout: 16 * time.Second,
LogLevel: zerolog.DebugLevel,
Cors: false,
VerifyConnTimeoutAPI: 2 * time.Second,
VerifyConnTimeoutHTML: 500 * time.Millisecond,
LiveReload: nil,
CacheDuration: 8 * time.Second,
}
}
var configProd = func() Config {
return Config{
Namespace: "production",
GinDebug: false,
ServerIP: "0.0.0.0",
ServerPort: 80,
Custom404: false,
ReturnRawErrors: false,
RequestTimeout: 16 * time.Second,
LogLevel: zerolog.InfoLevel,
Cors: false,
VerifyConnTimeoutAPI: 2 * time.Second,
VerifyConnTimeoutHTML: 500 * time.Millisecond,
LiveReload: nil,
CacheDuration: 8 * time.Second,
}
}
var allConfig = map[string]func() Config{
"local-host": configLocHost,
"local-docker": configLocDocker,
"develop": configDev,
"staging": configStag,
"production": configProd,
}
var instID xid.ID
func InstanceID() string {
return instID.String()
}
func getConfig(ns string) (Config, bool) {
if ns == "" {
ns = "production"
}
if cfn, ok := allConfig[ns]; ok {
c := cfn()
err := confext.ApplyEnvOverrides("BUNNY_", &c, "_")
if err != nil {
panic(err)
}
return c, true
}
return Config{}, false
}
func init() {
instID = xid.New()
ns := os.Getenv("CONF_NS")
cfg, ok := getConfig(ns)
if !ok {
log.Fatal().Str("ns", ns).Msg("Unknown config-namespace")
}
Conf = cfg
SelfProcessID = os.Getpid()
}