go-common/app/admin/main/videoup-task/service/service.go
2019-04-22 18:49:16 +08:00

137 lines
2.7 KiB
Go
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
}
}