all repos

onasty @ ac9bab342dae825c63aeeafe0f8af33fbc737850

a one-time notes service

onasty/mailer/config.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor(config): make config singleton (#202), 9 months ago
1
package main
2
3
import (
4
	"os"
5
	"strconv"
6
	"sync"
7
)
8
9
var (
10
	configInstance *Config
11
	once           sync.Once
12
)
13
14
type Config struct {
15
	AppURL      string
16
	FrontendURL string
17
18
	NatsURL       string
19
	MailgunFrom   string
20
	MailgunDomain string
21
	MailgunAPIKey string
22
23
	LogLevel    string
24
	LogFormat   string
25
	LogShowLine bool
26
27
	MetricsEnabled bool
28
	MetricsPort    int
29
}
30
31
func NewConfig() *Config {
32
	once.Do(func() {
33
		configInstance = &Config{
34
			AppURL:         getenvOrDefault("APP_URL", ""),
35
			FrontendURL:    getenvOrDefault("FRONTEND_URL", ""),
36
			NatsURL:        getenvOrDefault("NATS_URL", ""),
37
			MailgunFrom:    getenvOrDefault("MAILGUN_FROM", ""),
38
			MailgunDomain:  getenvOrDefault("MAILGUN_DOMAIN", ""),
39
			MailgunAPIKey:  getenvOrDefault("MAILGUN_API_KEY", ""),
40
			LogLevel:       getenvOrDefault("LOG_LEVEL", "debug"),
41
			LogFormat:      getenvOrDefault("LOG_FORMAT", "json"),
42
			LogShowLine:    getenvOrDefault("LOG_SHOW_LINE", "true") == "true",
43
			MetricsPort:    mustGetenvOrDefaultInt("METRICS_PORT", 8001),
44
			MetricsEnabled: getenvOrDefault("METRICS_ENABLED", "true") == "true",
45
		}
46
	})
47
	return configInstance
48
}
49
50
func getenvOrDefault(key, def string) string {
51
	if v, ok := os.LookupEnv(key); ok {
52
		return v
53
	}
54
	return def
55
}
56
57
func mustGetenvOrDefaultInt(key string, def int) int {
58
	if v, ok := os.LookupEnv(key); ok {
59
		r, err := strconv.Atoi(v)
60
		if err != nil {
61
			panic(err)
62
		}
63
		return r
64
	}
65
	return def
66
}