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