Browse Source

fix: quotation mark for alert rule var (#2339)

main
Xu Bin GitHub 1 year ago
parent
commit
98402e9f8a
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 6 deletions
  1. +9
    -2
      alert/eval/eval.go
  2. +4
    -4
      alert/eval/eval_test.go

+ 9
- 2
alert/eval/eval.go View File

@@ -377,7 +377,7 @@ func (arw *AlertRuleWorker) VarFillingAfterQuery(query models.PromQuery, readerC
for _, paramKey := range ParamKeys {
val := string(seqVals[i].Metric[model.LabelName(varToLabel[paramKey])])
cur = append(cur, val)
curRealQuery = strings.Replace(curRealQuery, fmt.Sprintf("\"$%s\"", paramKey), fmt.Sprintf("\"%s\"", val), -1)
curRealQuery = fillVar(curRealQuery, paramKey, val)
}

if _, ok := paramPermutation[strings.Join(cur, "-")]; ok {
@@ -1271,7 +1271,7 @@ func (arw *AlertRuleWorker) VarFillingBeforeQuery(query models.PromQuery, reader
realPromql := curPromql
split := strings.Split(paramPermutationKeys, "-")
for j := range ParamKeys {
realPromql = strings.Replace(realPromql, fmt.Sprintf("$%s", ParamKeys[j]), split[j], -1)
realPromql = fillVar(realPromql, ParamKeys[j], split[j])
}
keyToPromql[paramPermutationKeys] = realPromql
}
@@ -1373,6 +1373,7 @@ func ExtractVarMapping(promql string) map[string]string {

key := strings.TrimSpace(kv[0])
value := strings.Trim(strings.TrimSpace(kv[1]), "\"")
value = strings.Trim(value, "'")

// 检查值是否为变量(以$开头)
if strings.HasPrefix(value, "$") {
@@ -1387,3 +1388,9 @@ func ExtractVarMapping(promql string) map[string]string {

return varMapping
}

func fillVar(curRealQuery string, paramKey string, val string) string {
curRealQuery = strings.Replace(curRealQuery, fmt.Sprintf("'$%s'", paramKey), fmt.Sprintf("'%s'", val), -1)
curRealQuery = strings.Replace(curRealQuery, fmt.Sprintf("\"$%s\"", paramKey), fmt.Sprintf("\"%s\"", val), -1)
return curRealQuery
}

+ 4
- 4
alert/eval/eval_test.go View File

@@ -340,7 +340,7 @@ func Test_removeVal(t *testing.T) {
{
name: "removeVal7",
args: args{
promql: "mem{test1=\"test1\",test2=\"test2\",test3=\"$test3\"} > $val",
promql: "mem{test1=\"test1\",test2=\"test2\",test3='$test3'} > $val",
},
want: "mem{test1=\"test1\",test2=\"test2\"} > $val",
},
@@ -361,16 +361,16 @@ func Test_removeVal(t *testing.T) {
{
name: "removeVal10",
args: args{
promql: "mem{test1=\"test1\",test2=\"$test2\"} > $val1 and mem{test3=\"test3\",test4=\"test4\"} > $val2",
promql: "mem{test1=\"test1\",test2='$test2'} > $val1 and mem{test3=\"test3\",test4=\"test4\"} > $val2",
},
want: "mem{test1=\"test1\"} > $val1 and mem{test3=\"test3\",test4=\"test4\"} > $val2",
},
{
name: "removeVal11",
args: args{
promql: "mem{test1=\"test1\",test2=\"test2\"} > $val1 and mem{test3=\"$test3\",test4=\"test4\"} > $val2",
promql: "mem{test1='test1',test2=\"test2\"} > $val1 and mem{test3=\"$test3\",test4=\"test4\"} > $val2",
},
want: "mem{test1=\"test1\",test2=\"test2\"} > $val1 and mem{test4=\"test4\"} > $val2",
want: "mem{test1='test1',test2=\"test2\"} > $val1 and mem{test4=\"test4\"} > $val2",
},
{
name: "removeVal12",


Loading…
Cancel
Save