forked from pneymrl2f/nightingale
parent
c4b5d13348
commit
01420ff1d8
@ -0,0 +1,69 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/didi/nightingale/v4/src/models"
|
||||
)
|
||||
|
||||
type TeamMap struct {
|
||||
sync.RWMutex
|
||||
Data map[int64]*models.Team
|
||||
}
|
||||
|
||||
var TeamCache *TeamMap
|
||||
|
||||
func NewTeamCache() *TeamMap {
|
||||
return &TeamMap{Data: make(map[int64]*models.Team)}
|
||||
}
|
||||
|
||||
func (s *TeamMap) GetBy(id int64) *models.Team {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
|
||||
return s.Data[id]
|
||||
}
|
||||
|
||||
func (s *TeamMap) GetByIds(ids []int64) []*models.Team {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
var objs []*models.Team
|
||||
for _, id := range ids {
|
||||
if s.Data[id] == nil {
|
||||
continue
|
||||
}
|
||||
objs = append(objs, s.Data[id])
|
||||
}
|
||||
|
||||
return objs
|
||||
}
|
||||
|
||||
func (s *TeamMap) SetAll(objs map[int64]*models.Team) {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
s.Data = objs
|
||||
return
|
||||
}
|
||||
|
||||
func (s *TeamMap) GetTeamNamesByIds(ids string) []string {
|
||||
var names []string
|
||||
ids = strings.Replace(ids, "[", "", -1)
|
||||
ids = strings.Replace(ids, "]", "", -1)
|
||||
idsStrArr := strings.Split(ids, ",")
|
||||
|
||||
teamIds := []int64{}
|
||||
for _, teamId := range idsStrArr {
|
||||
id, _ := strconv.ParseInt(teamId, 10, 64)
|
||||
teamIds = append(teamIds, id)
|
||||
}
|
||||
|
||||
objs := s.GetByIds(teamIds)
|
||||
for _, obj := range objs {
|
||||
names = append(names, obj.Name)
|
||||
}
|
||||
|
||||
return names
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/didi/nightingale/v4/src/models"
|
||||
)
|
||||
|
||||
type TreeNodeMap struct {
|
||||
sync.RWMutex
|
||||
Data map[int64]*models.Node
|
||||
}
|
||||
|
||||
var TreeNodeCache *TreeNodeMap
|
||||
|
||||
func NewTreeNodeCache() *TreeNodeMap {
|
||||
return &TreeNodeMap{Data: make(map[int64]*models.Node)}
|
||||
}
|
||||
|
||||
func (t *TreeNodeMap) GetBy(id int64) *models.Node {
|
||||
t.RLock()
|
||||
defer t.RUnlock()
|
||||
|
||||
return t.Data[id]
|
||||
}
|
||||
|
||||
func (t *TreeNodeMap) GetByIds(ids []int64) []*models.Node {
|
||||
t.RLock()
|
||||
defer t.RUnlock()
|
||||
var objs []*models.Node
|
||||
for _, id := range ids {
|
||||
objs = append(objs, t.Data[id])
|
||||
}
|
||||
|
||||
return objs
|
||||
}
|
||||
|
||||
func (t *TreeNodeMap) SetAll(objs map[int64]*models.Node) {
|
||||
t.Lock()
|
||||
defer t.Unlock()
|
||||
|
||||
t.Data = objs
|
||||
return
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package cron
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/didi/nightingale/v4/src/models"
|
||||
"github.com/didi/nightingale/v4/src/modules/server/cache"
|
||||
"github.com/toolkits/pkg/logger"
|
||||
)
|
||||
|
||||
func SyncTeamUsers() {
|
||||
t1 := time.NewTicker(time.Duration(cache.CHECK_INTERVAL) * time.Second)
|
||||
|
||||
syncTeamUsers()
|
||||
logger.Info("[cron] sync team start...")
|
||||
for {
|
||||
<-t1.C
|
||||
syncTeamUsers()
|
||||
}
|
||||
}
|
||||
|
||||
func syncTeamUsers() {
|
||||
teamUsers, err := models.TeamUsers()
|
||||
|
||||
if err != nil {
|
||||
logger.Warningf("get Teams err:%v %v", err)
|
||||
}
|
||||
|
||||
teamUsersMap := make(map[int64][]int64)
|
||||
for _, teamUser := range teamUsers {
|
||||
if _, exists := teamUsersMap[teamUser.TeamId]; exists {
|
||||
teamUsersMap[teamUser.TeamId] = append(teamUsersMap[teamUser.TeamId], teamUser.UserId)
|
||||
} else {
|
||||
teamUsersMap[teamUser.TeamId] = []int64{teamUser.UserId}
|
||||
}
|
||||
}
|
||||
cache.TeamUsersCache.SetAll(teamUsersMap)
|
||||
}
|
Loading…
Reference in new issue