go-common/app/service/live/broadcast-proxy/conf/config.go
2019-04-22 18:49:16 +08:00

107 lines
1.9 KiB
Go

package conf
import (
"errors"
"github.com/BurntSushi/toml"
"go-common/library/conf"
"go-common/library/log"
xtime "go-common/library/time"
)
type BroadcastProxyConfig struct {
Perf string `toml:"perf"`
Log *log.Config
Http *HttpConfig
Backend *BackendConfig
ZooKeeper *ZooKeeperConfig
Ipip *IpipConfig
Dispatch *DispatchConfig
Sven *SvenConfig
}
type HttpConfig struct {
Address string
}
type BackendConfig struct {
MaxIdleConnsPerHost int
ProbePath string
BackendServer []string
ProbeSample int
}
type ZooKeeperConfig struct {
Address []string
Timeout xtime.Duration
ConfigPath string
}
type SinaIPConfig struct {
Data string
}
type IpipConfig struct {
V4 string
V6 string
}
type DispatchConfig struct {
MaxLimit int
DefaultDomain string
WildcardDomainSuffix string
FileName string
}
type SvenConfig struct {
TreeID string
Zone string
Env string
Build string
Token string
}
func NewBroadcastProxyConfig(file string) (*BroadcastProxyConfig, error) {
config := new(BroadcastProxyConfig)
if file != "" {
if err := config.local(file); err != nil {
return nil, err
}
} else {
if err := config.remote(); err != nil {
return nil, err
}
}
return config, nil
}
func (config *BroadcastProxyConfig) local(filename string) (err error) {
_, err = toml.DecodeFile(filename, config)
return
}
func (config *BroadcastProxyConfig) remote() error {
client, err := conf.New()
if err != nil {
return err
}
if err = config.load(client); err != nil {
return err
}
go func() {
for range client.Event() {
log.Info("config event")
}
}()
return nil
}
func (config *BroadcastProxyConfig) load(c *conf.Client) error {
s, ok := c.Value("live-broadcast-proxy.toml")
if !ok {
return errors.New("load config center error")
}
if _, err := toml.Decode(s, config); err != nil {
return errors.New("could not decode config")
}
return nil
}