123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- package dao
- import (
- "context"
- xhttp "net/http"
- "runtime"
- "time"
- "go-common/app/interface/openplatform/article/conf"
- "go-common/library/cache"
- "go-common/library/cache/memcache"
- xredis "go-common/library/cache/redis"
- "go-common/library/database/sql"
- "go-common/library/log"
- bm "go-common/library/net/http/blademaster"
- "go-common/library/queue/databus"
- "go-common/library/stat/prom"
- hbase "go-common/library/database/hbase.v2"
- )
- var (
- errorsCount = prom.BusinessErrCount
- infosCount = prom.BusinessInfoCount
- cachedCount = prom.CacheHit
- missedCount = prom.CacheMiss
- )
- // PromError prom error
- func PromError(name string) {
- errorsCount.Incr(name)
- }
- // promErrorCheck check prom error
- func promErrorCheck(err error) {
- if err != nil {
- pc, _, _, _ := runtime.Caller(1)
- name := "d." + runtime.FuncForPC(pc).Name()
- PromError(name)
- log.Error("%s err: %+v", name, err)
- }
- }
- // PromInfo add prom info
- func PromInfo(name string) {
- infosCount.Incr(name)
- }
- // Dao dao
- type Dao struct {
- // config
- c *conf.Config
- // db
- articleDB *sql.DB
- // http client
- httpClient *bm.Client
- messageHTTPClient *bm.Client
- bfsClient *xhttp.Client
- // memcache
- mc *memcache.Pool
- //redis
- redis *xredis.Pool
- mcArticleExpire int32
- mcStatsExpire int32
- mcLikeExpire int32
- mcCardsExpire int32
- mcListArtsExpire int32
- mcListExpire int32
- mcArtListExpire int32
- mcUpListsExpire int32
- mcSubExp int32
- mcListReadExpire int32
- mcHotspotExpire int32
- mcAuthorExpire int32
- mcArticlesIDExpire int32
- mcArticleTagExpire int32
- mcUpStatDailyExpire int32
- redisUpperExpire int32
- redisSortExpire int64
- redisSortTTL int64
- redisArtLikesExpire int32
- redisRankExpire int64
- redisRankTTL int64
- redisMaxLikeExpire int64
- redisHotspotExpire int64
- redisReadPingExpire int64
- redisReadSetExpire int64
- // stmt
- categoriesStmt *sql.Stmt
- authorsStmt *sql.Stmt
- applyStmt *sql.Stmt
- addAuthorStmt *sql.Stmt
- applyCountStmt *sql.Stmt
- articleMetaStmt *sql.Stmt
- allArticleMetaStmt *sql.Stmt
- articleContentStmt *sql.Stmt
- articleUpperCountStmt *sql.Stmt
- updateArticleStateStmt *sql.Stmt
- upPassedStmt *sql.Stmt
- recommendCategoryStmt *sql.Stmt
- delRecommendStmt *sql.Stmt
- allRecommendStmt *sql.Stmt
- allRecommendCountStmt *sql.Stmt
- newestArtsMetaStmt *sql.Stmt
- upperArtCntCreationStmt *sql.Stmt
- articleMetaCreationStmt *sql.Stmt
- articleUpCntTodayStmt *sql.Stmt
- addComplaintStmt *sql.Stmt
- complaintExistStmt *sql.Stmt
- complaintProtectStmt *sql.Stmt
- addComplaintCountStmt *sql.Stmt
- settingsStmt *sql.Stmt
- authorStmt *sql.Stmt
- noticeStmt *sql.Stmt
- userNoticeStmt *sql.Stmt
- updateUserNoticeStmt *sql.Stmt
- creativeListsStmt *sql.Stmt
- creativeListAddStmt *sql.Stmt
- creativeListDelStmt *sql.Stmt
- creativeListUpdateStmt *sql.Stmt
- creativeListUpdateTimeStmt *sql.Stmt
- creativeListArticlesStmt *sql.Stmt
- listStmt *sql.Stmt
- creativeListDelAllArticleStmt *sql.Stmt
- creativeListAddArticleStmt *sql.Stmt
- creativeListDelArticleStmt *sql.Stmt
- allListStmt *sql.Stmt
- hotspotsStmt *sql.Stmt
- searchArtsStmt *sql.Stmt
- addCheatStmt *sql.Stmt
- delCheatStmt *sql.Stmt
- // databus
- statDbus *databus.Databus
- // inteval
- UpdateRecommendsInterval int64
- UpdateBannersInterval int64
- // hbase
- hbase *hbase.Client
- //cache
- cache *cache.Cache
- }
- // New dao new
- func New(c *conf.Config) (d *Dao) {
- d = &Dao{
- // config
- c: c,
- // http client
- httpClient: bm.NewClient(c.HTTPClient),
- messageHTTPClient: bm.NewClient(c.MessageHTTPClient),
- bfsClient: &xhttp.Client{Timeout: time.Duration(c.BFS.Timeout)},
- // mc
- mc: memcache.NewPool(c.Memcache.Config),
- mcArticleExpire: int32(time.Duration(c.Memcache.ArticleExpire) / time.Second),
- mcStatsExpire: int32(time.Duration(c.Memcache.StatsExpire) / time.Second),
- mcLikeExpire: int32(time.Duration(c.Memcache.LikeExpire) / time.Second),
- mcCardsExpire: int32(time.Duration(c.Memcache.CardsExpire) / time.Second),
- mcSubExp: int32(time.Duration(c.Memcache.SubmitExpire) / time.Second),
- mcListArtsExpire: int32(time.Duration(c.Memcache.ListArtsExpire) / time.Second),
- mcListExpire: int32(time.Duration(c.Memcache.ListExpire) / time.Second),
- mcArtListExpire: int32(time.Duration(c.Memcache.ArtListExpire) / time.Second),
- mcUpListsExpire: int32(time.Duration(c.Memcache.UpListsExpire) / time.Second),
- mcListReadExpire: int32(time.Duration(c.Memcache.ListReadExpire) / time.Second),
- mcHotspotExpire: int32(time.Duration(c.Memcache.HotspotExpire) / time.Second),
- mcAuthorExpire: int32(time.Duration(c.Memcache.AuthorExpire) / time.Second),
- mcArticlesIDExpire: int32(time.Duration(c.Memcache.ArticlesIDExpire) / time.Second),
- mcArticleTagExpire: int32(time.Duration(c.Memcache.ArticleTagExpire) / time.Second),
- mcUpStatDailyExpire: int32(time.Duration(c.Memcache.UpStatDailyExpire) / time.Second),
- //redis
- redis: xredis.NewPool(c.Redis),
- redisUpperExpire: int32(time.Duration(c.Article.ExpireUpper) / time.Second),
- redisSortExpire: int64(time.Duration(c.Article.ExpireSortArts) / time.Second),
- redisSortTTL: int64(time.Duration(c.Article.TTLSortArts) / time.Second),
- redisArtLikesExpire: int32(time.Duration(c.Article.ExpireArtLikes) / time.Second),
- redisRankExpire: int64(time.Duration(c.Article.ExpireRank) / time.Second),
- redisRankTTL: int64(time.Duration(c.Article.TTLRank) / time.Second),
- redisMaxLikeExpire: int64(time.Duration(c.Article.ExpireMaxLike) / time.Second),
- redisHotspotExpire: int64(time.Duration(c.Article.ExpireHotspot) / time.Second),
- redisReadPingExpire: int64(time.Duration(c.Article.ExpireReadPing) / time.Second),
- redisReadSetExpire: int64(time.Duration(c.Article.ExpireReadSet) / time.Second),
- // db
- articleDB: sql.NewMySQL(c.MySQL.Article),
- // prom
- statDbus: databus.New(c.StatDatabus),
- UpdateRecommendsInterval: int64(time.Duration(c.Article.UpdateRecommendsInteval) / time.Second),
- UpdateBannersInterval: int64(time.Duration(c.Article.UpdateBannersInteval) / time.Second),
- // hbase
- hbase: hbase.NewClient(c.HBase),
- cache: cache.New(1, 1024),
- }
- d.categoriesStmt = d.articleDB.Prepared(_categoriesSQL)
- d.authorsStmt = d.articleDB.Prepared(_authorsSQL)
- d.applyStmt = d.articleDB.Prepared(_applySQL)
- d.addAuthorStmt = d.articleDB.Prepared(_addAuthorSQL)
- d.applyCountStmt = d.articleDB.Prepared(_applyCountSQL)
- d.articleMetaStmt = d.articleDB.Prepared(_articleMetaSQL)
- d.allArticleMetaStmt = d.articleDB.Prepared(_allArticleMetaSQL)
- d.articleContentStmt = d.articleDB.Prepared(_articleContentSQL)
- d.updateArticleStateStmt = d.articleDB.Prepared(_updateArticleStateSQL)
- d.upPassedStmt = d.articleDB.Prepared(_upperPassedSQL)
- d.recommendCategoryStmt = d.articleDB.Prepared(_recommendCategorySQL)
- d.allRecommendStmt = d.articleDB.Prepared(_allRecommendSQL)
- d.allRecommendCountStmt = d.articleDB.Prepared(_allRecommendCountSQL)
- d.delRecommendStmt = d.articleDB.Prepared(_deleteRecommendSQL)
- d.newestArtsMetaStmt = d.articleDB.Prepared(_newestArtsMetaSQL)
- d.upperArtCntCreationStmt = d.articleDB.Prepared(_upperArticleCountCreationSQL)
- d.articleUpperCountStmt = d.articleDB.Prepared(_articleUpperCountSQL)
- d.articleMetaCreationStmt = d.articleDB.Prepared(_articleMetaCreationSQL)
- d.articleUpCntTodayStmt = d.articleDB.Prepared(_articleUpCntTodaySQL)
- d.addComplaintStmt = d.articleDB.Prepared(_addComplaintsSQL)
- d.complaintExistStmt = d.articleDB.Prepared(_complaintExistSQL)
- d.complaintProtectStmt = d.articleDB.Prepared(_complaintProtectSQL)
- d.addComplaintCountStmt = d.articleDB.Prepared(_addComplaintCountSQL)
- d.settingsStmt = d.articleDB.Prepared(_settingsSQL)
- d.authorStmt = d.articleDB.Prepared(_authorSQL)
- d.noticeStmt = d.articleDB.Prepared(_noticeSQL)
- d.userNoticeStmt = d.articleDB.Prepared(_userNoticeSQL)
- d.updateUserNoticeStmt = d.articleDB.Prepared(_updateUserNoticeSQL)
- d.creativeListsStmt = d.articleDB.Prepared(_creativeListsSQL)
- d.creativeListAddStmt = d.articleDB.Prepared(_creativeListAddSQL)
- d.creativeListDelStmt = d.articleDB.Prepared(_creativeListDelSQL)
- d.creativeListUpdateStmt = d.articleDB.Prepared(_creativeListUpdateSQL)
- d.creativeListUpdateTimeStmt = d.articleDB.Prepared(_creativeListUpdateTimeSQL)
- d.creativeListArticlesStmt = d.articleDB.Prepared(_creativeListArticlesSQL)
- d.creativeListDelAllArticleStmt = d.articleDB.Prepared(_creativeListDelAllArticleSQL)
- d.creativeListAddArticleStmt = d.articleDB.Prepared(_creativeListAddArticleSQL)
- d.listStmt = d.articleDB.Prepared(_listSQL)
- d.creativeListDelArticleStmt = d.articleDB.Prepared(_creativeListDelArticleSQL)
- d.allListStmt = d.articleDB.Prepared(_allListsSQL)
- d.hotspotsStmt = d.articleDB.Prepared(_hotspotsSQL)
- d.searchArtsStmt = d.articleDB.Prepared(_searchArticles)
- d.addCheatStmt = d.articleDB.Prepared(_addCheatSQL)
- d.delCheatStmt = d.articleDB.Prepared(_delCheatSQL)
- return d
- }
- // BeginTran begin transaction.
- func (d *Dao) BeginTran(c context.Context) (*sql.Tx, error) {
- return d.articleDB.Begin(c)
- }
- // Ping check connection success.
- func (d *Dao) Ping(c context.Context) (err error) {
- if err = d.pingMC(c); err != nil {
- PromError("mc:Ping")
- log.Error("d.pingMC error(%+v)", err)
- return
- }
- if err = d.pingRedis(c); err != nil {
- PromError("redis:Ping")
- log.Error("d.pingRedis error(%+v)", err)
- return
- }
- if err = d.articleDB.Ping(c); err != nil {
- PromError("db:Ping")
- log.Error("d.articleDB.Ping error(%+v)", err)
- }
- return
- }
- // Close close resource.
- func (d *Dao) Close() {
- d.articleDB.Close()
- d.mc.Close()
- d.redis.Close()
- }
|