mirror of
https://github.com/grafana/grafana.git
synced 2025-01-27 16:57:14 -06:00
Plugins: Prefer to use the data source UID when querying (#62776)
This commit is contained in:
parent
1204d607a5
commit
68862ce3e8
@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/grafana/grafana/pkg/api/dtos"
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
@ -287,7 +286,7 @@ func (hs *HTTPServer) getFSDataSources(c *contextmodel.ReqContext, enabledPlugin
|
||||
url := ds.Url
|
||||
|
||||
if ds.Access == datasources.DS_ACCESS_PROXY {
|
||||
url = "/api/datasources/proxy/" + strconv.FormatInt(ds.Id, 10)
|
||||
url = "/api/datasources/proxy/uid/" + ds.Uid
|
||||
}
|
||||
|
||||
dsDTO := plugins.DataSourceDTO{
|
||||
|
@ -322,18 +322,18 @@ func (s *Service) getDataSourceFromQuery(ctx context.Context, user *user.SignedI
|
||||
return grafanads.DataSourceModel(user.OrgID), nil
|
||||
}
|
||||
|
||||
// use datasourceId if it exists
|
||||
id := query.Get("datasourceId").MustInt64(0)
|
||||
if id > 0 {
|
||||
ds, err = s.dataSourceCache.GetDatasource(ctx, id, user, skipCache)
|
||||
if uid != "" {
|
||||
ds, err = s.dataSourceCache.GetDatasourceByUID(ctx, uid, user, skipCache)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ds, nil
|
||||
}
|
||||
|
||||
if uid != "" {
|
||||
ds, err = s.dataSourceCache.GetDatasourceByUID(ctx, uid, user, skipCache)
|
||||
// use datasourceId if it exists
|
||||
id := query.Get("datasourceId").MustInt64(0)
|
||||
if id > 0 {
|
||||
ds, err = s.dataSourceCache.GetDatasource(ctx, id, user, skipCache)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
@ -380,6 +381,33 @@ func TestQueryDataMultipleSources(t *testing.T) {
|
||||
// Responses aren't mocked, so a "healthy" query will just return an empty response
|
||||
require.NotContains(t, res.Responses, "A")
|
||||
})
|
||||
|
||||
t.Run("ignores a deprecated datasourceID", func(t *testing.T) {
|
||||
tc := setup(t)
|
||||
query1, err := simplejson.NewJson([]byte(`
|
||||
{
|
||||
"datasource": {
|
||||
"type": "mysql",
|
||||
"uid": "ds1"
|
||||
},
|
||||
"datasourceId": 1,
|
||||
"refId": "A"
|
||||
}
|
||||
`))
|
||||
require.NoError(t, err)
|
||||
queries := []*simplejson.Json{query1}
|
||||
reqDTO := dtos.MetricRequest{
|
||||
From: "2022-01-01",
|
||||
To: "2022-01-02",
|
||||
Queries: queries,
|
||||
Debug: false,
|
||||
PublicDashboardAccessToken: "abc123",
|
||||
}
|
||||
|
||||
_, err = tc.queryService.QueryData(context.Background(), tc.signedInUser, true, reqDTO)
|
||||
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func setup(t *testing.T) *testContext {
|
||||
@ -449,7 +477,8 @@ type fakeDataSourceCache struct {
|
||||
}
|
||||
|
||||
func (c *fakeDataSourceCache) GetDatasource(ctx context.Context, datasourceID int64, user *user.SignedInUser, skipCache bool) (*datasources.DataSource, error) {
|
||||
return c.ds, nil
|
||||
// deprecated: fake an error to ensure we are using GetDatasourceByUID
|
||||
return nil, fmt.Errorf("not found")
|
||||
}
|
||||
|
||||
func (c *fakeDataSourceCache) GetDatasourceByUID(ctx context.Context, datasourceUID string, user *user.SignedInUser, skipCache bool) (*datasources.DataSource, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user