go-common/app/interface/main/creative/conf/conf.go
2019-04-22 18:49:16 +08:00

412 lines
7.9 KiB
Go

package conf
import (
"encoding/json"
"errors"
"flag"
"strconv"
"go-common/app/interface/main/creative/model/academy"
appMdl "go-common/app/interface/main/creative/model/app"
"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/http/blademaster/middleware/antispam"
"go-common/library/net/rpc"
"go-common/library/net/trace"
"go-common/library/queue/databus"
"go-common/library/time"
"go-common/library/net/rpc/warden"
"github.com/BurntSushi/toml"
"go-common/library/database/hbase.v2"
)
// Conf info.
var (
ConfPath string
Conf = &Config{}
client *conf.Client
)
// Config struct.
type Config struct {
// db
DB *DB
// base
// ecode
Ecode *ecode.Config
// log
Log *log.Config
// app
App *bm.App
// HTTPClient
HTTPClient *HTTPClient
// BM
BM *HTTPServers
// rpc client2
ArchiveRPC *rpc.ClientConfig
ArticleRPC *rpc.ClientConfig
ResourceRPC *rpc.ClientConfig
RelationRPC *rpc.ClientConfig
UPRPC *rpc.ClientConfig
SubRPC *rpc.ClientConfig
// mc
Memcache *Memcache
// redis
Redis *Redis
// tracer
Tracer *trace.Config
//nhbase
HBase *HBaseConfig
HBaseOld *HBaseConfig
// white list
WhiteAccessKey string
WhiteMid int64
// host
Host *Host
H5Page *H5Page
// geetest
Geetest *Geetest
// whitelist
Whitelist *Whitelist
// ArchStatus
ArchStatus map[string]string
RouterAntispam *antispam.Config
DmAntispam *antispam.Config
// BFS
BFS *BFS
AppealTag int64
// databus sub
UserInfoSub *databus.Config
TaskPub *databus.Config
// WaterMark
WaterMark *WaterMark
Game *Game
Growup *Growup
StatCacheOn bool
AppIcon *AppIcon
UgcPay *UgcPay
//academy
Coefficient *Coefficient
// academy
Academy *Academy
AcaRecommend *AcaRecommend
//ManagerReport 行为日志平台
ManagerReport *databus.Config
// rpc server
WardenServer *warden.ServerConfig
WardenClient *warden.ClientConfig
CoinClient *warden.ClientConfig
AccClient *warden.ClientConfig
UpClient *warden.ClientConfig
// task condition
TaskCondition *TaskCondition
//联合投稿配置
StaffConf *StaffConf
// honor weekly degrade switch
HonorDegradeSwitch bool
}
// TaskCondition task condition
type TaskCondition struct {
Fans int64
ReceiveMsg string
ReceiveMsgPendant string
WhiteSwitch bool
AppIndexSwitch bool
}
// StaffConf 联合投稿配置
type StaffConf struct {
IsGray bool `json:"is_gray"`
TypeList []*StaffTypeConf `json:"typelist"`
}
// StaffTypeConf 联合投稿的分区配置
type StaffTypeConf struct {
TypeID int16 `json:"typeid"`
MaxStaff int `json:"max_staff"`
}
// UgcPay str
type UgcPay struct {
ProtocolID string
AllowDeleteDays int
AllowEditDays int
}
// Coefficient str
type Coefficient struct {
ActHeat float64
}
// AppIcon str
type AppIcon struct {
CameraInput *appMdl.Icon `json:"camera_input"`
CameraCoo *appMdl.Icon `json:"camera_coo"`
}
// Game str Conf
type Game struct {
OpenHost string
App *bm.App
}
// Growup str
type Growup struct {
LimitFanCnt int64 // LimitFanCnt 一万粉
LimitTotalClick int64 // LimitTotalClick 五十万点击量
}
// DB conf.
type DB struct {
// archive db
Creative *sql.Config
Archive *sql.Config
}
// Thrift conf.
type Thrift struct {
Addr string
Idle int
DialTimeout, ReadTimeout time.Duration
}
// HTTPServers Http Servers
type HTTPServers struct {
Outer *bm.ServerConfig
Local *bm.ServerConfig
}
// HTTPClient conf.
type HTTPClient struct {
Normal *bm.ClientConfig
Slow *bm.ClientConfig
UpMng *bm.ClientConfig
Fast *bm.ClientConfig
Chaodian *bm.ClientConfig
}
// Memcache conf.
type Memcache struct {
Data struct {
*memcache.Config
DataExpire time.Duration
IndexExpire time.Duration
}
Archive struct {
*memcache.Config
TplExpire time.Duration
}
Honor struct {
*memcache.Config
HonorExpire time.Duration
ClickExpire time.Duration
}
}
// Redis conf.
type Redis struct {
Antispam *struct {
*redis.Config
Expire time.Duration
}
Cover *struct {
*redis.Config
Expire time.Duration
}
}
// Host conf.
type Host struct {
Passport string
Archive string
Search string
API string
Data string
Member string
Act string
Activity string
Videoup string
Tag string
Geetest string
Account string
UpMng string
Elec string
Live string
Monitor string
Coverrec string
Growup string
Matsuri string
ArcTip string
Message string
HelpAPI string
MainSearch string
Dynamic string
Mall string //会员购
BPay string //B币券
Pendant string //挂件
BigMember string //大会员
Profit string //激励计划
Notify string //消息通知
Chaodian string //超电
}
// H5Page conf.
type H5Page struct {
FAQVideoEditor string
CreativeCollege string
HotAct string
Draft string
Passport string
Mission string
Cooperate string
}
// Geetest geetest id & key
type Geetest struct {
CaptchaID string
MCaptchaID string
PrivateKEY string
MPrivateKEY string
}
// Whitelist str
type Whitelist struct {
DataMids []int64
ArcMids []int64
ForbidVideoupMids []int64
}
// BFS bfs config
type BFS struct {
Timeout time.Duration
MaxFileSize int
Bucket string
URL string
Method string
Key string
Secret string
}
// WaterMark config
type WaterMark struct {
UnameMark string
UIDMark string
SaveImg string
FontFile string
FontSize int
Consume bool
}
// HBaseConfig for new hbase client.
type HBaseConfig struct {
*hbase.Config
WriteTimeout time.Duration
ReadTimeout time.Duration
}
//Academy for academy h5 conf
type Academy struct {
academy.H5Conf
}
//AcaRecommend for h5 rec conf
type AcaRecommend struct {
academy.Recommend
}
func init() {
flag.StringVar(&ConfPath, "conf", "", "default config path")
}
// Init conf.
func Init() (err error) {
if ConfPath != "" {
return local()
}
return remote()
}
func local() (err error) {
_, err = toml.DecodeFile(ConfPath, &Conf)
//bs, err := ioutil.ReadFile("academy.json")
//if err != nil {
// return err
//}
//if err = json.Unmarshal([]byte(bs), &Conf.AcaRecommend); err != nil {
// return errors.New("could not decode json config")
//}
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 (
tomlStr string
jsonStr, acaStr string
ok bool
tmpConf *Config
archStatus map[string]string
)
if tomlStr, ok = client.Toml2(); !ok {
return errors.New("load config center error")
}
if _, err = toml.Decode(tomlStr, &tmpConf); err != nil {
return errors.New("could not decode toml config")
}
if jsonStr, ok = client.Value("archStatus.json"); !ok {
return errors.New("load config center error")
}
if err = json.Unmarshal([]byte(jsonStr), &archStatus); err != nil {
return errors.New("could not decode json config")
}
if acaStr, ok = client.Value("academy.json"); !ok {
return errors.New("load config center error")
}
if err = json.Unmarshal([]byte(acaStr), &tmpConf.AcaRecommend); err != nil {
return errors.New("could not decode json config")
}
tmpConf.ArchStatus = archStatus
*Conf = *tmpConf
return
}
// StatDesc define
func (c *Config) StatDesc(state int) (desc string) {
statusStr := strconv.Itoa(state)
if v, ok := c.ArchStatus[statusStr]; !ok {
desc = statusStr
} else {
desc = v
}
return
}