You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.5 KiB
172 lines
5.5 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"time" |
|
|
|
"go-common/app/interface/main/space/conf" |
|
"go-common/library/cache/memcache" |
|
"go-common/library/cache/redis" |
|
"go-common/library/database/sql" |
|
bm "go-common/library/net/http/blademaster" |
|
"go-common/library/sync/pipeline/fanout" |
|
|
|
"go-common/library/database/hbase.v2" |
|
) |
|
|
|
// Dao dao struct. |
|
type Dao struct { |
|
// config |
|
c *conf.Config |
|
// db |
|
db *sql.DB |
|
// hbase |
|
hbase *hbase.Client |
|
// stmt |
|
channelStmt []*sql.Stmt |
|
channelListStmt []*sql.Stmt |
|
channelCntStmt []*sql.Stmt |
|
channelArcCntStmt []*sql.Stmt |
|
// redis |
|
redis *redis.Pool |
|
// mc |
|
mc *memcache.Pool |
|
// http client |
|
httpR *bm.Client |
|
httpW *bm.Client |
|
httpGame *bm.Client |
|
// api URL |
|
bangumiURL string |
|
bangumiConcernURL string |
|
bangumiUnConcernURL string |
|
favFolderURL string |
|
favArcURL string |
|
favAlbumURL string |
|
favMovieURL string |
|
shopURL string |
|
shopLinkURL string |
|
albumCountURL string |
|
albumListURL string |
|
tagSubURL string |
|
tagCancelSubURL string |
|
tagSubListURL string |
|
accTagsURL string |
|
accTagsSetURL string |
|
isAnsweredURL string |
|
lastPlayGameURL string |
|
appPlayedGameURL string |
|
arcSearchURL string |
|
webTopPhotoURL string |
|
topPhotoURL string |
|
liveMetalURL string |
|
liveURL string |
|
medalStatusURL string |
|
groupsCountURL string |
|
elecURL string |
|
audioCardURL string |
|
audioUpperCertURL string |
|
audioCntURL string |
|
dynamicListURL string |
|
dynamicURL string |
|
dynamicCntURL string |
|
// expire |
|
clExpire int32 |
|
upArtExpire int32 |
|
upArcExpire int32 |
|
mcSettingExpire int32 |
|
mcNoticeExpire int32 |
|
mcTopArcExpire int32 |
|
mcMpExpire int32 |
|
mcThemeExpire int32 |
|
mcTopDyExpire int32 |
|
// cache |
|
cache *fanout.Fanout |
|
} |
|
|
|
// New new dao. |
|
func New(c *conf.Config) (d *Dao) { |
|
d = &Dao{ |
|
// config |
|
c: c, |
|
db: sql.NewMySQL(c.Mysql), |
|
hbase: hbase.NewClient(c.HBase.Config), |
|
redis: redis.NewPool(c.Redis.Config), |
|
mc: memcache.NewPool(c.Memcache.Config), |
|
httpR: bm.NewClient(c.HTTPClient.Read), |
|
httpW: bm.NewClient(c.HTTPClient.Write), |
|
httpGame: bm.NewClient(c.HTTPClient.Game), |
|
bangumiURL: c.Host.Bangumi + _bangumiURI, |
|
bangumiConcernURL: c.Host.Bangumi + _bangumiConcernURI, |
|
bangumiUnConcernURL: c.Host.Bangumi + _bangumiUnConcernURI, |
|
favFolderURL: c.Host.API + _favFolderURI, |
|
favArcURL: c.Host.API + _favArchiveURI, |
|
favAlbumURL: c.Host.APILive + _favAlbumURI, |
|
favMovieURL: c.Host.Bangumi + _favMovieURI, |
|
shopURL: c.Host.Mall + _shopURI, |
|
shopLinkURL: c.Host.Mall + _shopLinkURI, |
|
albumCountURL: c.Host.APIVc + _albumCountURI, |
|
albumListURL: c.Host.APIVc + _albumListURI, |
|
tagSubURL: c.Host.API + _tagSubURI, |
|
tagCancelSubURL: c.Host.API + _tagCancelSubURI, |
|
tagSubListURL: c.Host.API + _subTagListURI, |
|
accTagsURL: c.Host.Acc + _accTagsURI, |
|
accTagsSetURL: c.Host.Acc + _accTagsSetURI, |
|
isAnsweredURL: c.Host.API + _isAnsweredURI, |
|
lastPlayGameURL: c.Host.Game + _lastPlayGameURI, |
|
appPlayedGameURL: c.Host.AppGame + _appPlayedGameURI, |
|
arcSearchURL: c.Host.Search + _arcSearchURI, |
|
webTopPhotoURL: c.Host.Space + _webTopPhotoURI, |
|
topPhotoURL: c.Host.Space + _topPhotoURI, |
|
liveMetalURL: c.Host.APILive + _liveMetalURI, |
|
liveURL: c.Host.APILive + _liveURI, |
|
medalStatusURL: c.Host.APILive + _medalStatusURI, |
|
groupsCountURL: c.Host.APIVc + _groupsCountURI, |
|
elecURL: c.Host.Elec + _elecURI, |
|
audioCardURL: c.Host.API + _audioCardURI, |
|
audioUpperCertURL: c.Host.API + _audioUpperCertURI, |
|
audioCntURL: c.Host.API + _audioCntURI, |
|
dynamicListURL: c.Host.APIVc + _dynamicListURI, |
|
dynamicURL: c.Host.APIVc + _dynamicURI, |
|
dynamicCntURL: c.Host.APIVc + _dynamicCntURI, |
|
// expire |
|
clExpire: int32(time.Duration(c.Redis.ClExpire) / time.Second), |
|
upArtExpire: int32(time.Duration(c.Redis.UpArtExpire) / time.Second), |
|
upArcExpire: int32(time.Duration(c.Redis.UpArcExpire) / time.Second), |
|
mcSettingExpire: int32(time.Duration(c.Memcache.SettingExpire) / time.Second), |
|
mcNoticeExpire: int32(time.Duration(c.Memcache.NoticeExpire) / time.Second), |
|
mcTopArcExpire: int32(time.Duration(c.Memcache.TopArcExpire) / time.Second), |
|
mcMpExpire: int32(time.Duration(c.Memcache.MpExpire) / time.Second), |
|
mcThemeExpire: int32(time.Duration(c.Memcache.ThemeExpire) / time.Second), |
|
mcTopDyExpire: int32(time.Duration(c.Memcache.TopDyExpire) / time.Second), |
|
// cache |
|
cache: fanout.New("cache"), |
|
} |
|
d.channelStmt = make([]*sql.Stmt, _chSub) |
|
d.channelListStmt = make([]*sql.Stmt, _chSub) |
|
d.channelCntStmt = make([]*sql.Stmt, _chSub) |
|
d.channelArcCntStmt = make([]*sql.Stmt, _chSub) |
|
for i := 0; i < _chSub; i++ { |
|
d.channelStmt[i] = d.db.Prepared(fmt.Sprintf(_chSQL, i)) |
|
d.channelListStmt[i] = d.db.Prepared(fmt.Sprintf(_chListSQL, i)) |
|
d.channelCntStmt[i] = d.db.Prepared(fmt.Sprintf(_chCntSQL, i)) |
|
d.channelArcCntStmt[i] = d.db.Prepared(fmt.Sprintf(_chArcCntSQL, i)) |
|
} |
|
return |
|
} |
|
|
|
// Ping ping dao |
|
func (d *Dao) Ping(c context.Context) (err error) { |
|
if err = d.db.Ping(c); err != nil { |
|
return |
|
} |
|
err = d.pingRedis(c) |
|
return |
|
} |
|
|
|
func (d *Dao) pingRedis(c context.Context) (err error) { |
|
conn := d.redis.Get(c) |
|
_, err = conn.Do("SET", "PING", "PONG") |
|
conn.Close() |
|
return |
|
}
|
|
|