412 lines
7.9 KiB
Go
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
|
|
}
|