2021-05-18 08:12:39 -05:00
|
|
|
package eval
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/data"
|
|
|
|
"github.com/grafana/grafana/pkg/expr/classic"
|
|
|
|
)
|
|
|
|
|
|
|
|
func extractEvalString(frame *data.Frame) (s string) {
|
|
|
|
if frame == nil {
|
|
|
|
return "empty frame"
|
|
|
|
}
|
|
|
|
|
|
|
|
if frame.Meta == nil || frame.Meta.Custom == nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
if evalMatches, ok := frame.Meta.Custom.([]classic.EvalMatch); ok {
|
|
|
|
sb := strings.Builder{}
|
2021-05-18 08:12:39 -05:00
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
for i, m := range evalMatches {
|
|
|
|
sb.WriteString("[ ")
|
|
|
|
sb.WriteString(fmt.Sprintf("metric='%s' ", m.Metric))
|
|
|
|
sb.WriteString(fmt.Sprintf("labels={%s} ", m.Labels))
|
2021-05-18 08:12:39 -05:00
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
valString := "null"
|
|
|
|
if m.Value != nil {
|
|
|
|
valString = fmt.Sprintf("%v", *m.Value)
|
|
|
|
}
|
2021-05-18 08:12:39 -05:00
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
sb.WriteString(fmt.Sprintf("value=%v ", valString))
|
|
|
|
|
|
|
|
sb.WriteString("]")
|
|
|
|
if i < len(evalMatches)-1 {
|
|
|
|
sb.WriteString(", ")
|
|
|
|
}
|
2021-05-18 08:12:39 -05:00
|
|
|
}
|
2021-05-28 10:04:20 -05:00
|
|
|
return sb.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
if caps, ok := frame.Meta.Custom.([]NumberValueCapture); ok {
|
|
|
|
sb := strings.Builder{}
|
|
|
|
|
|
|
|
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 c.Value != nil {
|
|
|
|
valString = fmt.Sprintf("%v", *c.Value)
|
|
|
|
}
|
2021-05-18 08:12:39 -05:00
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
sb.WriteString(fmt.Sprintf("value=%v ", valString))
|
2021-05-18 08:12:39 -05:00
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
sb.WriteString("]")
|
|
|
|
if i < len(caps)-1 {
|
|
|
|
sb.WriteString(", ")
|
|
|
|
}
|
2021-05-18 08:12:39 -05:00
|
|
|
}
|
2021-05-28 10:04:20 -05:00
|
|
|
return sb.String()
|
2021-05-18 08:12:39 -05:00
|
|
|
}
|
|
|
|
|
2021-05-28 10:04:20 -05:00
|
|
|
return ""
|
2021-05-18 08:12:39 -05:00
|
|
|
}
|
2021-07-15 07:10:56 -05:00
|
|
|
|
|
|
|
// extractValues returns the RefID and value for all reduce and math expressions
|
|
|
|
// in the frame. It does not return values for classic conditions as the values
|
|
|
|
// in classic conditions do not have a RefID. It returns nil if there are
|
|
|
|
// no results in the frame.
|
|
|
|
func extractValues(frame *data.Frame) map[string]NumberValueCapture {
|
|
|
|
if frame == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
if frame.Meta == nil || frame.Meta.Custom == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
if caps, ok := frame.Meta.Custom.([]NumberValueCapture); ok {
|
|
|
|
v := make(map[string]NumberValueCapture, len(caps))
|
|
|
|
for _, c := range caps {
|
|
|
|
v[c.Var] = c
|
|
|
|
}
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|