181 lines
4.0 KiB
Go
181 lines
4.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"go-common/library/conf/env"
|
|
"go-common/library/queue/databus"
|
|
"reflect"
|
|
"time"
|
|
|
|
"go-common/app/job/bbq/video/conf"
|
|
"go-common/app/job/bbq/video/dao"
|
|
"go-common/library/log"
|
|
|
|
topic "go-common/app/service/bbq/topic/api"
|
|
|
|
"github.com/robfig/cron"
|
|
)
|
|
|
|
var (
|
|
srvName string
|
|
)
|
|
|
|
// Service struct
|
|
type Service struct {
|
|
c *conf.Config
|
|
dao *dao.Dao
|
|
searchChan chan string
|
|
videoSub *databus.Databus
|
|
videoRep *databus.Databus
|
|
bvcSub *databus.Databus
|
|
scheFunc map[string]func()
|
|
topicClient topic.TopicClient
|
|
}
|
|
|
|
func init() {
|
|
flag.StringVar(&srvName, "srv", "", "service name")
|
|
}
|
|
|
|
func newTopicClient() topic.TopicClient {
|
|
topicClient, err := topic.NewClient(nil)
|
|
if err != nil {
|
|
log.Errorw(context.Background(), "log", "get topic client fail")
|
|
panic(err)
|
|
}
|
|
return topicClient
|
|
}
|
|
|
|
// New init
|
|
func New(c *conf.Config) (s *Service) {
|
|
s = &Service{
|
|
c: c,
|
|
dao: dao.New(c),
|
|
searchChan: make(chan string, 1),
|
|
topicClient: newTopicClient(),
|
|
}
|
|
s.scheFunc = s.initScheduleFunc()
|
|
if srvName != "" {
|
|
switch srvName {
|
|
case "test":
|
|
s.Test()
|
|
case "syncsv2es":
|
|
s.taskSyncVideo2ES()
|
|
case "syncuserdmg":
|
|
s.taskSyncUserDmg()
|
|
case "rminvalides":
|
|
s.taskRmInvalidES()
|
|
case "regcmtall":
|
|
s.AutoRegAll(context.Background())
|
|
case "syncuserbase":
|
|
s.taskSyncUsrBaseFromVideo(context.Background())
|
|
case "syncuserbasic":
|
|
s.taskSyncPegasusUserBasic()
|
|
case "syncsearchvideo":
|
|
s.SyncVideo2Search()
|
|
case "syncsearchuser":
|
|
s.SyncUser2Search()
|
|
case "syncsearchsug":
|
|
s.SyncSug2Search()
|
|
case "upubface":
|
|
s.UpdateUsrBaseFace()
|
|
case "SysMsgTask":
|
|
s.SysMsgTask()
|
|
case "UserProfile":
|
|
s.UserProfileUpdate()
|
|
case "pushbvc":
|
|
s.commitCID()
|
|
case "cmscheckback":
|
|
s.TransToCheckBack()
|
|
}
|
|
return s
|
|
}
|
|
//初始化databus
|
|
s.initDatabus()
|
|
//启动相关rountine
|
|
s.launchCor()
|
|
//定时任务启动
|
|
if env.DeployEnv == env.DeployEnvProd {
|
|
s.runScheduler(c.Scheduler)
|
|
}
|
|
return s
|
|
}
|
|
|
|
//runScheduler .1
|
|
func (s *Service) runScheduler(c *conf.Scheduler) {
|
|
sche := cron.New()
|
|
|
|
t := reflect.TypeOf(*c)
|
|
v := reflect.ValueOf(*c)
|
|
for i := 0; i < v.NumField(); i++ {
|
|
//排除配置为空的任务
|
|
if job := v.Field(i).String(); job != "" {
|
|
fn := t.Field(i).Name
|
|
//从映射集中取出对应函数
|
|
if f, ok := s.scheFunc[fn]; !ok {
|
|
fmt.Printf("skip[%s]\n", fn)
|
|
continue
|
|
} else {
|
|
fmt.Printf("run[%s]\n", fn)
|
|
if err := sche.AddFunc(job, f); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sche.Start()
|
|
}
|
|
|
|
//Test 测试
|
|
func (s *Service) Test() {
|
|
log.Info("HeartBeat:%s", time.Now())
|
|
}
|
|
|
|
// Ping Service
|
|
func (s *Service) Ping(c context.Context) (err error) {
|
|
return s.dao.Ping(c)
|
|
}
|
|
|
|
// Close Service
|
|
func (s *Service) Close() {
|
|
s.dao.Close()
|
|
}
|
|
|
|
// initScheduleFunc 任务结构与函数映射关系
|
|
// map {key: conf.Scheduler结构体中字段名 value: 对应执行的函数}
|
|
func (s *Service) initScheduleFunc() map[string]func() {
|
|
return map[string]func(){
|
|
"Test": s.Test,
|
|
"CheckVideo2ES": s.taskSyncVideo2ES,
|
|
"SyncUserDmg": s.taskSyncUserDmg,
|
|
"SyncUpUserDmg": s.taskSyncUpUserDmg,
|
|
"CheckVideo": s.taskCheckVideo,
|
|
"CheckVideoSt": s.taskCheckVideoStatistics,
|
|
"CheckVideoStHv": s.taskCheckVideoStatisticsHive,
|
|
"CheckVideoTag": s.taskCheckVideoTag,
|
|
"CheckTag": s.taskCheckTag,
|
|
"SyncUsrSta": s.taskSyncUsrStaFromHive,
|
|
"SysMsgTask": s.SysMsgTask,
|
|
"UserProfileBbq": s.UserProfileUpdate,
|
|
"TransToReview": s.TransToReview,
|
|
"TransToCheckBack": s.TransToCheckBack,
|
|
}
|
|
}
|
|
|
|
func (s *Service) launchCor() {
|
|
time.Sleep(time.Second * 3)
|
|
if env.DeployEnv == env.DeployEnvProd {
|
|
go s.SyncSearch()
|
|
}
|
|
go s.videoBinlogSub()
|
|
go s.videoRepositoryBinlogSub()
|
|
go s.BvcTransSub()
|
|
}
|
|
|
|
func (s *Service) initDatabus() {
|
|
s.videoSub = databus.New(conf.Conf.Databus["videosub"])
|
|
s.videoRep = databus.New(conf.Conf.Databus["videorep"])
|
|
s.bvcSub = databus.New(conf.Conf.Databus["bvcsub"])
|
|
}
|