-
Notifications
You must be signed in to change notification settings - Fork 0
/
conf.go
153 lines (140 loc) · 2.72 KB
/
conf.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package conf
import (
"errors"
"flag"
"go-common/library/cache/redis"
"go-common/library/conf"
"go-common/library/database/sql"
ecode "go-common/library/ecode/tip"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/http/blademaster/middleware/auth"
"go-common/library/net/http/blademaster/middleware/verify"
"go-common/library/net/rpc"
"go-common/library/net/rpc/warden"
"go-common/library/net/trace"
"go-common/library/queue/databus"
"go-common/library/time"
"github.com/BurntSushi/toml"
)
// global var
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config config set
type Config struct {
// base
// elk
Log *log.Config
// App
App *bm.App
// rpc server2
RPCServer *rpc.ServerConfig
// tracer
Tracer *trace.Config
// auth
Auth *auth.Config
// verify
Verify *verify.Config
// HTTPServer
HTTPServer *bm.ServerConfig
// Ecode
Ecode *ecode.Config
// rpc
FavoriteRPC *rpc.ClientConfig
ArchiveRPC *rpc.ClientConfig
AccountRPC *rpc.ClientConfig
FilterRPC *rpc.ClientConfig
// databus
ViewDatabus *databus.Config
ShareDatabus *databus.Config
// Mysql
Mysql *sql.Config
// Redis
Redis *Redis
// HTTP client
HTTPClient *bm.ClientConfig
// Rule
Rule *Rule
// Host
Host *Host
// Warden Client
ArcClient *warden.ClientConfig
AccClient *warden.ClientConfig
}
// Host hosts.
type Host struct {
Search string
}
// Redis redis struct
type Redis struct {
*redis.Config
PlExpire time.Duration
StatExpire time.Duration
}
// Rule playlist config
type Rule struct {
MaxNameLimit int
MaxPlDescLimit int
MaxVideoDescLimit int
MaxArcChangeLimit int
MaxVideoCnt int
MaxPlCnt int
MaxPlArcsPs int
MaxPlsPageSize int
SortStep int64
MinSort int64
MaxSearchArcPs int
MaxSearchLimit int
BeginSort int64
PowerMids []int64
}
func init() {
flag.StringVar(&confPath, "conf", "", "default config path")
}
// Init init conf
func Init() error {
if confPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(confPath, &Conf)
return
}
func remote() (err error) {
if client, err = conf.New(); err != nil {
return
}
if err = load(); err != nil {
return
}
go func() {
for range client.Event() {
log.Info("config reload")
if load() != nil {
log.Error("config reload error (%v)", err)
}
}
}()
return
}
func load() (err error) {
var (
s string
ok bool
tmpConf *Config
)
if s, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(s, &tmpConf); err != nil {
return errors.New("could not decode config")
}
*Conf = *tmpConf
return
}