宏
宏函数是根据提供的参数执行操作并产生结果的实用函数。您可以在查询 URL、Body、Inline data、UQL、GROQ 字段中使用宏函数。
此插件提供以下宏
自定义间隔宏 ($__customInterval()
)
自定义间隔宏根据仪表盘时间范围生成值。您可以为此宏传递多个条件和值。这类似于编程语言中的 If else 条件。
$__customInterval
宏的参数数量必须为 3/5/7/9..。
语法:$__customInterval(duration1,value1,duration2,value2,duration3,value3,duration4,value4,defaultValue)
。Duration 必须是有效的 duration 语法,如 1m
, 2d
等。
说明:如果 dashboardTimeRange <=
duration1 则返回 value1,否则如果 dashboardTimeRange <=
duration2 则返回 value2,否则如果 dashboardTimeRange <=
duration3 则返回 value3,否则如果 dashboardTimeRange <=
duration4 则返回 value4,否则返回 default value。
示例:$__customInterval(5m,foo,1d,bar,10d,baz,fuzz)
。如果仪表盘时间范围是最近 3 小时,则结果将是 bar。
更多示例如下
仪表盘范围 | 查询 | 输出 |
---|---|---|
24 小时 | $__customInterval(1m,1 MIN,1d) | 1d |
24 小时 | $__customInterval(2d,2 DAYS,1d) | 2 DAYS |
24 小时 | $__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d) | 1 DAY |
7 天 | $__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d) | 10 天 |
30 天 | $__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d) | 1d |
30 天 | http.://foo.com?d=$__customInterval(5m,5 MINUTES,1d,1 DAY,10d,10 days,1d)&type=test | http.://foo.com?d=1d&type=test |
组合值宏 ($__combineValues()
)
组合值宏允许您将多个字符串与前缀、后缀和中间值组合。此宏的第一个参数是前缀,第二个参数是后缀,第三个参数是中间值。
此宏所需的最小参数数量为 4。此宏的参数数量必须为 4/5/6/7…。
对于前缀、后缀和中间值,您还可以使用以下特殊转义词。__comma
–> ,
/ __space
–> 一个空格 ( )
/ __open
–> (
/ __close
–> )
。
语法:$__combineValues(prefix,suffix,in-between-value,value1,value2,value3)
说明:在上面的示例中,所有的 value1、value2、value3 都将分别附加前缀和后缀。然后所有内容将通过中间值连接。
示例:$__combineValues(key=,__space, OR ,value1,value2,value3)
将生成 key=value1 OR key=value2 OR key=value3。注意:在此示例中,我们使用了特殊的转义后缀 __space
。
此宏有一个特殊之处,即当有四个参数且第四个参数为
*
时,它返回空字符串。
更多示例如下
查询 | 输出 |
---|---|
$__combineValues(p,s,i,v) | pvs |
$__combineValues(p,s,__space,v1,v2) | pv1s pv2s |
$__combineValues(__open,__close, OR ,foo,bar) | (foo) OR (bar) |
$__combineValues(,, OR ,foo,bar) | foo OR bar |
hello $__combineValues(,, OR ,foo,bar) $__combineValues(,, OR ,foo,bar) world | hello foo OR bar foo OR bar world |
$__combineValues(p,s,i,*) | 空字符串 |
此宏与多值仪表盘变量结合使用时会更有用。考虑以下示例。
变量名:server
多值:true
自定义所有值:true 且值为 *
选定值 | 查询 | 输出 |
---|---|---|
server2,server3,server5 | ${server:csv} | server2,server3,server5 |
server2,server3,server5 | $__combineValues(foo:,, OR ,${server:csv}) | foo:server2 OR foo:server3 OR foo:server5 |
server2 | $__combineValues(foo:,, OR ,${server:csv}) | foo:server2 |
全部 | $__combineValues(foo:,, OR ,${server:csv}) | 空字符串 |
server2,server3,server5 | ($__combineValues(foo:,, OR ,${server:csv})) | (foo:server2 OR foo:server3 OR foo:server5) |
全部 | ($__combineValues(foo:,, OR ,${server:csv})) | () |
server2,server3,server5 | $__combineValues(foo:,,__comma,${server:csv}) | foo:server2,foo:server3,foo:server5 |
时间宏 (${__timeFrom}
和 ${__timeTo}
)
从 v2.7.1 开始,您可以使用时间宏 ${__timeFrom}
和 ${__timeTo}
,它们将在后端进行插值。例如,如果您的仪表盘开始时间是 2020-07-13T20:19:09.254Z
,则宏将按如下方式进行插值。
宏 | 输出 |
---|---|
${__timeFrom} | 1594671549254 |
${__timeFrom:date:seconds} | 1594671549 |
${__timeFrom:date} | 2020-07-13T20:19:09.254Z |
${__timeFrom:date:iso} | 2020-07-13T20:19:09.254Z |
${__timeFrom:date:YYYY:MM:DD:hh:mm} | 2020:07:13:08:19 |
${__timeFrom:date:YYYY-MM-DD} | 2020-07-13 |
在 infinity 2.7.1+ 中,由于前端处理 grafana 全局宏(${__from}
和 ${__to}
)的限制,这是比 grafana 全局变量时间宏更优选的时间宏。