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.
232 lines
5.0 KiB
232 lines
5.0 KiB
package conf |
|
|
|
import ( |
|
"errors" |
|
"flag" |
|
|
|
"go-common/library/cache/memcache" |
|
"go-common/library/cache/redis" |
|
"go-common/library/conf" |
|
"go-common/library/database/sql" |
|
"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" |
|
xtime "go-common/library/time" |
|
|
|
"github.com/BurntSushi/toml" |
|
) |
|
|
|
// Conf global variable. |
|
var ( |
|
Conf = &Config{} |
|
client *conf.Client |
|
confPath string |
|
) |
|
|
|
// Config struct of conf. |
|
type Config struct { |
|
// base |
|
// log |
|
Log *log.Config |
|
// Databus cfg |
|
ContentSub *databus.Config |
|
ArchiveNotifySub *databus.Config |
|
UgcSub *databus.Config |
|
// tracer |
|
Tracer *trace.Config |
|
// http |
|
HTTPServer *bm.ServerConfig |
|
// db |
|
Mysql *sql.Config |
|
// sync params |
|
Sync *Sync |
|
// memcache |
|
Memcache *Memcache |
|
// redis |
|
Redis *Redis |
|
// playControl related config |
|
PlayControl *PlayControl |
|
// HTTPClient . |
|
HTTPClient *bm.ClientConfig |
|
// Search Cfg |
|
Search *Search |
|
// UgcSync cfg |
|
UgcSync *UgcSync |
|
// grpc |
|
ArcClient *warden.ClientConfig |
|
ArchiveRPC *rpc.ClientConfig |
|
AccClient *warden.ClientConfig |
|
Cfg *Cfg |
|
Report *Report |
|
DpClient *bm.ClientConfig |
|
Style *Style |
|
} |
|
|
|
// Style . |
|
type Style struct { |
|
LabelSpan xtime.Duration |
|
StyleSpan xtime.Duration |
|
} |
|
|
|
// Report data . |
|
type Report struct { |
|
ReportURI string |
|
UpDataURI string |
|
TimeDelay string |
|
SendDataDelay xtime.Duration |
|
Env string |
|
RoutineCount int |
|
ReadSize int |
|
Expire xtime.Duration |
|
SeTimeSpan xtime.Duration |
|
CronAc string |
|
CronAd string |
|
CronPd string |
|
CronVe string |
|
} |
|
|
|
// Cfg contains various of configuration |
|
type Cfg struct { |
|
TitleFilter []string |
|
LessStrategy int |
|
PgcTypes []string // pgc types name, need to filter these ugc archives |
|
PGCZonesID []int // all the zones' ID that need to be loaded |
|
UgcZones map[string]*UgcType |
|
SyncRetry *SyncRetry // sync retry |
|
Merak *Merak |
|
} |
|
|
|
// Merak cfg |
|
type Merak struct { |
|
Host string |
|
Key string |
|
Secret string |
|
Names []string |
|
Template string |
|
Title string |
|
Cron string |
|
Onlyfree bool // if true, we consider free+audited episodes, otherwise we consider only audited episodes |
|
} |
|
|
|
// SyncRetry def. |
|
type SyncRetry struct { |
|
MaxRetry int // max retry times for pgc already-passed sn & ep |
|
RetryFre xtime.Duration |
|
} |
|
|
|
// UgcType def. |
|
type UgcType struct { |
|
TID int32 |
|
Name string |
|
} |
|
|
|
// Search represents the config for the search suggestion module |
|
type Search struct { |
|
UgcSwitch string // the Ugc search suggest Switch |
|
SugPath string // the tvsug file local path |
|
Md5Path string // the tvsug md5 file local path |
|
FTP *FTP // the ftp info |
|
PgcContPath string // the pgc content file local path |
|
PgcContMd5Path string // the pgc content md5 file local path |
|
UgcContPath string // the ugc content file local path |
|
UgcContMd5Path string // the ugc content md5 file local path |
|
Cfg *SearchCfg |
|
} |
|
|
|
//SearchCfg synchronize files time |
|
type SearchCfg struct { |
|
UploadFre xtime.Duration |
|
} |
|
|
|
// FTP represents the ftp login info |
|
type FTP struct { |
|
Pass string |
|
User string |
|
Host string |
|
URL string |
|
Timeout xtime.Duration // timeout in seconds |
|
UseEPSV bool |
|
RemoteFName string // file name in remote ftp server |
|
RemoteMd5 string // md5 file name in remote ftp server |
|
RemotePgcCont string // pgc file name in remote ftp server |
|
RemotePgcURL string // RemotePgcURL remote search pgc url dir |
|
RemotePgcContMd5 string // pgc md5 file name in remote ftp server |
|
RemoteUgcCont string // ugc file name in remote ftp server |
|
RemoteUgcURL string // RemotePgcCont remote search ugc url dir |
|
RemoteUgcContMd5 string // ugc md5 file name in remote ftp server |
|
} |
|
|
|
// Redis redis |
|
type Redis struct { |
|
*redis.Config |
|
Expire xtime.Duration |
|
CronPGC string |
|
CronUGC string |
|
} |
|
|
|
// PlayControl is the configuration for the play control interface, related to MC |
|
type PlayControl struct { |
|
ProducerCron string |
|
PieceSize int |
|
} |
|
|
|
// Memcache config |
|
type Memcache struct { |
|
*memcache.Config |
|
Expire xtime.Duration |
|
ExpireMedia xtime.Duration |
|
} |
|
|
|
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 |
|
} |
|
|
|
func init() { |
|
flag.StringVar(&confPath, "conf", "", "default config path") |
|
} |
|
|
|
// Init int config |
|
func Init() error { |
|
if confPath != "" { |
|
return local() |
|
} |
|
return remote() |
|
}
|
|
|