223 lines
7.7 KiB
Go
223 lines
7.7 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
xhttp "net/http"
|
|
"time"
|
|
|
|
"go-common/app/interface/main/web/conf"
|
|
"go-common/library/cache/redis"
|
|
"go-common/library/log"
|
|
bm "go-common/library/net/http/blademaster"
|
|
"go-common/library/stat/prom"
|
|
)
|
|
|
|
const (
|
|
_rankURL = "/data/rank/"
|
|
_feedbackURL = "/x/internal/feedback/ugc/add"
|
|
_spaceTopPhotoURL = "/api/member/getTopPhoto"
|
|
_coinAddURL = "/x/coin/add"
|
|
_coinExpURL = "/x/coin/today/exp"
|
|
_elecShowURL = "/api/v2/rank/query/av"
|
|
_arcReportURL = "/videoup/archive/report"
|
|
_arcAppealURL = "/x/internal/workflow/appeal/add"
|
|
_appealTagsURL = "/x/internal/workflow/tag/list"
|
|
_relatedURL = "/recsys/related"
|
|
_onlineURL = "/x/internal/chat/server/ol"
|
|
_liveOnlineURL = "/room/v1/Online/get_total_online"
|
|
_helpListURL = "/kb/getQuestionTypeListByParentIdBilibili/4"
|
|
_helpSearchURL = "/kb/searchInerDocListBilibili/4"
|
|
_onlineListURL = "/x/internal/chat/num/top/aid"
|
|
_searchURL = "/main/search"
|
|
_searchRecURL = "/search/recommend"
|
|
_searchDefaultURL = "/query/recommend"
|
|
_searchUpRecURL = "/main/recommend"
|
|
_searchEggURI = "/x/admin/feed/eggSearchWeb"
|
|
_payWalletURL = "/wallet-int/wallet/getUserWalletInfo"
|
|
_payWalletOldURL = "/wallet/api/v1/info"
|
|
_special = "/x/internal/uper/special"
|
|
)
|
|
|
|
// Dao dao
|
|
type Dao struct {
|
|
// config
|
|
c *conf.Config
|
|
// http client
|
|
httpR *bm.Client
|
|
httpW *bm.Client
|
|
httpBigData *bm.Client
|
|
httpHelp *bm.Client
|
|
httpSearch *bm.Client
|
|
httpPay *bm.Client
|
|
bfsClient *xhttp.Client
|
|
// redis
|
|
redis *redis.Pool
|
|
redisBak *redis.Pool
|
|
redisNlExpire int32
|
|
redisNlBakExpire int32
|
|
redisRkExpire int32
|
|
redisRkBakExpire int32
|
|
redisDynamicBakExpire int32
|
|
redisArchiveBakExpire int32
|
|
redisTagBakExpire int32
|
|
redisCardBakExpire int32
|
|
redisRcExpire int32
|
|
redisRcBakExpire int32
|
|
redisArtBakExpire int32
|
|
redisIxIconExpire int32
|
|
redisIxIconBakExpire int32
|
|
redisHelpBakExpire int32
|
|
redisOlListBakExpire int32
|
|
redisWxHotExpire int32
|
|
redisWxHotBakExpire int32
|
|
redisAppealLimitExpire int32
|
|
// bigdata url
|
|
rankURL string
|
|
rankIndexURL string
|
|
rankRegionURL string
|
|
rankRecURL string
|
|
rankTagURL string
|
|
feedbackURL string
|
|
spaceTopPhotoURL string
|
|
coinAddURL string
|
|
coinExpURL string
|
|
customURL string
|
|
elecShowURL string
|
|
arcReportURL string
|
|
appealTagsURL string
|
|
arcAppealURL string
|
|
relatedURL string
|
|
onlineURL string
|
|
liveOnlineURL string
|
|
helpListURL string
|
|
helpSearchURL string
|
|
onlineListURL string
|
|
shopURL string
|
|
replyHotURL string
|
|
searchURL string
|
|
searchRecURL string
|
|
searchDefaultURL string
|
|
searchUpRecURL string
|
|
searchEggURL string
|
|
walletURL string
|
|
walletOldURL string
|
|
abServerURL string
|
|
wxHotURL string
|
|
bnjConfURL string
|
|
special string
|
|
// cache Prom
|
|
cacheProm *prom.Prom
|
|
}
|
|
|
|
// New dao new
|
|
func New(c *conf.Config) (d *Dao) {
|
|
d = &Dao{
|
|
// config
|
|
c: c,
|
|
// http read client
|
|
httpR: bm.NewClient(c.HTTPClient.Read),
|
|
httpW: bm.NewClient(c.HTTPClient.Write),
|
|
httpBigData: bm.NewClient(c.HTTPClient.BigData),
|
|
httpHelp: bm.NewClient(c.HTTPClient.Help),
|
|
httpSearch: bm.NewClient(c.HTTPClient.Search),
|
|
httpPay: bm.NewClient(c.HTTPClient.Pay),
|
|
// init bfs http client
|
|
bfsClient: xhttp.DefaultClient,
|
|
// redis
|
|
redis: redis.NewPool(c.Redis.LocalRedis.Config),
|
|
redisBak: redis.NewPool(c.Redis.BakRedis.Config),
|
|
redisNlExpire: int32(time.Duration(c.Redis.LocalRedis.NewlistExpire) / time.Second),
|
|
redisNlBakExpire: int32(time.Duration(c.Redis.BakRedis.NewlistExpire) / time.Second),
|
|
redisRkExpire: int32(time.Duration(c.Redis.LocalRedis.RankingExpire) / time.Second),
|
|
redisRkBakExpire: int32(time.Duration(c.Redis.BakRedis.RankingExpire) / time.Second),
|
|
redisDynamicBakExpire: int32(time.Duration(c.Redis.BakRedis.RegionExpire) / time.Second),
|
|
redisArchiveBakExpire: int32(time.Duration(c.Redis.BakRedis.ArchiveExpire) / time.Second),
|
|
redisTagBakExpire: int32(time.Duration(c.Redis.BakRedis.TagExpire) / time.Second),
|
|
redisCardBakExpire: int32(time.Duration(c.Redis.BakRedis.CardExpire) / time.Second),
|
|
redisRcExpire: int32(time.Duration(c.Redis.LocalRedis.RcExpire) / time.Second),
|
|
redisRcBakExpire: int32(time.Duration(c.Redis.BakRedis.RcExpire) / time.Second),
|
|
redisArtBakExpire: int32(time.Duration(c.Redis.BakRedis.ArtUpExpire) / time.Second),
|
|
redisIxIconExpire: int32(time.Duration(c.Redis.LocalRedis.IndexIconExpire) / time.Second),
|
|
redisIxIconBakExpire: int32(time.Duration(c.Redis.BakRedis.IndexIconExpire) / time.Second),
|
|
redisHelpBakExpire: int32(time.Duration(c.Redis.BakRedis.HelpExpire) / time.Second),
|
|
redisOlListBakExpire: int32(time.Duration(c.Redis.BakRedis.OlListExpire) / time.Second),
|
|
redisWxHotExpire: int32(time.Duration(c.Redis.LocalRedis.WxHotExpire) / time.Second),
|
|
redisWxHotBakExpire: int32(time.Duration(c.Redis.BakRedis.WxHotExpire) / time.Second),
|
|
redisAppealLimitExpire: int32(time.Duration(c.Redis.BakRedis.AppealLimitExpire) / time.Second),
|
|
// remote source urls
|
|
rankURL: c.Host.Rank + _rankURL + _rankURI,
|
|
rankIndexURL: c.Host.Rank + _rankURL + _rankIndexURI,
|
|
rankRegionURL: c.Host.Rank + _rankURL + _rankRegionURI,
|
|
rankRecURL: c.Host.Rank + _rankURL + _rankRecURI,
|
|
wxHotURL: c.Host.Rank + _rankURL + _wxHotURI,
|
|
rankTagURL: c.Host.Rank + _rankTagURI,
|
|
feedbackURL: c.Host.API + _feedbackURL,
|
|
spaceTopPhotoURL: c.Host.Space + _spaceTopPhotoURL,
|
|
coinAddURL: c.Host.API + _coinAddURL,
|
|
coinExpURL: c.Host.API + _coinExpURL,
|
|
customURL: c.Host.Rank + _rankURL + _customURI,
|
|
elecShowURL: c.Host.Elec + _elecShowURL,
|
|
arcReportURL: c.Host.ArcAPI + _arcReportURL,
|
|
appealTagsURL: c.Host.API + _appealTagsURL,
|
|
arcAppealURL: c.Host.API + _arcAppealURL,
|
|
relatedURL: c.Host.Data + _relatedURL,
|
|
onlineURL: c.Host.API + _onlineURL,
|
|
liveOnlineURL: c.Host.LiveAPI + _liveOnlineURL,
|
|
helpListURL: c.Host.HelpAPI + _helpListURL,
|
|
helpSearchURL: c.Host.HelpAPI + _helpSearchURL,
|
|
onlineListURL: c.Host.API + _onlineListURL,
|
|
shopURL: c.Host.Mall + _shopURI,
|
|
replyHotURL: c.Host.API + _hotURI,
|
|
searchURL: c.Host.Search + _searchURL,
|
|
searchRecURL: c.Host.Search + _searchRecURL,
|
|
searchDefaultURL: c.Host.Search + _searchDefaultURL,
|
|
searchUpRecURL: c.Host.Search + _searchUpRecURL,
|
|
searchEggURL: c.Host.Manager + _searchEggURI,
|
|
walletURL: c.Host.Pay + _payWalletURL,
|
|
walletOldURL: c.Host.Pay + _payWalletOldURL,
|
|
abServerURL: c.Host.AbServer + _abServerURI,
|
|
bnjConfURL: c.Host.LiveAPI + _bnjConfURI,
|
|
special: c.Host.API + _special,
|
|
// prom
|
|
cacheProm: prom.CacheHit,
|
|
}
|
|
return d
|
|
}
|
|
|
|
// Ping check connection success.
|
|
func (dao *Dao) Ping(c context.Context) (err error) {
|
|
if err = dao.pingRedis(c); err != nil {
|
|
log.Error("dao.pingRedis error(%v)", err)
|
|
return
|
|
}
|
|
if err = dao.pingRedisBak(c); err != nil {
|
|
log.Error("dao.pingRedisBak error(%v)", err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// Close close resource.
|
|
func (dao *Dao) Close() {
|
|
if dao.redis != nil {
|
|
dao.redis.Close()
|
|
}
|
|
if dao.redisBak != nil {
|
|
dao.redisBak.Close()
|
|
}
|
|
}
|
|
|
|
func (dao *Dao) pingRedis(c context.Context) (err error) {
|
|
conn := dao.redis.Get(c)
|
|
_, err = conn.Do("SET", "PING", "PONG")
|
|
conn.Close()
|
|
return
|
|
}
|
|
|
|
func (dao *Dao) pingRedisBak(c context.Context) (err error) {
|
|
conn := dao.redisBak.Get(c)
|
|
_, err = conn.Do("SET", "PING", "PONG")
|
|
conn.Close()
|
|
return
|
|
}
|