Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Nightingale
提交
6d9846f1
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 搜索 >>
提交
6d9846f1
编写于
3月 21, 2022
作者:
U
Ulric Qin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
sync busi_group
上级
c9be9b05
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
125 addition
and
16 deletion
+125
-16
src/models/busi_group.go
src/models/busi_group.go
+12
-0
src/models/target.go
src/models/target.go
+0
-13
src/server/memsto/busi_group_cache.go
src/server/memsto/busi_group_cache.go
+102
-0
src/server/memsto/memsto.go
src/server/memsto/memsto.go
+2
-1
src/server/memsto/target_cache.go
src/server/memsto/target_cache.go
+9
-2
未找到文件。
src/models/busi_group.go
浏览文件 @
6d9846f1
...
...
@@ -313,3 +313,15 @@ func BusiGroupAdd(name string, labelEnable int, labelValue string, members []Bus
return
nil
})
}
func
BusiGroupStatistics
()
(
*
Statistics
,
error
)
{
session
:=
DB
()
.
Model
(
&
BusiGroup
{})
.
Select
(
"count(*) as total"
,
"max(update_at) as last_updated"
)
var
stats
[]
*
Statistics
err
:=
session
.
Find
(
&
stats
)
.
Error
if
err
!=
nil
{
return
nil
,
err
}
return
stats
[
0
],
nil
}
src/models/target.go
浏览文件 @
6d9846f1
...
...
@@ -127,19 +127,6 @@ func TargetGetsByCluster(cluster string) ([]*Target, error) {
var
lst
[]
*
Target
err
:=
session
.
Find
(
&
lst
)
.
Error
if
err
==
nil
{
bgcache
,
err
:=
BusiGroupGetMap
()
if
err
!=
nil
{
return
nil
,
err
}
for
i
:=
0
;
i
<
len
(
lst
);
i
++
{
err
=
lst
[
i
]
.
FillGroup
(
bgcache
)
if
err
!=
nil
{
return
nil
,
err
}
}
}
return
lst
,
err
}
...
...
src/server/memsto/busi_group_cache.go
0 → 100644
浏览文件 @
6d9846f1
package
memsto
import
(
"fmt"
"sync"
"time"
"github.com/pkg/errors"
"github.com/toolkits/pkg/logger"
"github.com/didi/nightingale/v5/src/models"
"github.com/didi/nightingale/v5/src/server/config"
promstat
"github.com/didi/nightingale/v5/src/server/stat"
)
type
BusiGroupCacheType
struct
{
statTotal
int64
statLastUpdated
int64
sync
.
RWMutex
ugs
map
[
int64
]
*
models
.
BusiGroup
// key: id
}
var
BusiGroupCache
=
BusiGroupCacheType
{
statTotal
:
-
1
,
statLastUpdated
:
-
1
,
ugs
:
make
(
map
[
int64
]
*
models
.
BusiGroup
),
}
func
(
c
*
BusiGroupCacheType
)
StatChanged
(
total
,
lastUpdated
int64
)
bool
{
if
c
.
statTotal
==
total
&&
c
.
statLastUpdated
==
lastUpdated
{
return
false
}
return
true
}
func
(
c
*
BusiGroupCacheType
)
Set
(
ugs
map
[
int64
]
*
models
.
BusiGroup
,
total
,
lastUpdated
int64
)
{
c
.
Lock
()
c
.
ugs
=
ugs
c
.
Unlock
()
// only one goroutine used, so no need lock
c
.
statTotal
=
total
c
.
statLastUpdated
=
lastUpdated
}
func
(
c
*
BusiGroupCacheType
)
GetByBusiGroupId
(
id
int64
)
*
models
.
BusiGroup
{
c
.
RLock
()
defer
c
.
RUnlock
()
return
c
.
ugs
[
id
]
}
func
SyncBusiGroups
()
{
err
:=
syncBusiGroups
()
if
err
!=
nil
{
fmt
.
Println
(
"failed to sync busi groups:"
,
err
)
exit
(
1
)
}
go
loopSyncBusiGroups
()
}
func
loopSyncBusiGroups
()
{
duration
:=
time
.
Duration
(
9000
)
*
time
.
Millisecond
for
{
time
.
Sleep
(
duration
)
if
err
:=
syncBusiGroups
();
err
!=
nil
{
logger
.
Warning
(
"failed to sync busi groups:"
,
err
)
}
}
}
func
syncBusiGroups
()
error
{
start
:=
time
.
Now
()
stat
,
err
:=
models
.
BusiGroupStatistics
()
if
err
!=
nil
{
return
errors
.
WithMessage
(
err
,
"failed to exec BusiGroupStatistics"
)
}
if
!
BusiGroupCache
.
StatChanged
(
stat
.
Total
,
stat
.
LastUpdated
)
{
promstat
.
GaugeCronDuration
.
WithLabelValues
(
config
.
C
.
ClusterName
,
"sync_busi_groups"
)
.
Set
(
0
)
promstat
.
GaugeSyncNumber
.
WithLabelValues
(
config
.
C
.
ClusterName
,
"sync_busi_groups"
)
.
Set
(
0
)
logger
.
Debug
(
"busi_group not changed"
)
return
nil
}
m
,
err
:=
models
.
BusiGroupGetMap
()
if
err
!=
nil
{
return
errors
.
WithMessage
(
err
,
"failed to exec BusiGroupGetMap"
)
}
BusiGroupCache
.
Set
(
m
,
stat
.
Total
,
stat
.
LastUpdated
)
ms
:=
time
.
Since
(
start
)
.
Milliseconds
()
promstat
.
GaugeCronDuration
.
WithLabelValues
(
config
.
C
.
ClusterName
,
"sync_busi_groups"
)
.
Set
(
float64
(
ms
))
promstat
.
GaugeSyncNumber
.
WithLabelValues
(
config
.
C
.
ClusterName
,
"sync_busi_groups"
)
.
Set
(
float64
(
len
(
m
)))
logger
.
Infof
(
"timer: sync busi groups done, cost: %dms, number: %d"
,
ms
,
len
(
m
))
return
nil
}
src/server/memsto/memsto.go
浏览文件 @
6d9846f1
...
...
@@ -12,10 +12,11 @@ func exit(code int) {
}
func
Sync
()
{
Sync
Target
s
()
Sync
BusiGroup
s
()
SyncUsers
()
SyncUserGroups
()
SyncAlertMutes
()
SyncAlertSubscribes
()
SyncAlertRules
()
SyncTargets
()
}
src/server/memsto/target_cache.go
浏览文件 @
6d9846f1
...
...
@@ -125,8 +125,15 @@ func syncTargets() error {
// handle BusiGroup's LabelValue
// BusiGroup的LabelValue就相当于一个特殊的标签来对待
if
lst
[
i
]
.
GroupObj
!=
nil
&&
lst
[
i
]
.
GroupObj
.
LabelEnable
==
1
{
lst
[
i
]
.
TagsMap
[
"busigroup"
]
=
lst
[
i
]
.
GroupObj
.
LabelValue
if
lst
[
i
]
.
GroupId
>
0
{
bg
:=
BusiGroupCache
.
GetByBusiGroupId
(
lst
[
i
]
.
GroupId
)
if
bg
==
nil
{
return
errors
.
New
(
"busi group cache not ready"
)
}
if
bg
.
LabelEnable
==
1
{
lst
[
i
]
.
TagsMap
[
"busigroup"
]
=
bg
.
LabelValue
}
}
m
[
lst
[
i
]
.
Ident
]
=
lst
[
i
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录