/
config.go
75 lines (67 loc) · 1.66 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package config
import (
"sync"
"github.com/BurntSushi/toml"
)
const (
ALL = "all"
WEB = "web"
GRPC = "grpc"
NoPerf = "0"
)
// Config global config
type Config struct {
WorkSpace string `toml:"workspace"`
File string `toml:"configfile"`
Mode string `toml:"mode"`
PerfConfig PerfConfig `toml:"PerfConfig"`
WebConfig WebConfig `toml:"WebConfig"`
GRPCConfig GRPCConfig `toml:"GRPCConfig"`
TraceConfig TraceConfig `toml:"TraceConfig"`
LogConfig LogConfig `toml:"LogConfig"`
RedisConfig RedisConfig `toml:"RedisConfig"`
MysqlConfig MysqlConfig `toml:"MysqlConfig"`
CosConfig CosConfig `toml:"CosConfig"`
rwmtx *sync.RWMutex
}
func defaultConfig() Config {
ret := Config{
WorkSpace: ".",
File: "./config.toml",
Mode: "all",
PerfConfig: defaultPprofConfig(),
WebConfig: defaultWebConfig(),
GRPCConfig: defaultGRPCConfig(),
TraceConfig: defaultTraceConfig(),
LogConfig: defaultLogConfig(),
RedisConfig: defaultRedisConfig(),
MysqlConfig: defaultMysqlConfig(),
CosConfig: defaultCosConfig(),
rwmtx: &sync.RWMutex{},
}
return ret
}
// LoadFromFile load from configFile
func LoadFromFile(configFile string) (*Config, error) {
cfg := defaultConfig()
if _, err := toml.DecodeFile(configFile, &cfg); err != nil {
return &cfg, err
}
cfg.File = configFile
return &cfg, nil
}
// Reload reload config
func (cfg *Config) Reload() error {
rwmtx := cfg.rwmtx
rwmtx.Lock()
defer rwmtx.Unlock()
configFile := cfg.File
newConfig, err := LoadFromFile(configFile)
if err != nil {
return err
}
*cfg = *newConfig
cfg.File = configFile
cfg.rwmtx = rwmtx
return nil
}