@@ -19,7 +19,6 @@ import (
1919 druidquerybuilder "github.com/grafadruid/go-druid/builder"
2020 druidquery "github.com/grafadruid/go-druid/builder/query"
2121 "github.com/grafana/grafana-plugin-sdk-go/backend"
22- "github.com/grafana/grafana-plugin-sdk-go/backend/datasource"
2322 "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt"
2423 "github.com/grafana/grafana-plugin-sdk-go/backend/log"
2524 "github.com/grafana/grafana-plugin-sdk-go/data"
@@ -184,22 +183,23 @@ func mergeSettings(settings ...map[string]any) map[string]any {
184183 return stg
185184}
186185
187- func newDatasource () datasource.ServeOpts {
188- ds := & druidDatasource {
189- im : datasource .NewInstanceManager (func (ctx context.Context , settings backend.DataSourceInstanceSettings ) (instancemgmt.Instance , error ) {
190- return newDataSourceInstance (ctx , settings )
191- }),
186+ func newDatasource (ctx context.Context , settings backend.DataSourceInstanceSettings ) (instancemgmt.Instance , error ) {
187+ inst , err := newDataSourceInstance (ctx , settings )
188+ if err != nil {
189+ return nil , err
192190 }
193191
194- return datasource.ServeOpts {
195- QueryDataHandler : ds ,
196- CheckHealthHandler : ds ,
197- CallResourceHandler : ds ,
198- }
192+ return & druidDatasource {
193+ settings : inst .(* druidInstanceSettings ),
194+ }, nil
199195}
200196
201197type druidDatasource struct {
202- im instancemgmt.InstanceManager
198+ settings * druidInstanceSettings
199+ }
200+
201+ func (ds * druidDatasource ) Dispose () {
202+ ds .settings .Dispose ()
203203}
204204
205205func (ds * druidDatasource ) CallResource (ctx context.Context , req * backend.CallResourceRequest , sender backend.CallResourceResponseSender ) error {
@@ -234,30 +234,26 @@ type grafanaMetricFindValue struct {
234234}
235235
236236func (ds * druidDatasource ) QueryVariableData (ctx context.Context , req * backend.CallResourceRequest ) ([]grafanaMetricFindValue , error ) {
237- log .DefaultLogger .Info ("QUERY VARIABLE" , "request" , string (req .Body ))
238- s , err := ds .settings (ctx , req .PluginContext )
239- if err != nil {
240- return []grafanaMetricFindValue {}, err
241- }
242- return ds .queryVariable (req .Body , s )
237+ log .DefaultLogger .Debug ("QUERY VARIABLE" , "request" , string (req .Body ))
238+ return ds .queryVariable (req .Body , ds .settings )
243239}
244240
245241func (ds * druidDatasource ) queryVariable (qry []byte , s * druidInstanceSettings ) ([]grafanaMetricFindValue , error ) {
246- log .DefaultLogger .Info ("DRUID EXECUTE QUERY VARIABLE" , "grafana_query" , string (qry ))
242+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY VARIABLE" , "grafana_query" , string (qry ))
247243 // feature: probably implement a short (1s ? 500ms ? configurable in datasource ? beware memory: constrain size ?) life cache (druidInstanceSettings.cache ?) and early return then
248244 response := []grafanaMetricFindValue {}
249245 q , stg , err := ds .prepareQuery (qry , s )
250246 if err != nil {
251247 return response , err
252248 }
253- log .DefaultLogger .Info ("DRUID EXECUTE QUERY VARIABLE" , "druid_query" , q )
249+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY VARIABLE" , "druid_query" , q )
254250 r , err := ds .executeQuery ("variable" , q , s , stg )
255251 if err != nil {
256252 return response , err
257253 }
258- log .DefaultLogger .Info ("DRUID EXECUTE QUERY VARIABLE" , "druid_response" , r )
254+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY VARIABLE" , "druid_response" , r )
259255 response , err = ds .prepareVariableResponse (r , stg )
260- log .DefaultLogger .Info ("DRUID EXECUTE QUERY VARIABLE" , "grafana_response" , response )
256+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY VARIABLE" , "grafana_response" , response )
261257 return response , err
262258}
263259
@@ -329,13 +325,7 @@ func (ds *druidDatasource) CheckHealth(ctx context.Context, req *backend.CheckHe
329325 Message : "Can't connect to Druid" ,
330326 }
331327
332- i , err := ds .im .Get (ctx , req .PluginContext )
333- if err != nil {
334- result .Message = "Can't get Druid instance: " + err .Error ()
335- return result , nil
336- }
337-
338- status , _ , err := i .(* druidInstanceSettings ).client .Common ().Status ()
328+ status , _ , err := ds .settings .client .Common ().Status ()
339329 if err != nil {
340330 result .Message = "Can't fetch Druid status: " + err .Error ()
341331 return result , nil
@@ -349,28 +339,15 @@ func (ds *druidDatasource) CheckHealth(ctx context.Context, req *backend.CheckHe
349339func (ds * druidDatasource ) QueryData (ctx context.Context , req * backend.QueryDataRequest ) (* backend.QueryDataResponse , error ) {
350340 response := backend .NewQueryDataResponse ()
351341
352- s , err := ds .settings (ctx , req .PluginContext )
353- if err != nil {
354- return response , err
355- }
356-
357342 for _ , q := range req .Queries {
358- response .Responses [q .RefID ] = ds .query (q , s )
343+ response .Responses [q .RefID ] = ds .query (q , ds . settings )
359344 }
360345
361346 return response , nil
362347}
363348
364- func (ds * druidDatasource ) settings (ctx context.Context , pluginCtx backend.PluginContext ) (* druidInstanceSettings , error ) {
365- s , err := ds .im .Get (ctx , pluginCtx )
366- if err != nil {
367- return nil , err
368- }
369- return s .(* druidInstanceSettings ), nil
370- }
371-
372349func (ds * druidDatasource ) query (qry backend.DataQuery , s * druidInstanceSettings ) backend.DataResponse {
373- log .DefaultLogger .Info ("DRUID EXECUTE QUERY" , "grafana_query" , qry )
350+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY" , "grafana_query" , qry )
374351 rawQuery := interpolateVariables (string (qry .JSON ), qry .Interval , qry .TimeRange .Duration ())
375352
376353 // feature: probably implement a short (1s ? 500ms ? configurable in datasource ? beware memory: constrain size ?) life cache (druidInstanceSettings.cache ?) and early return then
@@ -380,19 +357,19 @@ func (ds *druidDatasource) query(qry backend.DataQuery, s *druidInstanceSettings
380357 response .Error = err
381358 return response
382359 }
383- log .DefaultLogger .Info ("DRUID EXECUTE QUERY" , "druid_query" , q )
360+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY" , "druid_query" , q )
384361 r , err := ds .executeQuery (qry .RefID , q , s , stg )
385362 if err != nil {
386363 response .Error = err
387364 return response
388365 }
389- log .DefaultLogger .Info ("DRUID EXECUTE QUERY" , "druid_response" , r )
366+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY" , "druid_response" , r )
390367 response , err = ds .prepareResponse (r , stg )
391368 if err != nil {
392369 // note: error could be set from prepareResponse but this gives a chance to react to error here
393370 response .Error = err
394371 }
395- log .DefaultLogger .Info ("DRUID EXECUTE QUERY" , "grafana_response" , response )
372+ log .DefaultLogger .Debug ("DRUID EXECUTE QUERY" , "grafana_response" , response )
396373 return response
397374}
398375
0 commit comments