为数据分配自定义状态
问题
您可能希望使用 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 |
此页面是否有帮助?
感谢您的反馈!