package bootstrap
import (
"context"
"path/filepath"
"time"
"icode.baidu.com/baidu/gdp/env"
"icode.baidu.com/baidu/gdp/logit"
"icode.baidu.com/baidu/gdp/mysql"
"icode.baidu.com/baidu/gdp/net/ral"
"icode.baidu.com/baidu/gdp/net/servicer"
"icode.baidu.com/baidu/gdp/redis"
"icode.baidu.com/baidu/gov/zw-gwy-app/library/resource"
"icode.baidu.com/baidu/gov/zw-gwy-app/library/response"
riskLevelServices "icode.baidu.com/baidu/gov/zw-gwy-app/models/services/epidemic_risk_level"
policyServices "icode.baidu.com/baidu/gov/zw-gwy-app/models/services/policy"
weatherServices "icode.baidu.com/baidu/gov/zw-gwy-app/models/services/weather"
)
func MustInit(ctx context.Context) {
initLoggers(ctx)
initRal(ctx)
loadServicer(ctx)
initMySQL(ctx)
initRedis(ctx)
initResponse()
initTask(ctx)
}
func initResponse() {
response.Init(env.ConfDir())
}
func initLoggers(ctx context.Context) {
{
webLogger, err := logit.NewLogger(ctx, logit.OptConfigFile("logit/service.toml"))
if err != nil {
panic(err.Error())
}
resource.LoggerService = webLogger
TryRegisterCloser(webLogger)
}
}
func initRal(ctx context.Context) {
ral.InitDefault(ctx)
}
func loadServicer(ctx context.Context) {
pattern := filepath.Join(env.ConfDir(), "servicer", "*.toml")
servicer.MustLoad(ctx, servicer.LoadOptFilesGlob(pattern, false))
}
func initMySQL(_ context.Context) {
resource.MySQLClientUser = mustInitOneMySQL("mysql")
}
func mustInitOneMySQL(name interface{}) mysql.Client {
opts := []mysql.ClientOption{
mysql.OptObserver(mysql.NewMetricsObserverFunc(nil)),
}
client, err := mysql.NewClient(name, opts...)
if err != nil {
panic(err.Error())
}
return client
}
func initRedis(_ context.Context) {
resource.RedisUser = mustInitOneRedis("redis")
}
func mustInitOneRedis(name string) redis.Client {
opts := []redis.ClientOption{
redis.OptHooker(redis.NewMetricsHook(nil)),
redis.OptHooker(redis.NewLogHook()),
}
client, err := redis.NewClient(name, opts...)
if err != nil {
panic(err.Error())
}
return client
}
func initTask(ctx context.Context) {
}
func pollYiqingPolicy(ctx context.Context) {
t := time.NewTicker(time.Duration(60) * time.Minute)
ctxLog := logit.WithContext(ctx)
go func(t *time.Ticker) {
defer func() {
if err := recover(); err != nil {
resource.LoggerService.Warning(ctx, "pollWeatherWarning", logit.AutoField("panic", err))
}
t.Stop()
}()
for {
select {
case <-t.C:
policyServices.PollPolicyData(ctxLog)
}
}
}(t)
}
func pollingRiskLevelChange(ctx context.Context) {
t := time.NewTicker(time.Duration(60) * time.Minute)
ctxLog := logit.WithContext(ctx)
go func(t *time.Ticker) {
defer func() {
if err := recover(); err != nil {
resource.LoggerService.Warning(ctx, "PollingRiskLevel", logit.AutoField("panic", err))
}
t.Stop()
}()
for {
select {
case <-t.C:
riskLevelServices.PollingRiskLevel(ctxLog)
}
}
}(t)
}
func pollWeatherWarning(ctx context.Context) {
t := time.NewTicker(time.Duration(60) * time.Minute)
ctxLog := logit.WithContext(ctx)
go func(t *time.Ticker) {
defer func() {
if err := recover(); err != nil {
resource.LoggerService.Warning(ctx, "pollWeatherWarning", logit.AutoField("panic", err))
}
t.Stop()
}()
for {
select {
case <-t.C:
weatherServices.PollAlarmData(ctxLog)
}
}
}(t)
}