123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- package like
- import (
- "context"
- "time"
- "go-common/app/interface/main/activity/conf"
- "go-common/library/cache/memcache"
- "go-common/library/cache/redis"
- "go-common/library/database/elastic"
- xsql "go-common/library/database/sql"
- "go-common/library/log"
- httpx "go-common/library/net/http/blademaster"
- "go-common/library/stat/prom"
- "go-common/library/sync/pipeline/fanout"
- )
- const (
- _lotteryIndex = "/matsuri/api/mission"
- _lotteryAddTimes = "/matsuri/api/add/times"
- _likeItemURI = "/activity/likes/list/%d"
- _sourceItemURI = "/activity/web/view/data/%d"
- _tagsURI = "/x/internal/tag/archive/multi/tags"
- )
- // Dao struct
- type Dao struct {
- db *xsql.DB
- subjectStmt *xsql.Stmt
- voteLogStmt *xsql.Stmt
- mc *memcache.Pool
- mcLikeExpire int32
- mcLikeIPExpire int32
- mcPerpetualExpire int32
- mcItemExpire int32
- mcSubStatExpire int32
- mcViewRankExpire int32
- mcSourceItemExpire int32
- mcProtocolExpire int32
- redis *redis.Pool
- redisExpire int32
- matchExpire int32
- followExpire int32
- hotDotExpire int32
- randomExpire int32
- lotteryIndexURL string
- addLotteryTimesURL string
- likeItemURL string
- sourceItemURL string
- tagURL string
- client *httpx.Client
- cacheCh chan func()
- cache *fanout.Fanout
- es *elastic.Elastic
- }
- // New init
- func New(c *conf.Config) (dao *Dao) {
- dao = &Dao{
- db: xsql.NewMySQL(c.MySQL.Like),
- mc: memcache.NewPool(c.Memcache.Like),
- mcLikeExpire: int32(time.Duration(c.Memcache.LikeExpire) / time.Second),
- mcLikeIPExpire: int32(time.Duration(c.Memcache.LikeIPExpire) / time.Second),
- mcPerpetualExpire: int32(time.Duration(c.Memcache.PerpetualExpire) / time.Second),
- mcItemExpire: int32(time.Duration(c.Memcache.ItemExpire) / time.Second),
- mcSubStatExpire: int32(time.Duration(c.Memcache.SubStatExpire) / time.Second),
- mcViewRankExpire: int32(time.Duration(c.Memcache.ViewRankExpire) / time.Second),
- mcSourceItemExpire: int32(time.Duration(c.Memcache.SourceItemExpire) / time.Second),
- mcProtocolExpire: int32(time.Duration(c.Memcache.ProtocolExpire) / time.Second),
- redis: redis.NewPool(c.Redis.Config),
- cacheCh: make(chan func(), 1024),
- cache: fanout.New("cache", fanout.Worker(1), fanout.Buffer(1024)),
- redisExpire: int32(time.Duration(c.Redis.Expire) / time.Second),
- matchExpire: int32(time.Duration(c.Redis.MatchExpire) / time.Second),
- followExpire: int32(time.Duration(c.Redis.FollowExpire) / time.Second),
- hotDotExpire: int32(time.Duration(c.Redis.HotDotExpire) / time.Second),
- randomExpire: int32(time.Duration(c.Redis.RandomExpire) / time.Second),
- lotteryIndexURL: c.Host.Activity + _lotteryIndex,
- addLotteryTimesURL: c.Host.Activity + _lotteryAddTimes,
- likeItemURL: c.Host.Activity + _likeItemURI,
- sourceItemURL: c.Host.Activity + _sourceItemURI,
- tagURL: c.Host.APICo + _tagsURI,
- client: httpx.NewClient(c.HTTPClient),
- es: elastic.NewElastic(c.Elastic),
- }
- dao.subjectStmt = dao.db.Prepared(_selSubjectSQL)
- dao.voteLogStmt = dao.db.Prepared(_votLogSQL)
- go dao.cacheproc()
- return
- }
- // CVoteLog chan Vote Log
- func (dao *Dao) CVoteLog(c context.Context, sid int64, aid int64, mid int64, stage int64, vote int64) {
- dao.cacheCh <- func() {
- dao.VoteLog(c, sid, aid, mid, stage, vote)
- }
- }
- // Close Dao
- func (dao *Dao) Close() {
- if dao.db != nil {
- dao.db.Close()
- }
- if dao.redis != nil {
- dao.redis.Close()
- }
- if dao.mc != nil {
- dao.mc.Close()
- }
- close(dao.cacheCh)
- }
- // Ping Dao
- func (dao *Dao) Ping(c context.Context) error {
- return dao.db.Ping(c)
- }
- func (dao *Dao) cacheproc() {
- for {
- f, ok := <-dao.cacheCh
- if !ok {
- return
- }
- f()
- }
- }
- // PromError stat and log.
- func PromError(name string, format string, args ...interface{}) {
- prom.BusinessErrCount.Incr(name)
- log.Error(format, args...)
- }
|