bilibili-backup/app/interface/main/app-intl/service/feed/service.go
2019-04-22 02:59:20 +00:00

118 lines
2.5 KiB
Go

package feed
import (
"time"
"go-common/app/interface/main/app-card/model/card/ai"
"go-common/app/interface/main/app-card/model/card/operate"
"go-common/app/interface/main/app-card/model/card/rank"
"go-common/app/interface/main/app-intl/conf"
accdao "go-common/app/interface/main/app-intl/dao/account"
arcdao "go-common/app/interface/main/app-intl/dao/archive"
blkdao "go-common/app/interface/main/app-intl/dao/black"
carddao "go-common/app/interface/main/app-intl/dao/card"
locdao "go-common/app/interface/main/app-intl/dao/location"
rankdao "go-common/app/interface/main/app-intl/dao/rank"
rcmdao "go-common/app/interface/main/app-intl/dao/recommend"
reldao "go-common/app/interface/main/app-intl/dao/relation"
tagdao "go-common/app/interface/main/app-intl/dao/tag"
"go-common/library/log"
"go-common/library/stat/prom"
)
// Service is show service.
type Service struct {
c *conf.Config
pHit *prom.Prom
pMiss *prom.Prom
// dao
rcmd *rcmdao.Dao
tg *tagdao.Dao
blk *blkdao.Dao
rank *rankdao.Dao
card *carddao.Dao
// rpc
arc *arcdao.Dao
acc *accdao.Dao
rel *reldao.Dao
loc *locdao.Dao
// tick
tick time.Duration
// black cache
blackCache map[int64]struct{} // black aids
// ai cache
rcmdCache []*ai.Item
// rank cache
rankCache []*rank.Rank
// follow cache
followCache map[int64]*operate.Follow
// group cache
groupCache map[int64]int
// cache
cacheCh chan func()
// infoc
logCh chan interface{}
}
// New new a show service.
func New(c *conf.Config) (s *Service) {
s = &Service{
c: c,
pHit: prom.CacheHit,
pMiss: prom.CacheMiss,
// dao
rcmd: rcmdao.New(c),
blk: blkdao.New(c),
rank: rankdao.New(c),
tg: tagdao.New(c),
card: carddao.New(c),
// rpc
arc: arcdao.New(c),
rel: reldao.New(c),
acc: accdao.New(c),
loc: locdao.New(c),
// tick
tick: time.Duration(c.Tick),
// group cache
groupCache: map[int64]int{},
// cache
cacheCh: make(chan func(), 1024),
// infoc
logCh: make(chan interface{}, 1024),
}
s.loadBlackCache()
s.loadRcmdCache()
s.loadRankCache()
s.loadUpCardCache()
s.loadGroupCache()
go s.cacheproc()
go s.blackproc()
go s.rcmdproc()
go s.rankproc()
go s.upCardproc()
go s.groupproc()
go s.infocproc()
return
}
// addCache is.
func (s *Service) addCache(f func()) {
select {
case s.cacheCh <- f:
default:
log.Warn("cacheproc chan full")
}
}
// cacheproc is.
func (s *Service) cacheproc() {
for {
f, ok := <-s.cacheCh
if !ok {
log.Warn("cache proc exit")
return
}
f()
}
}