123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package service
- import (
- "context"
- plamdl "go-common/app/interface/main/playlist/model"
- "go-common/app/job/main/playlist/conf"
- "go-common/app/job/main/playlist/dao"
- "go-common/app/job/main/playlist/model"
- "go-common/library/log"
- )
- func (s *Service) viewproc(i int64) {
- defer s.waiter.Done()
- var (
- c = context.TODO()
- ch = s.statCh[i]
- )
- for {
- sm, ok := <-ch
- if !ok {
- log.Warn("statproc(%d) quit", i)
- return
- }
- // filter view count
- if conf.Conf.Job.InterceptOn && sm.Count != nil && *sm.Count > 0 {
- if s.intercept(sm) {
- log.Info("intercept view count (pid:%d, aid:%d, ip:%s)", sm.ID, sm.Aid, sm.IP)
- dao.PromInfo("stat:访问计数拦截")
- continue
- }
- }
- s.upStat(c, sm, model.ViewCountType)
- }
- }
- func (s *Service) upStat(c context.Context, sm *model.StatM, tp string) {
- // update cache
- s.updateCache(c, sm, tp)
- // update db
- s.updateDB(c, sm, tp)
- }
- // updateDB update stat in db.
- func (s *Service) updateDB(c context.Context, stat *model.StatM, tp string) (err error) {
- if _, err = s.dao.Update(context.TODO(), stat, tp); err != nil {
- return
- }
- log.Info("update db success "+tp+" pid(%d) count(%d) ", stat.ID, *stat.Count)
- dao.PromInfo("stat:更新计数DB")
- return
- }
- // updateCache update stat in cache
- func (s *Service) updateCache(c context.Context, sm *model.StatM, tp string) (err error) {
- var (
- mid int64
- fid int64
- st *plamdl.PlStat
- stat *plamdl.ArgStats
- )
- if st, err = s.dao.Stat(c, sm.ID); err != nil {
- log.Error("s.dao.Stat(%d) error(%v)", sm.ID, err)
- return
- }
- switch tp {
- case model.ViewCountType:
- stat = &plamdl.ArgStats{PlStat: &plamdl.PlStat{
- ID: sm.ID,
- Mid: st.Mid,
- Fid: st.Fid,
- View: *sm.Count,
- Reply: st.Reply,
- Fav: st.Fav,
- Share: st.Share,
- MTime: st.MTime,
- }}
- case model.FavCountType:
- stat = &plamdl.ArgStats{PlStat: &plamdl.PlStat{
- ID: sm.ID,
- Mid: st.Mid,
- Fid: st.Fid,
- View: st.View,
- Reply: st.Reply,
- Fav: *sm.Count,
- Share: st.Share,
- MTime: st.MTime,
- }}
- case model.ReplyCountType:
- stat = &plamdl.ArgStats{PlStat: &plamdl.PlStat{
- ID: sm.ID,
- Mid: st.Mid,
- Fid: st.Fid,
- View: st.View,
- Reply: *sm.Count,
- Fav: st.Fav,
- Share: st.Share,
- MTime: st.MTime,
- }}
- case model.ShareCountType:
- stat = &plamdl.ArgStats{PlStat: &plamdl.PlStat{
- ID: sm.ID,
- Mid: st.Mid,
- Fid: st.Fid,
- View: st.View,
- Reply: st.Reply,
- Fav: st.Fav,
- Share: *sm.Count,
- MTime: st.MTime,
- }}
- }
- if err = s.playlistRPC.SetStat(c, stat); err != nil {
- dao.PromError("stat:更新计数缓存",
- "s.playlistRPC.SetStat "+tp+" pid(%d) fid(%d) mid(%d) view(%d) favorite(%d) reply(%d) share(%d) error(%v)",
- sm.ID, fid, mid, *sm.Count, st.Fav, st.Reply, st.Share, err)
- }
- log.Info("update cache success "+tp+" pid(%d) aid(%d) fid(%d) mid(%d) view(%d) favorite(%d) reply(%d) share(%d)",
- sm.ID, sm.Aid, fid, mid, *sm.Count, st.Fav, st.Reply, st.Share)
- dao.PromInfo("stat:更新计数缓存")
- return
- }
- // intercept intercepts illegal views.
- func (s *Service) intercept(stat *model.StatM) bool {
- return s.dao.Intercept(context.TODO(), stat.ID, stat.Aid, stat.IP)
- }
|