137 lines
2.7 KiB
Go
137 lines
2.7 KiB
Go
package service
|
||
|
||
import (
|
||
"context"
|
||
"sync"
|
||
"time"
|
||
|
||
"go-common/app/admin/main/videoup-task/conf"
|
||
"go-common/app/admin/main/videoup-task/dao"
|
||
"go-common/app/admin/main/videoup-task/model"
|
||
account "go-common/app/service/main/account/api"
|
||
upsrpc "go-common/app/service/main/up/api/v1"
|
||
"go-common/library/database/elastic"
|
||
"go-common/library/log"
|
||
bm "go-common/library/net/http/blademaster"
|
||
)
|
||
|
||
// MemberCache .
|
||
type MemberCache struct {
|
||
sync.RWMutex
|
||
uptime time.Time
|
||
ms map[int64]*model.MemberStat
|
||
}
|
||
|
||
//Service service
|
||
type Service struct {
|
||
c *conf.Config
|
||
dao *dao.Dao
|
||
es *elastic.Elastic
|
||
|
||
httpClient *bm.Client
|
||
memberCache *MemberCache
|
||
// cache
|
||
typeCache map[int16]*model.Type
|
||
reviewCache *model.ReviewCache
|
||
twConCache map[int8]map[int64]*model.WCItem
|
||
upperCache map[int8]map[int64]struct{}
|
||
typeCache2 map[int16][]int64 // 记录每个一级分区下的二级分区
|
||
|
||
//grpc
|
||
accRPC account.AccountClient
|
||
upsRPC upsrpc.UpClient
|
||
}
|
||
|
||
//New new service
|
||
func New(conf *conf.Config) (svr *Service) {
|
||
svr = &Service{
|
||
c: conf,
|
||
dao: dao.New(conf),
|
||
es: elastic.NewElastic(nil),
|
||
|
||
httpClient: bm.NewClient(conf.HTTPClient),
|
||
memberCache: &MemberCache{},
|
||
// cache
|
||
reviewCache: model.NewRC(),
|
||
}
|
||
var err error
|
||
if svr.accRPC, err = account.NewClient(conf.GRPC.AccRPC); err != nil {
|
||
panic(err)
|
||
}
|
||
if svr.upsRPC, err = upsrpc.NewClient(conf.GRPC.UpsRPC); err != nil {
|
||
panic(err)
|
||
}
|
||
|
||
go svr.memberproc()
|
||
svr.loadConf()
|
||
go svr.cacheproc()
|
||
go svr.delProc()
|
||
svr.loadRC()
|
||
go svr.loadRCproc()
|
||
|
||
return
|
||
}
|
||
|
||
//Close close
|
||
func (s *Service) Close() {
|
||
s.dao.Close()
|
||
}
|
||
|
||
//Ping ping
|
||
func (s *Service) Ping(ctx context.Context) (err error) {
|
||
err = s.dao.Ping(ctx)
|
||
return
|
||
}
|
||
|
||
func (s *Service) loadConf() {
|
||
var (
|
||
err error
|
||
tpm map[int16]*model.Type
|
||
tpm2 map[int16][]int64
|
||
twConCache map[int8]map[int64]*model.WCItem
|
||
upm map[int8]map[int64]struct{}
|
||
)
|
||
if tpm, err = s.dao.TypeMapping(context.TODO()); err != nil {
|
||
log.Error("s.dao.TypeMapping error(%v)", err)
|
||
return
|
||
}
|
||
s.typeCache = tpm
|
||
|
||
tpm2 = make(map[int16][]int64)
|
||
for id, tmod := range tpm {
|
||
if tmod.PID == 0 {
|
||
if _, ok := tpm2[id]; !ok {
|
||
tpm2[id] = []int64{}
|
||
}
|
||
continue
|
||
}
|
||
arrid, ok := tpm2[tmod.PID]
|
||
if !ok {
|
||
tpm2[tmod.PID] = []int64{int64(id)}
|
||
} else {
|
||
tpm2[tmod.PID] = append(arrid, int64(id))
|
||
}
|
||
}
|
||
s.typeCache2 = tpm2
|
||
|
||
if twConCache, err = s.weightConf(context.TODO()); err != nil {
|
||
log.Error("s.weightConf error(%v)", err)
|
||
return
|
||
}
|
||
s.twConCache = twConCache
|
||
|
||
upm, err = s.upSpecial(context.TODO())
|
||
if err != nil {
|
||
log.Error("s.upSpecial error(%v)", err)
|
||
return
|
||
}
|
||
s.upperCache = upm
|
||
}
|
||
|
||
func (s *Service) cacheproc() {
|
||
for {
|
||
time.Sleep(3 * time.Minute)
|
||
s.loadConf()
|
||
}
|
||
}
|