Skip to content

Commit 7d0b760

Browse files
gurinder39GurinderRawala
authored andcommitted
druid datasource fixes (#93)
* druid datasource fixes * wire gen fix
1 parent 957cf1e commit 7d0b760

File tree

8 files changed

+142
-48
lines changed

8 files changed

+142
-48
lines changed

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
16131613
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
16141614
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
16151615
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
1616+
github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pgdoow=
1617+
github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q=
16161618
github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
16171619
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
16181620
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=

pkg/api/plugin_resource_test.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,20 @@ func TestCallResource(t *testing.T) {
5050
cfg.StaticRootPath = staticRootPath
5151
cfg.Azure = &azsettings.AzureSettings{}
5252

53-
coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil,
54-
nil, nil, nil, nil, testdatasource.ProvideService(), nil, nil, nil, nil, nil, nil)
53+
coreRegistry := coreplugin.ProvideCoreRegistry(nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil,
54+
nil, nil, nil, nil, testdatasource.ProvideService(), nil, nil, nil, nil, nil, nil, nil)
55+
pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures())
56+
require.NoError(t, err)
57+
reg := registry.ProvideService()
58+
angularInspector, err := angularinspector.NewStaticInspector()
59+
require.NoError(t, err)
60+
l := loader.ProvideService(pCfg, fakes.NewFakeLicensingService(), signature.NewUnsignedAuthorizer(pCfg),
61+
reg, provider.ProvideService(coreRegistry), finder.NewLocalFinder(pCfg.DevMode), fakes.NewFakeRoleRegistry(),
62+
assetpath.ProvideService(pluginscdn.ProvideService(pCfg)), signature.ProvideService(statickey.New()),
63+
angularInspector, &fakes.FakeOauthService{})
64+
srcs := sources.ProvideService(cfg, pCfg)
65+
ps, err := store.ProvideService(reg, srcs, l)
66+
require.NoError(t, err)
5567

5668
testCtx := pluginsintegration.CreateIntegrationTestCtx(t, cfg, coreRegistry)
5769

pkg/plugins/backendplugin/coreplugin/registry.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ const (
4747
Loki = "loki"
4848
OpenTSDB = "opentsdb"
4949
Druid = "grafadruid-druid-datasource"
50-
Graphql = "fifemon-graphql-datasource"
5150
Prometheus = "prometheus"
5251
Tempo = "tempo"
5352
TestData = "grafana-testdata-datasource"
@@ -96,10 +95,7 @@ func NewRegistry(store map[string]backendplugin.PluginFactoryFunc) *Registry {
9695
func ProvideCoreRegistry(tracer tracing.Tracer, am *azuremonitor.Service, cw *cloudwatch.CloudWatchService, cm *cloudmonitoring.Service,
9796
es *elasticsearch.Service, grap *graphite.Service, idb *influxdb.Service, lk *loki.Service, otsdb *opentsdb.Service,
9897
pr *prometheus.Service, t *tempo.Service, td *testdatasource.Service, pg *postgres.Service, my *mysql.Service,
99-
ms *mssql.Service, graf *grafanads.Service, pyroscope *pyroscope.Service, parca *parca.Service) *Registry {
100-
// Non-optimal global solution to replace plugin SDK default tracer for core plugins.
101-
sdktracing.InitDefaultTracer(tracer)
102-
98+
ms *mssql.Service, graf *grafanads.Service, pyroscope *pyroscope.Service, parca *parca.Service, dr *druid.Service) *Registry {
10399
return NewRegistry(map[string]backendplugin.PluginFactoryFunc{
104100
CloudWatch: asBackendPlugin(cw.Executor),
105101
CloudMonitoring: asBackendPlugin(cm),

pkg/plugins/pfs/corelist/corelist_load_gen.go

+90
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/server/wire.go

+4
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ import (
7474
"github.com/grafana/grafana/pkg/services/featuremgmt"
7575
"github.com/grafana/grafana/pkg/services/folder"
7676
"github.com/grafana/grafana/pkg/services/folder/folderimpl"
77+
grafanaapiserver "github.com/grafana/grafana/pkg/services/grafana-apiserver"
7778
"github.com/grafana/grafana/pkg/services/grpcserver"
7879
grpccontext "github.com/grafana/grafana/pkg/services/grpcserver/context"
7980
"github.com/grafana/grafana/pkg/services/grpcserver/interceptors"
@@ -174,6 +175,9 @@ import (
174175
)
175176

176177
var wireBasicSet = wire.NewSet(
178+
druid.ProvideService,
179+
legacydataservice.ProvideService,
180+
wire.Bind(new(legacydata.RequestHandler), new(*legacydataservice.Service)),
177181
annotationsimpl.ProvideService,
178182
wire.Bind(new(annotations.Repository), new(*annotationsimpl.RepositoryImpl)),
179183
New,

pkg/services/pluginsintegration/plugins_integration_test.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/grafana/grafana/pkg/tsdb/azuremonitor"
2727
cloudmonitoring "github.com/grafana/grafana/pkg/tsdb/cloud-monitoring"
2828
"github.com/grafana/grafana/pkg/tsdb/cloudwatch"
29+
"github.com/grafana/grafana/pkg/tsdb/druid"
2930
"github.com/grafana/grafana/pkg/tsdb/elasticsearch"
3031
postgres "github.com/grafana/grafana/pkg/tsdb/grafana-postgresql-datasource"
3132
pyroscope "github.com/grafana/grafana/pkg/tsdb/grafana-pyroscope-datasource"
@@ -94,9 +95,23 @@ func TestIntegrationPluginManager(t *testing.T) {
9495
graf := grafanads.ProvideService(sv2, nil)
9596
pyroscope := pyroscope.ProvideService(hcp)
9697
parca := parca.ProvideService(hcp)
97-
coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, pyroscope, parca)
98+
druid := druid.ProvideService(hcp)
9899

99-
testCtx := CreateIntegrationTestCtx(t, cfg, coreRegistry)
100+
coreRegistry := coreplugin.ProvideCoreRegistry(am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, phlare, parca, druid)
101+
102+
pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures())
103+
require.NoError(t, err)
104+
reg := registry.ProvideService()
105+
lic := plicensing.ProvideLicensing(cfg, &licensing.OSSLicensingService{Cfg: cfg})
106+
angularInspector, err := angularinspector.NewStaticInspector()
107+
require.NoError(t, err)
108+
l := loader.ProvideService(pCfg, lic, signature.NewUnsignedAuthorizer(pCfg),
109+
reg, provider.ProvideService(coreRegistry), finder.NewLocalFinder(pCfg.DevMode), fakes.NewFakeRoleRegistry(),
110+
assetpath.ProvideService(pluginscdn.ProvideService(pCfg)), signature.ProvideService(statickey.New()),
111+
angularInspector, &fakes.FakeOauthService{})
112+
srcs := sources.ProvideService(cfg, pCfg)
113+
ps, err := store.ProvideService(reg, srcs, l)
114+
require.NoError(t, err)
100115

101116
ctx := context.Background()
102117
verifyCorePluginCatalogue(t, ctx, testCtx.PluginStore)
@@ -191,6 +206,7 @@ func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *pluginstor
191206
"zipkin": {},
192207
"grafana-pyroscope-datasource": {},
193208
"parca": {},
209+
"druid": {},
194210
}
195211

196212
expApps := map[string]struct{}{

pkg/tsdb/druid/druid.go

+9-35
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"strings"
1212
"time"
1313

14-
"github.com/Knetic/govaluate"
1514
"github.com/bitly/go-simplejson"
1615
"github.com/grafadruid/go-druid"
1716
druidquerybuilder "github.com/grafadruid/go-druid/builder"
@@ -196,7 +195,7 @@ type grafanaMetricFindValue struct {
196195
}
197196

198197
func (ds *Service) QueryVariableData(ctx context.Context, req *backend.CallResourceRequest) ([]grafanaMetricFindValue, error) {
199-
s, err := ds.settings(req.PluginContext)
198+
s, err := ds.settings(req.PluginContext, ctx)
200199
if err != nil {
201200
return []grafanaMetricFindValue{}, err
202201
}
@@ -286,7 +285,7 @@ func (ds *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthRequ
286285
Message: "Can't connect to Druid",
287286
}
288287

289-
i, err := ds.im.Get(req.PluginContext)
288+
i, err := ds.im.Get(ctx, req.PluginContext)
290289
if err != nil {
291290
result.Message = "Can't get Druid instance"
292291
return result, nil
@@ -305,7 +304,7 @@ func (ds *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthRequ
305304

306305
func (ds *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
307306
response := backend.NewQueryDataResponse()
308-
s, err := ds.settings(req.PluginContext)
307+
s, err := ds.settings(req.PluginContext, ctx)
309308
if err != nil {
310309
return response, err
311310
}
@@ -342,8 +341,8 @@ func toHTTPHeaders(rawOriginal interface{}) http.Header {
342341
return headers
343342
}
344343

345-
func (ds *Service) settings(ctx backend.PluginContext) (*druidInstanceSettings, error) {
346-
s, err := ds.im.Get(ctx)
344+
func (ds *Service) settings(ctx backend.PluginContext, getCtx context.Context) (*druidInstanceSettings, error) {
345+
s, err := ds.im.Get(getCtx, ctx)
347346
if err != nil {
348347
return nil, err
349348
}
@@ -441,9 +440,6 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
441440
defaultQueryContext,
442441
ds.prepareQueryContext(queryContextParameters.([]interface{})))
443442
}
444-
if g, ok := q.Builder["granularity"].(map[string]any); ok {
445-
q.Builder["granularity"] = resolveGranularity(g)
446-
}
447443
jsonQuery, err := json.Marshal(q.Builder)
448444
if err != nil {
449445
return nil, nil, err
@@ -453,28 +449,6 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
453449
return query, mergeSettings(s.defaultQuerySettings, q.Settings), err
454450
}
455451

456-
func resolveGranularity(m map[string]any) map[string]any {
457-
// granularity is optional, so return early if not set and is of wrong type
458-
if m == nil || m["type"] != "duration" {
459-
return m
460-
}
461-
expr, ok := m["duration"].(string)
462-
if !ok {
463-
return m
464-
}
465-
466-
eval, err := govaluate.NewEvaluableExpression(expr)
467-
if err != nil {
468-
return m
469-
}
470-
result, err := eval.Evaluate(nil)
471-
if err != nil {
472-
return m
473-
}
474-
m["duration"] = result
475-
return m
476-
}
477-
478452
func (ds *Service) prepareQueryContext(parameters []interface{}) map[string]interface{} {
479453
ctx := make(map[string]interface{})
480454
for _, parameter := range parameters {
@@ -499,21 +473,21 @@ func (ds *Service) executeQuery(
499473
return nil, errors.New("not implemented")
500474
case "timeseries":
501475
var r result.TimeseriesResult
502-
_, err := s.client.Query().Execute(q, &r, headers)
476+
_, err := s.client.Query().Execute(q, &r)
503477
if err != nil {
504478
return nil, fmt.Errorf("Query error: %w", err)
505479
}
506480
resultFramer = &r
507481
case "topN":
508482
var r result.TopNResult
509-
_, err := s.client.Query().Execute(q, &r, headers)
483+
_, err := s.client.Query().Execute(q, &r)
510484
if err != nil {
511485
return nil, fmt.Errorf("Query error: %w", err)
512486
}
513487
resultFramer = &r
514488
case "groupBy":
515489
var r result.GroupByResult
516-
_, err := s.client.Query().Execute(q, &r, headers)
490+
_, err := s.client.Query().Execute(q, &r)
517491
if err != nil {
518492
return nil, fmt.Errorf("Query error: %w", err)
519493
}
@@ -548,7 +522,7 @@ func (ds *Service) oldExecuteQuery(queryRef string, q druidquerybuilder.Query, s
548522
q.(*druidquery.Scan).SetResultFormat("compactedList")
549523
}
550524
var res json.RawMessage
551-
_, err := s.client.Query().Execute(q, &res, headers)
525+
_, err := s.client.Query().Execute(q, &res)
552526
if err != nil {
553527
return r, err
554528
}

public/microfrontends/fn_dashboard/index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
};
1919
</script>
2020

21-
21+
2222
<script
2323
nonce=""
2424
src="../../../public/build/runtime~fn_dashboard.2eabb3c368efad0df2ee.js"
2525
type="text/javascript"
2626
></script>
27-
27+
2828
<script
2929
nonce=""
30-
src="../../../public/build/fn_dashboard.acfa588bd72f8f33752e.js"
30+
src="../../../public/build/fn_dashboard.c31d0eede6e9c2fa2d94.js"
3131
type="text/javascript"
3232
></script>
33-
33+
3434
</body>
3535
</html>

0 commit comments

Comments
 (0)