Plugins: Fix support for adhoc filters with raw queries in InfluxDB (#101966)

Plugins: Fix support for adhoc filters with raw queries in InfluxDB

Fixes #101635.
This commit is contained in:
beejeebus
2025-03-17 12:07:33 -04:00
committed by GitHub
parent 83c3c01769
commit 3bdb2aa349
4 changed files with 176 additions and 5 deletions
+38
View File
@@ -36,6 +36,11 @@ func QueryParse(query backend.DataQuery, logger log.Logger) (*Query, error) {
measurement := model.Get("measurement").MustString("")
resultFormat := model.Get("resultFormat").MustString("")
adhocFilters, err := parseAdhocFilters(model.Get("adhocFilters").MustArray())
if err != nil {
return nil, errors.Join(ErrInvalidQuery, err)
}
tags, err := parseTags(model)
if err != nil {
return nil, errors.Join(ErrInvalidQuery, err)
@@ -84,6 +89,7 @@ func QueryParse(query backend.DataQuery, logger log.Logger) (*Query, error) {
OrderByTime: orderByTime,
ResultFormat: resultFormat,
Statement: statement,
AdhocFilters: adhocFilters,
}, nil
}
@@ -111,6 +117,38 @@ func parseSelects(model *simplejson.Json) ([]*Select, error) {
return result, nil
}
func parseAdhocFilters(adhocFilters []any) ([]*Tag, error) {
result := make([]*Tag, 0, len(adhocFilters))
for _, t := range adhocFilters {
tagJson := simplejson.NewFromAny(t)
tag := &Tag{}
var err error
tag.Key, err = tagJson.Get("key").String()
if err != nil {
return nil, err
}
tag.Value, err = tagJson.Get("value").String()
if err != nil {
return nil, err
}
operator, err := tagJson.Get("operator").String()
if err == nil {
tag.Operator = operator
}
condition, err := tagJson.Get("condition").String()
if err == nil {
tag.Condition = condition
}
result = append(result, tag)
}
return result, nil
}
func parseTags(model *simplejson.Json) ([]*Tag, error) {
tags := model.Get("tags").MustArray()
result := make([]*Tag, 0, len(tags))