Alerting: Extract values from MD expr alerts (#34757)

When using mulit-dimensional Grafana managed alerts (e.g. SSE math) extract refIds values and labels so they can be shown in the notification and dashboards.
This commit is contained in:
Kyle Brandt
2021-05-28 11:04:20 -04:00
committed by GitHub
parent 8143991b94
commit b47e7d12e6
4 changed files with 100 additions and 23 deletions
+38 -17
View File
@@ -17,30 +17,51 @@ func extractEvalString(frame *data.Frame) (s string) {
return
}
evalMatches, ok := frame.Meta.Custom.([]classic.EvalMatch)
if !ok {
return
if evalMatches, ok := frame.Meta.Custom.([]classic.EvalMatch); ok {
sb := strings.Builder{}
for i, m := range evalMatches {
sb.WriteString("[ ")
sb.WriteString(fmt.Sprintf("metric='%s' ", m.Metric))
sb.WriteString(fmt.Sprintf("labels={%s} ", m.Labels))
valString := "null"
if m.Value != nil {
valString = fmt.Sprintf("%v", *m.Value)
}
sb.WriteString(fmt.Sprintf("value=%v ", valString))
sb.WriteString("]")
if i < len(evalMatches)-1 {
sb.WriteString(", ")
}
}
return sb.String()
}
sb := strings.Builder{}
if caps, ok := frame.Meta.Custom.([]NumberValueCapture); ok {
sb := strings.Builder{}
for i, m := range evalMatches {
sb.WriteString("[ ")
sb.WriteString(fmt.Sprintf("metric='%s' ", m.Metric))
sb.WriteString(fmt.Sprintf("labels={%s} ", m.Labels))
for i, c := range caps {
sb.WriteString("[ ")
sb.WriteString(fmt.Sprintf("var='%s' ", c.Var))
sb.WriteString(fmt.Sprintf("labels={%s} ", c.Labels))
valString := "null"
if m.Value != nil {
valString = fmt.Sprintf("%v", *m.Value)
}
valString := "null"
if c.Value != nil {
valString = fmt.Sprintf("%v", *c.Value)
}
sb.WriteString(fmt.Sprintf("value=%v ", valString))
sb.WriteString(fmt.Sprintf("value=%v ", valString))
sb.WriteString("]")
if i < len(evalMatches)-1 {
sb.WriteString(", ")
sb.WriteString("]")
if i < len(caps)-1 {
sb.WriteString(", ")
}
}
return sb.String()
}
return sb.String()
return ""
}