为数据分配自定义状态
问题
您可能想要使用 monitor
包 并利用诸如 monitor.stateChangesOnly() 之类的函数。但是,monitor.stateChangesOnly()
只允许您监控四种状态:“crit”、“warn”、“ok” 和 “info”。如果您想要能够跨自定义状态或超过四种状态分配和监控状态更改,该怎么办?
解决方案
定义您自己的自定义 stateChangesOnly()
函数。使用此处源代码中的函数并对其进行修改,以适应四个以上的级别。在这里,我们考虑了六个不同的级别,而不仅仅是四个。
import "dict"
import "experimental"
stateChangesOnly = (tables=<-) => {
levelInts =
[
"customLevel1": 1,
"customLevel2": 2,
"customLevel3": 3,
"customLevel4": 4,
"customLevel5": 5,
"customLevel6": 6,
]
return
tables
|> map(fn: (r) => ({r with level_value: dict.get(dict: levelInts, key: r._level, default: 0)}))
|> duplicate(column: "_level", as: "____temp_level____")
|> drop(columns: ["_level"])
|> rename(columns: {"____temp_level____": "_level"})
|> sort(columns: ["_source_timestamp", "_time"], desc: false)
|> difference(columns: ["level_value"])
|> filter(fn: (r) => r.level_value != 0)
|> drop(columns: ["level_value"])
|> experimental.group(mode: "extend", columns: ["_level"])
}
使用 array.from()
构建一些示例数据,并将自定义级别映射到它
array.from(
rows: [
{_value: 0.0},
{_value: 3.0},
{_value: 5.0},
{_value: 7.0},
{_value: 7.5},
{_value: 9.0},
{_value: 11.0},
],
)
|> map(
fn: (r) =>
({r with _level:
if r._value <= 2.0 then
"customLevel2"
else if r._value <= 4.0 and r._value > 2.0 then
"customLevel3"
else if r._value <= 6.0 and r._value > 4.0 then
"customLevel4"
else if r._value <= 8.0 and r._value > 6.0 then
"customLevel5"
else
"customLevel6",
}),
)
示例数据如下所示
_value | _level |
---|---|
0.0 | customLevel2 |
3.0 | customLevel3 |
5.0 | customLevel4 |
7.0 | customLevel5 |
7.5 | customLevel5 |
9.0 | customLevel6 |
11.0 | customLevel6 |
现在应用我们的自定义 stateChangesOnly()
函数
import "array"
import "dict"
import "experimental"
stateChangesOnly = (tables=<-) => {
levelInts =
[
"customLevel1": 1,
"customLevel2": 2,
"customLevel3": 3,
"customLevel4": 4,
"customLevel5": 5,
"customLevel6": 6,
]
return
tables
|> map(fn: (r) => ({r with level_value: dict.get(dict: levelInts, key: r._level, default: 0)}))
|> duplicate(column: "_level", as: "____temp_level____")
|> drop(columns: ["_level"])
|> rename(columns: {"____temp_level____": "_level"})
|> sort(columns: ["_source_timestamp", "_time"], desc: false)
|> difference(columns: ["level_value"])
|> filter(fn: (r) => r.level_value != 0)
|> drop(columns: ["level_value"])
|> experimental.group(mode: "extend", columns: ["_level"])
}
data =
array.from(
rows: [
{_value: 0.0},
{_value: 3.0},
{_value: 5.0},
{_value: 7.0},
{_value: 7.5},
{_value: 9.0},
{_value: 11.0},
],
)
|> map(
fn: (r) =>
({r with _level:
if r._value <= 2.0 then
"customLevel2"
else if r._value <= 4.0 and r._value > 2.0 then
"customLevel3"
else if r._value <= 6.0 and r._value > 4.0 then
"customLevel4"
else if r._value <= 8.0 and r._value > 6.0 then
"customLevel5"
else
"customLevel6",
}),
)
data
|> stateChangesOnly()
这将返回
_value | _level |
---|---|
3.0 | customLevel3 |
5.0 | customLevel4 |
7.0 | customLevel5 |
9.0 | customLevel6 |
此页是否对您有帮助?
感谢您的反馈!