123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package mobile
- import (
- "bufio"
- "io"
- "os"
- "strings"
- "time"
- "go-common/app/interface/main/app-wall/conf"
- mobileDao "go-common/app/interface/main/app-wall/dao/mobile"
- "go-common/app/interface/main/app-wall/model"
- "go-common/app/interface/main/app-wall/model/mobile"
- "go-common/library/log"
- "go-common/library/stat/prom"
- )
- type Service struct {
- c *conf.Config
- dao *mobileDao.Dao
- tick time.Duration
- mobileIpCache []*mobile.MobileIP
- ipPath string
- // prom
- pHit *prom.Prom
- pMiss *prom.Prom
- }
- func New(c *conf.Config) (s *Service) {
- s = &Service{
- c: c,
- dao: mobileDao.New(c),
- tick: time.Duration(c.Tick),
- mobileIpCache: []*mobile.MobileIP{},
- ipPath: c.IPLimit.MobileIPFile,
- // prom
- pHit: prom.CacheHit,
- pMiss: prom.CacheMiss,
- }
- s.loadIP()
- return
- }
- func (s *Service) loadIP() {
- var (
- ip *mobile.MobileIP
- file *os.File
- line string
- err error
- ips []*mobile.MobileIP
- )
- if file, err = os.Open(s.ipPath); err != nil {
- log.Error("mobileIPFile is null")
- return
- }
- defer file.Close()
- reader := bufio.NewReader(file)
- for {
- if line, err = reader.ReadString('\n'); err != nil {
- if err == io.EOF {
- err = nil
- break
- }
- continue
- }
- lines := strings.Fields(line)
- if len(lines) < 3 {
- continue
- }
- ip = &mobile.MobileIP{
- IPStartUint: model.InetAtoN(lines[1]),
- IPEndUint: model.InetAtoN(lines[2]),
- }
- ips = append(ips, ip)
- }
- s.mobileIpCache = ips
- log.Info("loadMobileIPCache success")
- }
|