Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
nightingale
提交
8b748a78
N
nightingale
项目概览
DiDi
/
nightingale
9 个月 前同步成功
通知
45
Star
7053
Fork
1161
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
nightingale
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8b748a78
编写于
8月 26, 2021
作者:
U
UlricQin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
delete user/group when get alert rule if user/group is deleted
上级
d92ca5f2
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
99 addition
and
10 deletion
+99
-10
cache/user.go
cache/user.go
+7
-0
http/router_alert_rule.go
http/router_alert_rule.go
+92
-10
未找到文件。
cache/user.go
浏览文件 @
8b748a78
...
...
@@ -34,6 +34,13 @@ func (s *UserMap) GetByIds(ids []int64) []*models.User {
return
users
}
func
(
s
*
UserMap
)
GetById
(
id
int64
)
*
models
.
User
{
s
.
RLock
()
defer
s
.
RUnlock
()
return
s
.
Data
[
id
]
}
func
(
s
*
UserMap
)
SetAll
(
users
map
[
int64
]
*
models
.
User
)
{
s
.
Lock
()
defer
s
.
Unlock
()
...
...
http/router_alert_rule.go
浏览文件 @
8b748a78
...
...
@@ -2,12 +2,14 @@ package http
import
(
"encoding/json"
"fmt"
"net/http"
"strconv"
"strings"
"time"
"github.com/gin-gonic/gin"
"github.com/toolkits/pkg/logger"
"github.com/didi/nightingale/v5/cache"
"github.com/didi/nightingale/v5/config"
...
...
@@ -251,19 +253,99 @@ func notifyChannelsGet(c *gin.Context) {
func
alertRuleFillUserAndGroups
(
alertRule
*
models
.
AlertRule
)
{
uidStrs
:=
strings
.
Fields
(
alertRule
.
NotifyUsers
)
var
uids
[]
int64
for
_
,
uidStr
:=
range
uidStrs
{
uid
,
_
:=
strconv
.
ParseInt
(
uidStr
,
10
,
64
)
uids
=
append
(
uids
,
uid
)
userlen
:=
len
(
uidStrs
)
users
:=
make
([]
*
models
.
User
,
0
,
userlen
)
if
userlen
>
0
{
// 是否有用户已经被删除的情况出现
userMiss
:=
false
for
_
,
uidStr
:=
range
uidStrs
{
uid
,
err
:=
strconv
.
ParseInt
(
uidStr
,
10
,
64
)
if
err
!=
nil
{
userMiss
=
true
continue
}
user
:=
cache
.
UserCache
.
GetById
(
uid
)
if
user
!=
nil
{
users
=
append
(
users
,
user
)
continue
}
// uid在cache里找不到,可能是还没来得及缓存,也可能是被删除了
// 去查一下数据库,如果确实找不到了,就更新一下
user
,
err
=
models
.
UserGetById
(
uid
)
if
err
!=
nil
{
logger
.
Error
(
"UserGetById fail:"
,
err
)
continue
}
if
user
!=
nil
{
users
=
append
(
users
,
user
)
}
else
{
userMiss
=
true
}
}
if
userMiss
{
userIdsNew
:=
make
([]
string
,
len
(
users
))
for
i
:=
0
;
i
<
len
(
users
);
i
++
{
userIdsNew
[
i
]
=
fmt
.
Sprint
(
users
[
i
]
.
Id
)
}
alertRule
.
NotifyUsers
=
strings
.
Join
(
userIdsNew
,
" "
)
alertRule
.
UpdateAt
=
time
.
Now
()
.
Unix
()
alertRule
.
Update
(
"notify_users"
,
"update_at"
)
}
}
alertRule
.
NotifyUsersDetail
=
cache
.
UserCache
.
GetByIds
(
uids
)
// 最终存活的user列表,赋值给alertRule
alertRule
.
NotifyUsersDetail
=
users
gidStrs
:=
strings
.
Fields
(
alertRule
.
NotifyGroups
)
var
gids
[]
int64
for
_
,
gidStr
:=
range
gidStrs
{
gid
,
_
:=
strconv
.
ParseInt
(
gidStr
,
10
,
64
)
gids
=
append
(
gids
,
gid
)
grplen
:=
len
(
gidStrs
)
grps
:=
make
([]
*
models
.
UserGroup
,
0
,
grplen
)
if
grplen
>
0
{
grpMiss
:=
false
for
_
,
gidStr
:=
range
gidStrs
{
gid
,
err
:=
strconv
.
ParseInt
(
gidStr
,
10
,
64
)
if
err
!=
nil
{
grpMiss
=
true
continue
}
grp
:=
cache
.
UserGroupCache
.
GetBy
(
gid
)
if
grp
!=
nil
{
grps
=
append
(
grps
,
grp
)
continue
}
grp
,
err
=
models
.
UserGroupGet
(
"id=?"
,
gid
)
if
err
!=
nil
{
logger
.
Error
(
"UserGroupGet fail:"
,
err
)
continue
}
if
grp
!=
nil
{
grps
=
append
(
grps
,
grp
)
}
else
{
grpMiss
=
true
}
}
if
grpMiss
{
grpIdsNew
:=
make
([]
string
,
len
(
grps
))
for
i
:=
0
;
i
<
len
(
grps
);
i
++
{
grpIdsNew
[
i
]
=
fmt
.
Sprint
(
grps
[
i
]
.
Id
)
}
alertRule
.
NotifyGroups
=
strings
.
Join
(
grpIdsNew
,
" "
)
alertRule
.
UpdateAt
=
time
.
Now
()
.
Unix
()
alertRule
.
Update
(
"notify_groups"
,
"update_at"
)
}
}
alertRule
.
NotifyGroupsDetail
=
cache
.
UserGroupCache
.
GetByIds
(
gids
)
alertRule
.
NotifyGroupsDetail
=
grps
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录