162 lines
4.0 KiB
Go
162 lines
4.0 KiB
Go
package main
|
|
|
|
import (
|
|
"91porn-server/common/cachev2"
|
|
"91porn-server/common/dataReport"
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"91porn-server/common"
|
|
"91porn-server/common/conf"
|
|
"91porn-server/common/db"
|
|
"91porn-server/common/laosiji"
|
|
"91porn-server/common/log"
|
|
recommendqueue "91porn-server/common/shortrecommend"
|
|
"91porn-server/common/tg"
|
|
"91porn-server/models"
|
|
"91porn-server/models/Init"
|
|
"91porn-server/skd/job"
|
|
"91porn-server/skd/service"
|
|
"91porn-server/skd/skdg"
|
|
)
|
|
|
|
func init() {
|
|
cfg := skdg.GlobalConfig{}
|
|
log.Info("load config start...")
|
|
if err := conf.LoadJSON("config/skd.json", &cfg); err != nil {
|
|
log.Error("startUp get config error: %v", log.E(err))
|
|
panic(err)
|
|
}
|
|
skdg.Conf = &cfg
|
|
log.Info("load config end..")
|
|
log.Init(log.Options{Level: skdg.Conf.Log.Level})
|
|
log.Info("daichong conf Domain", log.Any("donmain", skdg.Conf.DaiChong.Domain))
|
|
}
|
|
|
|
var httpServer *http.Server
|
|
|
|
func main() {
|
|
time.Local, _ = time.LoadLocation("Asia/Shanghai")
|
|
common.Go(func() {
|
|
startUp()
|
|
httpServerStart()
|
|
job.Start()
|
|
})
|
|
waitQuit()
|
|
}
|
|
|
|
func startUp() {
|
|
if skdg.Conf.Base.Env == "prod" {
|
|
skdg.Bot = tg.New(tg.TianTian_Bot, fmt.Sprintf("短视频[env:%s][Skd-Server]", skdg.Conf.Base.Env))
|
|
common.SetPanicHandler(func(s string) {
|
|
_ = skdg.Bot.Send(tg.Msg{ChatId: tg.ChatIdServerTeam, Text: `\[SKD-Server\]` + s})
|
|
})
|
|
}
|
|
ds := db.InitDS(initMongodbParam(models.RegisterPool))
|
|
if len(ds) > 0 {
|
|
for k, v := range ds {
|
|
switch k {
|
|
case models.VideoDb:
|
|
skdg.VideoDB = v
|
|
case models.LogDb:
|
|
skdg.LogDB = v
|
|
case models.StatDb:
|
|
skdg.StatDB = v
|
|
}
|
|
}
|
|
}
|
|
dataReport.Init(dataReport.Config{
|
|
ApiUrl: skdg.Conf.DataReport.Url,
|
|
})
|
|
laosiji.InitConfig(laosiji.Config{
|
|
AppID: skdg.Conf.LSJ.AppID,
|
|
APIKey: skdg.Conf.LSJ.APIKey,
|
|
APIUrl: skdg.Conf.LSJ.APIUrl,
|
|
ImageYuan: skdg.Conf.LSJ.ImageYuan,
|
|
NoticeURL: skdg.Conf.LSJ.NoticeURL,
|
|
})
|
|
skdg.InitRedis()
|
|
if err := recommendqueue.SetKeyTTLHours(skdg.Conf.ShortRecommendKeyTTL()); err != nil {
|
|
log.Error("short recommend key TTL config invalid, use default",
|
|
log.E(err), log.Any("configuredHours", skdg.Conf.ShortRecommendKeyTTL()))
|
|
_ = recommendqueue.SetKeyTTLHours(72)
|
|
}
|
|
// 初始化缓存操作中间件
|
|
cachev2.Init(skdg.Redis, log.ZapLog)
|
|
skdg.InitElastic()
|
|
skdg.InitStatic()
|
|
Init.InitMongo()
|
|
Init.ESInit()
|
|
if skdg.Conf.Switch.NotifyExpire {
|
|
service.DoRegister()
|
|
}
|
|
// service.RobotPublishComment()
|
|
// service.Init()
|
|
// service.VideoInfo.FullUpdate()
|
|
}
|
|
|
|
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...")
|
|
log.Info("Pleace Wait Job Stop...")
|
|
job.Stop()
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
if httpServer != nil {
|
|
if err := httpServer.Shutdown(ctx); err != nil {
|
|
log.Error("Server Shutdown error", log.E(err))
|
|
}
|
|
}
|
|
db.CloseDS()
|
|
if err := skdg.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: skdg.Conf.Mongo.VideoDbUrl,
|
|
}
|
|
sta := db.DBmap{
|
|
Key: models.StatDb,
|
|
URL: skdg.Conf.Mongo.StatDbUrl,
|
|
}
|
|
log := db.DBmap{
|
|
Key: models.LogDb,
|
|
URL: skdg.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
|
|
}
|
|
|
|
func httpServerStart() {
|
|
common.Go(func() {
|
|
//开始http
|
|
port := skdg.Conf.Base.Port
|
|
httpServer = &http.Server{
|
|
Addr: fmt.Sprintf(":%d", port),
|
|
}
|
|
log.Info("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...")
|
|
})
|
|
}
|