Monorepo for Tangled
tangled.org
1package config
2
3import (
4 "context"
5 "time"
6
7 "github.com/sethvargo/go-envconfig"
8)
9
10type Config struct {
11 PlcUrl string `env:"MIRROR_PLC_URL, default=https://plc.directory"`
12 TapUrl string `env:"MIRROR_TAP_URL, default=http://localhost:2480"`
13 DbUrl string `env:"MIRROR_DB_URL, required"`
14 RedisAddr string `env:"MIRROR_REDIS_ADDR, required"`
15 KnotUseSSL bool `env:"MIRROR_KNOT_USE_SSL, default=false"` // use SSL for Knot when not scheme is not specified
16 KnotSSRF bool `env:"MIRROR_KNOT_SSRF, default=false"`
17 GitRepoBasePath string `env:"MIRROR_GIT_BASEPATH, default=repos"`
18 GitRepoFetchTimeout time.Duration `env:"MIRROR_GIT_FETCH_TIMEOUT, default=600s"`
19 ResyncParallelism int `env:"MIRROR_RESYNC_PARALLELISM, default=5"`
20 Slurper SlurperConfig `env:",prefix=MIRROR_SLURPER_"`
21 UseSSL bool `env:"MIRROR_USE_SSL, default=false"`
22 Hostname string `env:"MIRROR_HOSTNAME, required"`
23 Listen string `env:"MIRROR_LISTEN, default=:7000"`
24 MetricsListen string `env:"MIRROR_METRICS_LISTEN, default=127.0.0.1:7100"`
25 AdminListen string `env:"MIRROR_ADMIN_LISTEN, default=127.0.0.1:7200"`
26}
27
28func (c *Config) BaseUrl() string {
29 if c.UseSSL {
30 return "https://" + c.Hostname
31 }
32 return "http://" + c.Hostname
33}
34
35type SlurperConfig struct {
36 PersistCursorPeriod time.Duration `env:"PERSIST_CURSOR_PERIOD, default=4s"`
37 ConcurrencyPerHost int `env:"CONCURRENCY, default=4"`
38}
39
40func Load(ctx context.Context) (*Config, error) {
41 var cfg Config
42 if err := envconfig.Process(ctx, &cfg); err != nil {
43 return nil, err
44 }
45 return &cfg, nil
46}