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.
97 lines
2.4 KiB
97 lines
2.4 KiB
package unicom |
|
|
|
import ( |
|
"sync" |
|
"time" |
|
|
|
"go-common/app/interface/main/app-wall/conf" |
|
accdao "go-common/app/interface/main/app-wall/dao/account" |
|
liveDao "go-common/app/interface/main/app-wall/dao/live" |
|
seqDao "go-common/app/interface/main/app-wall/dao/seq" |
|
shopDao "go-common/app/interface/main/app-wall/dao/shopping" |
|
unicomDao "go-common/app/interface/main/app-wall/dao/unicom" |
|
"go-common/app/interface/main/app-wall/model/unicom" |
|
"go-common/library/queue/databus" |
|
"go-common/library/stat/prom" |
|
) |
|
|
|
const ( |
|
_initIPlimitKey = "iplimit_%v_%v" |
|
) |
|
|
|
type Service struct { |
|
c *conf.Config |
|
dao *unicomDao.Dao |
|
live *liveDao.Dao |
|
seqdao *seqDao.Dao |
|
accd *accdao.Dao |
|
shop *shopDao.Dao |
|
tick time.Duration |
|
unicomIpCache []*unicom.UnicomIP |
|
unicomIpSQLCache map[string]*unicom.UnicomIP |
|
operationIPlimit map[string]struct{} |
|
unicomPackCache []*unicom.UserPack |
|
// infoc |
|
logCh chan interface{} |
|
packCh chan interface{} |
|
packLogCh chan interface{} |
|
userBindCh chan interface{} |
|
// waiter |
|
waiter sync.WaitGroup |
|
// databus |
|
userbindPub *databus.Databus |
|
// prom |
|
pHit *prom.Prom |
|
pMiss *prom.Prom |
|
} |
|
|
|
func New(c *conf.Config) (s *Service) { |
|
s = &Service{ |
|
c: c, |
|
dao: unicomDao.New(c), |
|
live: liveDao.New(c), |
|
seqdao: seqDao.New(c), |
|
accd: accdao.New(c), |
|
shop: shopDao.New(c), |
|
tick: time.Duration(c.Tick), |
|
unicomIpCache: []*unicom.UnicomIP{}, |
|
unicomIpSQLCache: map[string]*unicom.UnicomIP{}, |
|
operationIPlimit: map[string]struct{}{}, |
|
unicomPackCache: []*unicom.UserPack{}, |
|
// databus |
|
userbindPub: databus.New(c.UnicomDatabus), |
|
// infoc |
|
logCh: make(chan interface{}, 1024), |
|
packCh: make(chan interface{}, 1024), |
|
packLogCh: make(chan interface{}, 1024), |
|
userBindCh: make(chan interface{}, 1024), |
|
// prom |
|
pHit: prom.CacheHit, |
|
pMiss: prom.CacheMiss, |
|
} |
|
// now := time.Now() |
|
s.loadIPlimit(c) |
|
s.loadUnicomIP() |
|
// s.loadUnicomIPOrder(now) |
|
s.loadUnicomPacks() |
|
// s.loadUnicomFlow() |
|
go s.loadproc() |
|
go s.unicomInfocproc() |
|
go s.unicomPackInfocproc() |
|
go s.addUserPackLogproc() |
|
s.waiter.Add(1) |
|
go s.userbindConsumer() |
|
return |
|
} |
|
|
|
// cacheproc load cache |
|
func (s *Service) loadproc() { |
|
for { |
|
time.Sleep(s.tick) |
|
// now := time.Now() |
|
s.loadUnicomIP() |
|
// s.loadUnicomIPOrder(now) |
|
s.loadUnicomPacks() |
|
// s.loadUnicomFlow() |
|
} |
|
}
|
|
|