go-common/app/job/main/web-goblin/conf/conf.go
2019-04-22 18:49:16 +08:00

160 lines
2.8 KiB
Go

package conf
import (
"errors"
"flag"
"go-common/library/cache/memcache"
"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/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"
)
var (
confPath string
client *conf.Client
// Conf config
Conf = &Config{}
)
// Config .
type Config struct {
Log *log.Config
BM *bm.ServerConfig
Tracer *trace.Config
Redis *redis.Config
Memcache *memcache.Config
DB *DB
Ecode *ecode.Config
// rpc
DynamicRPC *rpc.ClientConfig
FavoriteRPC *rpc.ClientConfig
ArchiveRPC *rpc.ClientConfig
// Host
Host Host
// HTTP client
HTTPClient *bm.ClientConfig
MessageHTTPClient *bm.ClientConfig
// Rule
Rule *Rule
//Push push urls
Push *Push
//Message
Message Message
// App
App *bm.App
// databus
ArchiveNotifySub *databus.Config
// Warden Client
ArcClient *warden.ClientConfig
}
// Push push.
type Push struct {
BusinessID int
BusinessToken string
PartSize int
RetryTimes int
Title string
BodyDefault string
BodySpecial string
OnlyMids string
}
// Message .
type Message struct {
URL string
MC string
}
// Rule .
type Rule struct {
BroadFeed int
SleepInterval time.Duration
Before time.Duration
ScoreSleep time.Duration
AlertTitle string
AlertBodyDefault string
AlertBodySpecial string
CoinPercent float64
FavPercent float64
DmPercent float64
ReplyPercent float64
ViewPercent float64
LikePercent float64
SharePercent float64
NewDay float64
NewPercent float64
}
// Host remote host
type Host struct {
API string
}
// DB define MySQL config
type DB struct {
Esports *sql.Config
}
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
}