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