You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
6.2 KiB
288 lines
6.2 KiB
package conf |
|
|
|
import ( |
|
"errors" |
|
"flag" |
|
|
|
"go-common/app/interface/main/tv/model" |
|
"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" |
|
xtime "go-common/library/time" |
|
|
|
"github.com/BurntSushi/toml" |
|
) |
|
|
|
// Conf global variable. |
|
var ( |
|
Conf = &Config{} |
|
confPath string |
|
client *conf.Client |
|
) |
|
|
|
// Config struct of conf. |
|
type Config struct { |
|
// zone configure |
|
Newzone map[string]*PageCfg |
|
// log |
|
Log *log.Config |
|
// tracer |
|
Tracer *trace.Config |
|
// http server config |
|
HTTPServer *bm.ServerConfig |
|
// auth |
|
Auth *auth.Config |
|
// verify |
|
Verify *verify.Config |
|
// mysql |
|
Mysql *sql.Config |
|
// memcache |
|
Memcache *Memcache |
|
// app |
|
TVApp *TVApp |
|
// homepage settings |
|
Homepage *PageConf |
|
// HTTPClient . |
|
HTTPClient *bm.ClientConfig |
|
PlayurlClient *bm.ClientConfig |
|
SearchClient *bm.ClientConfig |
|
// Redis |
|
Redis *Redis |
|
// Cfg common configuration |
|
Cfg *Cfg |
|
// Search Config |
|
Search *Search |
|
// RPC config |
|
ArcClient *warden.ClientConfig |
|
AccClient *warden.ClientConfig |
|
HisRPC *rpc.ClientConfig |
|
FavoriteRPC *rpc.ClientConfig |
|
TvVipClient *warden.ClientConfig |
|
// Ip Whitelist |
|
IP *IP |
|
// ecode |
|
Ecode *ecode.Config |
|
// api url |
|
Host *Host |
|
Region *Region |
|
Style *Style |
|
Wild *Wild |
|
} |
|
|
|
// IPWhite . |
|
type IPWhite struct { |
|
TvVip []string |
|
} |
|
|
|
// IP . |
|
type IP struct { |
|
White *IPWhite |
|
} |
|
|
|
// Style label . |
|
type Style struct { |
|
LabelSpan xtime.Duration |
|
} |
|
|
|
// Region . |
|
type Region struct { |
|
StopSpan xtime.Duration // get region time span |
|
} |
|
|
|
// IndexLabel def. |
|
type IndexLabel struct { |
|
Fre xtime.Duration |
|
PGCOrder []string // pgc order |
|
UGCOrder []string // ugc order |
|
YearV map[string]*YearVDur // year value pair |
|
YearParam []string // year params = pub_date, year |
|
} |
|
|
|
// YearVDur def |
|
type YearVDur struct { |
|
Dur string `json:"dur"` |
|
} |
|
|
|
// IsYear distinguishes whether the param is year type param |
|
func (u *IndexLabel) IsYear(param string) bool { |
|
for _, v := range u.YearParam { |
|
if v == param { |
|
return true |
|
} |
|
} |
|
return false |
|
} |
|
|
|
// Host api urls |
|
type Host struct { |
|
Data string // data.bilibili.co |
|
APIIndex string // homepage pgc data source |
|
APIZone string // zonepage pgc data source |
|
APIFollow string // pgc follow |
|
APIMedia string // pgc media detail |
|
APIMediaV2 string // pgc media detail v2 |
|
APIRecom string // pgc recom |
|
APINewindex string // pgc index_show |
|
UgcPlayURL string // ugc play url |
|
AIUgcType string // ai ugc type data |
|
APICo string |
|
FavAdd string // favorite add url |
|
FavDel string // favorite del url |
|
ReqURL string // version update request url |
|
ESHost string // manager url |
|
} |
|
|
|
// Wild . |
|
type Wild struct { |
|
WildSearch *WildSearch |
|
} |
|
|
|
// WildSearch wild search . |
|
type WildSearch struct { |
|
UserNum int |
|
UserVideoLimit int |
|
BiliUserNum int |
|
BiliUserVl int |
|
SeasonNum int |
|
MovieNum int |
|
SeasonMore int |
|
MovieMore int |
|
} |
|
|
|
// Cfg def. |
|
type Cfg struct { |
|
ZonePs int // Zone index page size |
|
AuthMsg *AuthMsg // auth error message config |
|
ZonesInfo *ZonesInfo // all the zones info |
|
Dangbei *Dangbei // dangbei configuration |
|
PageReload xtime.Duration // all page reload duration |
|
IndexShowReload xtime.Duration // index show reload duration |
|
EsIntervReload xtime.Duration // es intervention reload duration |
|
DefaultSplash string // default splash url |
|
FavPs int // favorite cfg |
|
PGCFilterBuild int // the build number, under which we export only pgc modules and data |
|
VipQns []string // the qualities dedicated for vips |
|
HisCfg *HisCfg // history related cfg |
|
EsIdx *EsIdx // elastic search index page cfg |
|
IndexLabel *IndexLabel // index label cfg |
|
EmptyArc *EmptyArc // chan size |
|
VipMark *VipMark // vip mark |
|
SnVipCorner *model.SnVipCorner // season vip corner mark cfg |
|
AuditSign *AuditSign |
|
} |
|
|
|
// AuditSign cfg is used to check license owner requests |
|
type AuditSign struct { |
|
Key string |
|
Secret string |
|
} |
|
|
|
// TvVip def. |
|
type TvVip struct { |
|
Build int64 |
|
Msg string |
|
} |
|
|
|
// VipMark def. |
|
type VipMark struct { |
|
V1HideChargeable bool // whether we hide chargeable episode in pgc view V1 |
|
EpFree int // ep's pay status which means free |
|
EP *model.CornerMark |
|
LoadepMsg *TvVip // tv vip cfg |
|
} |
|
|
|
// EmptyArc def. |
|
type EmptyArc struct { |
|
ChanSize int64 |
|
UnshelvePS int |
|
} |
|
|
|
// EsIdx def. |
|
type EsIdx struct { |
|
UgcIdx, PgcIdx *EsCfg |
|
} |
|
|
|
// EsCfg def. |
|
type EsCfg struct { |
|
Business string |
|
Index string |
|
} |
|
|
|
// HisCfg def. |
|
type HisCfg struct { |
|
Businesses []string |
|
Pagesize int |
|
} |
|
|
|
// Dangbei cfg def. |
|
type Dangbei struct { |
|
Pagesize int64 // dangbei api page size |
|
MangoPS int // mango page size |
|
Expire xtime.Duration // dangbei page ID expiration |
|
} |
|
|
|
// AuthMsg configures the auth error messages |
|
type AuthMsg struct { |
|
PGCOffline string // offline pgc |
|
CMSInvalid string // cms not valid |
|
LicenseReject string // license owner rejected |
|
} |
|
|
|
// App config |
|
type App struct { |
|
*bm.App |
|
} |
|
|
|
func configCenter() (err error) { |
|
if client, err = conf.New(); err != nil { |
|
panic(err) |
|
} |
|
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 |
|
} |
|
|
|
func init() { |
|
flag.StringVar(&confPath, "conf", "", "config path") |
|
} |
|
|
|
// Init init conf. |
|
func Init() (err error) { |
|
if confPath == "" { |
|
return configCenter() |
|
} |
|
_, err = toml.DecodeFile(confPath, &Conf) |
|
return |
|
}
|
|
|