Files
huangguo_server/skd/main.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

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...")
})
}