Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Nightingale
提交
7f73945c
N
Nightingale
项目概览
jobily
/
Nightingale
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
Nightingale
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7f73945c
编写于
8月 24, 2023
作者:
N
ning
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'main' of github.com:ccfos/nightingale
上级
56a7860b
25dab86b
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
65 addition
and
9 deletion
+65
-9
center/router/router.go
center/router/router.go
+1
-0
center/router/router_alert_cur_event.go
center/router/router_alert_cur_event.go
+8
-4
center/router/router_mute.go
center/router/router_mute.go
+27
-1
models/alert_cur_event.go
models/alert_cur_event.go
+29
-4
未找到文件。
center/router/router.go
浏览文件 @
7f73945c
...
...
@@ -285,6 +285,7 @@ func (rt *Router) Config(r *gin.Engine) {
pages
.
PUT
(
"/busi-group/:id/recording-rules/fields"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/recording-rules/put"
),
rt
.
recordingRulePutFields
)
pages
.
GET
(
"/busi-group/:id/alert-mutes"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/alert-mutes"
),
rt
.
bgro
(),
rt
.
alertMuteGetsByBG
)
pages
.
POST
(
"/busi-group/:id/alert-mutes/preview"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/alert-mutes/add"
),
rt
.
bgrw
(),
rt
.
alertMutePreview
)
pages
.
POST
(
"/busi-group/:id/alert-mutes"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/alert-mutes/add"
),
rt
.
bgrw
(),
rt
.
alertMuteAdd
)
pages
.
DELETE
(
"/busi-group/:id/alert-mutes"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/alert-mutes/del"
),
rt
.
bgrw
(),
rt
.
alertMuteDel
)
pages
.
PUT
(
"/busi-group/:id/alert-mute/:amid"
,
rt
.
auth
(),
rt
.
user
(),
rt
.
perm
(
"/alert-mutes/put"
),
rt
.
alertMutePutByFE
)
...
...
center/router/router_alert_cur_event.go
浏览文件 @
7f73945c
...
...
@@ -182,13 +182,19 @@ func (rt *Router) alertCurEventDel(c *gin.Context) {
ginx
.
BindJSON
(
c
,
&
f
)
f
.
Verify
()
rt
.
checkCurEventBusiGroupRWPermission
(
c
,
f
.
Ids
)
ginx
.
NewRender
(
c
)
.
Message
(
models
.
AlertCurEventDel
(
rt
.
Ctx
,
f
.
Ids
))
}
func
(
rt
*
Router
)
checkCurEventBusiGroupRWPermission
(
c
*
gin
.
Context
,
ids
[]
int64
)
{
set
:=
make
(
map
[
int64
]
struct
{})
// event group id is 0, ignore perm check
set
[
0
]
=
struct
{}{}
for
i
:=
0
;
i
<
len
(
f
.
I
ds
);
i
++
{
event
,
err
:=
models
.
AlertCurEventGetById
(
rt
.
Ctx
,
f
.
I
ds
[
i
])
for
i
:=
0
;
i
<
len
(
i
ds
);
i
++
{
event
,
err
:=
models
.
AlertCurEventGetById
(
rt
.
Ctx
,
i
ds
[
i
])
ginx
.
Dangerous
(
err
)
if
_
,
has
:=
set
[
event
.
GroupId
];
!
has
{
...
...
@@ -196,8 +202,6 @@ func (rt *Router) alertCurEventDel(c *gin.Context) {
set
[
event
.
GroupId
]
=
struct
{}{}
}
}
ginx
.
NewRender
(
c
)
.
Message
(
models
.
AlertCurEventDel
(
rt
.
Ctx
,
f
.
Ids
))
}
func
(
rt
*
Router
)
alertCurEventGet
(
c
*
gin
.
Context
)
{
...
...
center/router/router_mute.go
浏览文件 @
7f73945c
...
...
@@ -5,6 +5,7 @@ import (
"strings"
"time"
"github.com/ccfos/nightingale/v6/alert/common"
"github.com/ccfos/nightingale/v6/models"
"github.com/gin-gonic/gin"
...
...
@@ -29,16 +30,41 @@ func (rt *Router) alertMuteGets(c *gin.Context) {
}
func
(
rt
*
Router
)
alertMuteAdd
(
c
*
gin
.
Context
)
{
var
f
models
.
AlertMute
ginx
.
BindJSON
(
c
,
&
f
)
username
:=
c
.
MustGet
(
"username"
)
.
(
string
)
f
.
CreateBy
=
username
f
.
GroupId
=
ginx
.
UrlParamInt64
(
c
,
"id"
)
ginx
.
NewRender
(
c
)
.
Message
(
f
.
Add
(
rt
.
Ctx
))
}
//Preview events (alert_cur_event) that match the mute strategy based on the following criteria:
//business group ID (group_id, group_id), product (prod, rule_prod),
//alert event severity (severities, severity), and event tags (tags, tags).
//For products of type not 'host', also consider the category (cate, cate) and datasource ID (datasource_ids, datasource_id).
func
(
rt
*
Router
)
alertMutePreview
(
c
*
gin
.
Context
)
{
//Generally the match of events would be less.
var
f
models
.
AlertMute
ginx
.
BindJSON
(
c
,
&
f
)
f
.
GroupId
=
ginx
.
UrlParamInt64
(
c
,
"id"
)
ginx
.
Dangerous
(
f
.
Verify
())
//verify and parse tags json to ITags
events
,
err
:=
models
.
AlertCurEventGetsFromAlertMute
(
rt
.
Ctx
,
&
f
)
ginx
.
Dangerous
(
err
)
matchEvents
:=
make
([]
*
models
.
AlertCurEvent
,
0
,
len
(
events
))
for
i
:=
0
;
i
<
len
(
events
);
i
++
{
events
[
i
]
.
DB2Mem
()
if
common
.
MatchTags
(
events
[
i
]
.
TagsMap
,
f
.
ITags
)
{
matchEvents
=
append
(
matchEvents
,
events
[
i
])
}
}
ginx
.
NewRender
(
c
)
.
Data
(
matchEvents
,
err
)
}
func
(
rt
*
Router
)
alertMuteAddByService
(
c
*
gin
.
Context
)
{
var
f
models
.
AlertMute
ginx
.
BindJSON
(
c
,
&
f
)
...
...
models/alert_cur_event.go
浏览文件 @
7f73945c
...
...
@@ -12,6 +12,7 @@ import (
"github.com/ccfos/nightingale/v6/pkg/ctx"
"github.com/ccfos/nightingale/v6/pkg/poster"
"github.com/ccfos/nightingale/v6/pkg/tplx"
"github.com/toolkits/pkg/logger"
)
...
...
@@ -307,8 +308,10 @@ func (e *AlertCurEvent) FillNotifyGroups(ctx *ctx.Context, cache map[int64]*User
}
func
AlertCurEventTotal
(
ctx
*
ctx
.
Context
,
prods
[]
string
,
bgid
,
stime
,
etime
int64
,
severity
int
,
dsIds
[]
int64
,
cates
[]
string
,
query
string
)
(
int64
,
error
)
{
session
:=
DB
(
ctx
)
.
Model
(
&
AlertCurEvent
{})
.
Where
(
"trigger_time between ? and ?"
,
stime
,
etime
)
session
:=
DB
(
ctx
)
.
Model
(
&
AlertCurEvent
{})
if
stime
!=
0
&&
etime
!=
0
{
session
=
session
.
Where
(
"trigger_time between ? and ?"
,
stime
,
etime
)
}
if
len
(
prods
)
!=
0
{
session
=
session
.
Where
(
"rule_prod in ?"
,
prods
)
}
...
...
@@ -341,8 +344,10 @@ func AlertCurEventTotal(ctx *ctx.Context, prods []string, bgid, stime, etime int
}
func
AlertCurEventGets
(
ctx
*
ctx
.
Context
,
prods
[]
string
,
bgid
,
stime
,
etime
int64
,
severity
int
,
dsIds
[]
int64
,
cates
[]
string
,
query
string
,
limit
,
offset
int
)
([]
AlertCurEvent
,
error
)
{
session
:=
DB
(
ctx
)
.
Where
(
"trigger_time between ? and ?"
,
stime
,
etime
)
session
:=
DB
(
ctx
)
.
Model
(
&
AlertCurEvent
{})
if
stime
!=
0
&&
etime
!=
0
{
session
=
session
.
Where
(
"trigger_time between ? and ?"
,
stime
,
etime
)
}
if
len
(
prods
)
!=
0
{
session
=
session
.
Where
(
"rule_prod in ?"
,
prods
)
}
...
...
@@ -560,3 +565,23 @@ func AlertCurEventUpgradeToV6(ctx *ctx.Context, dsm map[string]Datasource) error
}
return
nil
}
// AlertCurEventGetsFromAlertMute find current events from db.
func
AlertCurEventGetsFromAlertMute
(
ctx
*
ctx
.
Context
,
alertMute
*
AlertMute
)
([]
*
AlertCurEvent
,
error
)
{
var
lst
[]
*
AlertCurEvent
tx
:=
DB
(
ctx
)
.
Where
(
"group_id = ? and rule_prod = ?"
,
alertMute
.
GroupId
,
alertMute
.
Prod
)
if
len
(
alertMute
.
SeveritiesJson
)
!=
0
{
tx
=
tx
.
Where
(
"severity IN (?)"
,
alertMute
.
SeveritiesJson
)
}
if
alertMute
.
Prod
!=
HOST
{
tx
=
tx
.
Where
(
"cate = ?"
,
alertMute
.
Cate
)
if
alertMute
.
DatasourceIdsJson
!=
nil
&&
!
IsAllDatasource
(
alertMute
.
DatasourceIdsJson
)
{
tx
=
tx
.
Where
(
"datasource_id IN (?)"
,
alertMute
.
DatasourceIdsJson
)
}
}
err
:=
tx
.
Order
(
"id desc"
)
.
Find
(
&
lst
)
.
Error
return
lst
,
err
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录