mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
api/ds/query: simplify data sources lookup for queries and expressions (#41172)
This commit is contained in:
@@ -30,62 +30,19 @@ type rawNode struct {
|
||||
Query map[string]interface{}
|
||||
QueryType string
|
||||
TimeRange TimeRange
|
||||
DatasourceUID string
|
||||
DatasourceUID string // Gets populated from Either DatasourceUID or Datasource.UID
|
||||
}
|
||||
|
||||
func (rn *rawNode) GetDatasourceUID() (string, error) {
|
||||
if rn.DatasourceUID != "" {
|
||||
return rn.DatasourceUID, nil
|
||||
func (rn *rawNode) IsExpressionQuery() bool {
|
||||
if IsDataSource(rn.DatasourceUID) {
|
||||
return true
|
||||
}
|
||||
|
||||
rawDs, ok := rn.Query["datasource"]
|
||||
if !ok {
|
||||
return "", fmt.Errorf("no datasource property found in query model")
|
||||
if v, ok := rn.Query["datasourceId"]; ok {
|
||||
if v == OldDatasourceUID {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// For old queries with string datasource prop representing data source name
|
||||
if dsName, ok := rawDs.(string); ok {
|
||||
return dsName, nil
|
||||
}
|
||||
|
||||
dsRef, ok := rawDs.(map[string]interface{})
|
||||
if !ok {
|
||||
return "", fmt.Errorf("data source property is not an object nor string, got %T", rawDs)
|
||||
}
|
||||
|
||||
if dsUid, ok := dsRef["uid"].(string); ok {
|
||||
return dsUid, nil
|
||||
}
|
||||
|
||||
return "", fmt.Errorf("no datasource uid found for query, got %T", rn.Query)
|
||||
}
|
||||
|
||||
func (rn *rawNode) IsExpressionQuery() (bool, error) {
|
||||
if rn.DatasourceUID != "" {
|
||||
return rn.DatasourceUID == DatasourceUID, nil
|
||||
}
|
||||
|
||||
rawDs, ok := rn.Query["datasource"]
|
||||
if !ok {
|
||||
return false, fmt.Errorf("no datasource property found in query model")
|
||||
}
|
||||
|
||||
// For old queries with string datasource prop representing data source name
|
||||
dsName, ok := rawDs.(string)
|
||||
if ok && dsName == DatasourceName {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
dsRef, ok := rawDs.(map[string]interface{})
|
||||
if !ok {
|
||||
return false, nil
|
||||
}
|
||||
|
||||
if dsRef["uid"].(string) == DatasourceUID {
|
||||
return true, nil
|
||||
}
|
||||
|
||||
return false, nil
|
||||
return false
|
||||
}
|
||||
|
||||
func (rn *rawNode) GetCommandType() (c CommandType, err error) {
|
||||
@@ -213,6 +170,7 @@ func (s *Service) buildDSNode(dp *simple.DirectedGraph, rn *rawNode, req *Reques
|
||||
request: *req,
|
||||
}
|
||||
|
||||
// support old datasourceId property
|
||||
rawDsID, ok := rn.Query["datasourceId"]
|
||||
if ok {
|
||||
floatDsID, ok := rawDsID.(float64)
|
||||
@@ -221,11 +179,7 @@ func (s *Service) buildDSNode(dp *simple.DirectedGraph, rn *rawNode, req *Reques
|
||||
}
|
||||
dsNode.datasourceID = int64(floatDsID)
|
||||
} else {
|
||||
dsUid, err := rn.GetDatasourceUID()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("neither datasourceId or datasourceUid in expression data source request for refId %v", rn.RefID)
|
||||
}
|
||||
dsNode.datasourceUID = dsUid
|
||||
dsNode.datasourceUID = rn.DatasourceUID
|
||||
}
|
||||
|
||||
var floatIntervalMS float64
|
||||
|
||||
Reference in New Issue
Block a user