12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package plugin
- import (
- "context"
- "sort"
- "time"
- "go-common/app/interface/main/app-resource/conf"
- pgdao "go-common/app/interface/main/app-resource/dao/plugin"
- "go-common/app/interface/main/app-resource/model/plugin"
- "go-common/library/log"
- )
- type Service struct {
- pgDao *pgdao.Dao
- tick time.Duration
- pluginCache map[string][]*plugin.Plugin
- }
- func New(c *conf.Config) (s *Service) {
- s = &Service{
- pgDao: pgdao.New(c),
- tick: time.Duration(c.Tick),
- pluginCache: map[string][]*plugin.Plugin{},
- }
- s.load()
- go s.loadproc()
- return
- }
- func (s *Service) Plugin(build, baseCode, seed int, name string) (pg *plugin.Plugin) {
- if build == 0 || seed == 0 || name == "" {
- return
- }
- if ps, ok := s.pluginCache[name]; ok {
- for _, p := range ps {
- if ((p.Policy == 1 && baseCode == p.BaseCode) || p.Policy == 2 && baseCode >= p.BaseCode) && seed%100 <= p.Coverage && build >= p.MinBuild && ((p.MaxBuild == 0) || (p.MaxBuild != 0 && build <= p.MaxBuild)) {
- pg = p
- break
- }
- }
- }
- return
- }
- // load cache data
- func (s *Service) load() {
- psm, err := s.pgDao.All(context.TODO())
- if err != nil {
- log.Error("s.pgDao.All() error(%v)", err)
- return
- }
- pgCache := make(map[string][]*plugin.Plugin, len(psm))
- for name, ps := range psm {
- sort.Sort(plugin.Plugins(ps))
- pgCache[name] = ps
- }
- s.pluginCache = pgCache
- }
- // cacheproc load cache data
- func (s *Service) loadproc() {
- for {
- time.Sleep(s.tick)
- s.load()
- }
- }
|