go-common/app/interface/main/mcn/dao/mcndao/dao.go

75 lines
1.5 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package mcndao
import (
"context"
"fmt"
"runtime"
"time"
"go-common/app/interface/main/mcn/conf"
"go-common/app/interface/main/mcn/dao/global"
"go-common/library/cache/memcache"
"go-common/library/sync/pipeline/fanout"
"github.com/bluele/gcache"
"github.com/jinzhu/gorm"
)
// Dao dao
type Dao struct {
c *conf.Config
mc *memcache.Pool
mcndb *gorm.DB
//cache tool
cache *fanout.Fanout
mcnSignExpire int32
mcnDataExpire int32
localcache gcache.Cache
}
// New init mysql db
func New(c *conf.Config, localcache gcache.Cache) (dao *Dao) {
dao = &Dao{
c: c,
mc: global.GetMc(),
// cache worker
cache: fanout.New("cache", fanout.Worker(runtime.NumCPU()), fanout.Buffer(1024)),
mcnSignExpire: int32(time.Duration(c.Memcache.McnSignCacheExpire) / time.Second),
mcnDataExpire: int32(time.Duration(c.Memcache.McnDataCacheExpire) / time.Second),
localcache: localcache,
}
if localcache == nil {
dao.localcache = gcache.New(c.RankCache.Size).Simple().Build()
}
if dao.mcnDataExpire == 0 {
dao.mcnDataExpire = 3600
}
if dao.mcnSignExpire == 0 {
dao.mcnSignExpire = 3600
}
var err error
dao.mcndb, err = gorm.Open("mysql", c.MCNorm.DSN)
if err != nil {
panic(fmt.Errorf("db connect fail, err=%s", err))
}
dao.mcndb.LogMode(c.Other.Debug)
return
}
// Close close the resource.
func (d *Dao) Close() {
d.cache.Close()
d.mc.Close()
d.mcndb.Close()
}
// Ping dao ping
func (d *Dao) Ping(c context.Context) error {
return nil
}
//GetMcnDB get mcn db
func (d *Dao) GetMcnDB() *gorm.DB {
return d.mcndb
}