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