+173
@@ -0,0 +1,173 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"91porn-server/common/cachev2"
|
||||
"91porn-server/common/laosiji"
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/conf"
|
||||
"91porn-server/common/constant"
|
||||
"91porn-server/common/db"
|
||||
"91porn-server/common/httputil"
|
||||
"91porn-server/common/laosiji_app"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/sms"
|
||||
"91porn-server/common/tg"
|
||||
"91porn-server/models"
|
||||
"91porn-server/models/Init"
|
||||
_ "91porn-server/models/commod" // swagger依赖
|
||||
_ "91porn-server/models/v/ldycfgmod" // swagger依赖
|
||||
_ "91porn-server/models/v/moduleconfmod" // swagger依赖
|
||||
_ "91porn-server/models/v/modulesectionmod" // swagger依赖
|
||||
_ "91porn-server/models/v/operationlogmod" // swagger依赖
|
||||
_ "91porn-server/models/v/rchgamegoldmod" // swagger依赖
|
||||
_ "91porn-server/models/v/rchgamtmod" // swagger依赖
|
||||
_ "91porn-server/models/v/rchgchanmod" // swagger依赖
|
||||
_ "91porn-server/models/v/tagconfmod" // swagger依赖
|
||||
_ "91porn-server/models/v/wdchannmod" // swagger依赖
|
||||
|
||||
// _ "91porn-server/web/docs"
|
||||
"91porn-server/web/router"
|
||||
"91porn-server/web/service/activityser"
|
||||
officialwebsiteser "91porn-server/web/service/officialWebsiteser"
|
||||
"91porn-server/web/service/prefetch"
|
||||
"91porn-server/web/webg"
|
||||
)
|
||||
|
||||
var httpServer *http.Server
|
||||
|
||||
func main() {
|
||||
time.Local, _ = time.LoadLocation("Asia/Shanghai")
|
||||
common.Go(startUp)
|
||||
waitQuit()
|
||||
}
|
||||
|
||||
func init() {
|
||||
cfg := webg.GlobalConfig{}
|
||||
//加载配置 etcd配置
|
||||
static := webg.StaticSource{}
|
||||
if err := conf.LoadJSON("config/static.json", &static); err != nil {
|
||||
fmt.Printf("startUp load static error: %v\n", err)
|
||||
}
|
||||
if err := conf.LoadJSON("config/web.json", &cfg); err != nil {
|
||||
fmt.Printf("startUp get config error: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println("use local config successfully")
|
||||
webg.Conf = &cfg
|
||||
webg.Static = &static
|
||||
sms.Init(sms.Config{
|
||||
FengNiao: sms.FengNiaoConfig{
|
||||
Url: cfg.SMS.FengNiao.Url,
|
||||
ChinaMercId: cfg.SMS.FengNiao.ChinaMercId,
|
||||
ChinaSecret: cfg.SMS.FengNiao.ChinaSecret,
|
||||
ChinaTmplId: cfg.SMS.FengNiao.ChinaTmplId,
|
||||
InterMercId: cfg.SMS.FengNiao.InterMercId,
|
||||
InterSecret: cfg.SMS.FengNiao.InterSecret,
|
||||
InterTmplId: cfg.SMS.FengNiao.InterTmplId,
|
||||
},
|
||||
})
|
||||
laosiji_app.Init(webg.Conf.LaoSiJiAiMate)
|
||||
log.Init(log.Options{Level: webg.Conf.Log.Level, DisableStack: webg.Conf.Log.DisableStacktrace})
|
||||
if cfg.Base.Env == constant.ProdEnv {
|
||||
webg.Bot = tg.New(tg.TianTian_Bot, fmt.Sprintf("短视频[env:%s]", webg.Conf.Base.Env))
|
||||
common.SetPanicHandler(func(s string) { _ = webg.Bot.Send(tg.Msg{ChatId: tg.ChatIdServerTeam, Text: "[Web-Server]" + s}) })
|
||||
}
|
||||
}
|
||||
|
||||
func startUp() {
|
||||
ds := db.InitDS(InitMongodbParam(models.RegisterPool))
|
||||
if len(ds) > 0 {
|
||||
for k, v := range ds {
|
||||
switch k {
|
||||
case models.VideoDb:
|
||||
webg.VideoDB = v
|
||||
case models.LogDb:
|
||||
webg.LogDB = v
|
||||
case models.StatDb:
|
||||
webg.StatDB = v
|
||||
}
|
||||
}
|
||||
}
|
||||
// 初始化Redis
|
||||
webg.InitRedis()
|
||||
// 初始化缓存操作中间件
|
||||
cachev2.Init(webg.Redis, log.ZapLog)
|
||||
// 初始化ES
|
||||
webg.InitElastic()
|
||||
webg.ProxyCfg = &httputil.ProxyCfg{
|
||||
Host: webg.Conf.URL.HttpProxy,
|
||||
IsActive: false,
|
||||
}
|
||||
Init.InitMongo()
|
||||
laosiji.Init(*webg.Conf)
|
||||
|
||||
//载入活动定时任务
|
||||
if err := activityser.LoadingJob(); err != nil {
|
||||
os.Exit(1)
|
||||
return
|
||||
}
|
||||
// 官网 seoSlug 回填定时任务:扫描各表缺失 seoSlug 的记录按标题补齐
|
||||
officialwebsiteser.StartSeoSlugBackfillCron()
|
||||
port := webg.Conf.Base.Port
|
||||
httpServer = &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", port),
|
||||
Handler: router.SetupGin(),
|
||||
}
|
||||
log.Info("Web Start Listen ...", log.Any("port", port))
|
||||
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||
log.Fatal("server listen err", log.E(err))
|
||||
}
|
||||
//Block Here
|
||||
log.Info("httpServer quit...")
|
||||
}
|
||||
|
||||
func waitQuit() {
|
||||
//graceful exit
|
||||
ch := make(chan os.Signal, 1)
|
||||
signal.Notify(ch, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)
|
||||
<-ch
|
||||
log.Info("Recv Signal, Shutdown Server Start...")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
if httpServer != nil {
|
||||
if err := httpServer.Shutdown(ctx); err != nil {
|
||||
log.Error(fmt.Sprintf("Server Shutdown:%+v", err))
|
||||
}
|
||||
}
|
||||
db.CloseDS()
|
||||
prefetch.StopSubmitPrefetch()
|
||||
if err := webg.RedisClose(); err != nil {
|
||||
log.Error("redis close error", log.E(err))
|
||||
return
|
||||
}
|
||||
log.Warn("Shutdown Server OK...")
|
||||
}
|
||||
|
||||
func InitMongodbParam(registerPool []models.Register) ([]db.DBmap, []db.Register) {
|
||||
pri := db.DBmap{
|
||||
Key: models.VideoDb,
|
||||
URL: webg.Conf.Mongo.VideoDbUrl,
|
||||
}
|
||||
sta := db.DBmap{
|
||||
Key: models.StatDb,
|
||||
URL: webg.Conf.Mongo.StatDbUrl,
|
||||
}
|
||||
log := db.DBmap{
|
||||
Key: models.LogDb,
|
||||
URL: webg.Conf.Mongo.LogDbUrl,
|
||||
}
|
||||
dbgister := make([]db.Register, len(registerPool))
|
||||
for i, v := range registerPool {
|
||||
dbgister[i] = db.Register{Key: v.Key, Table: v.Table}
|
||||
}
|
||||
dbmaps := []db.DBmap{pri, sta, log}
|
||||
return dbmaps, dbgister
|
||||
}
|
||||
Reference in New Issue
Block a user