diff --git a/pkg/tsdb/grafana-testdata-datasource/.gitignore b/pkg/tsdb/grafana-testdata-datasource/.gitignore new file mode 100644 index 00000000000..77738287f0e --- /dev/null +++ b/pkg/tsdb/grafana-testdata-datasource/.gitignore @@ -0,0 +1 @@ +dist/ \ No newline at end of file diff --git a/pkg/tsdb/grafana-testdata-datasource/standalone/datasource.go b/pkg/tsdb/grafana-testdata-datasource/standalone/datasource.go new file mode 100644 index 00000000000..cae0775438f --- /dev/null +++ b/pkg/tsdb/grafana-testdata-datasource/standalone/datasource.go @@ -0,0 +1,49 @@ +package main + +import ( + "context" + + "github.com/grafana/grafana-plugin-sdk-go/backend" + "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" + testdatasource "github.com/grafana/grafana/pkg/tsdb/grafana-testdata-datasource" +) + +var ( + _ backend.QueryDataHandler = (*Datasource)(nil) + _ backend.CheckHealthHandler = (*Datasource)(nil) + _ backend.StreamHandler = (*Datasource)(nil) +) + +func NewDatasource(context.Context, backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { + return &Datasource{ + Service: testdatasource.ProvideService(), + }, nil +} + +type Datasource struct { + Service *testdatasource.Service +} + +func (d *Datasource) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) { + return d.Service.QueryData(ctx, req) +} + +func (d *Datasource) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error { + return d.Service.CallResource(ctx, req, sender) +} + +func (d *Datasource) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { + return d.Service.CheckHealth(ctx, req) +} + +func (d *Datasource) SubscribeStream(ctx context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) { + return d.Service.SubscribeStream(ctx, req) +} + +func (d *Datasource) PublishStream(ctx context.Context, req *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) { + return d.Service.PublishStream(ctx, req) +} + +func (d *Datasource) RunStream(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender) error { + return d.Service.RunStream(ctx, req, sender) +} diff --git a/pkg/tsdb/grafana-testdata-datasource/standalone/main.go b/pkg/tsdb/grafana-testdata-datasource/standalone/main.go new file mode 100644 index 00000000000..d8d0a44c867 --- /dev/null +++ b/pkg/tsdb/grafana-testdata-datasource/standalone/main.go @@ -0,0 +1,23 @@ +package main + +import ( + "os" + + "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" + "github.com/grafana/grafana-plugin-sdk-go/backend/log" +) + +func main() { + // Start listening to requests sent from Grafana. This call is blocking so + // it won't finish until Grafana shuts down the process or the plugin choose + // to exit by itself using os.Exit. Manage automatically manages life cycle + // of datasource instances. It accepts datasource instance factory as first + // argument. This factory will be automatically called on incoming request + // from Grafana to create different instances of SampleDatasource (per datasource + // ID). When datasource configuration changed Dispose method will be called and + // new datasource instance created using NewSampleDatasource factory. + if err := datasource.Manage("grafana-testdata-datasource", NewDatasource, datasource.ManageOpts{}); err != nil { + log.DefaultLogger.Error(err.Error()) + os.Exit(1) + } +} diff --git a/pkg/tsdb/grafana-testdata-datasource/testdata.go b/pkg/tsdb/grafana-testdata-datasource/testdata.go index 5cba8661da8..8c994491358 100644 --- a/pkg/tsdb/grafana-testdata-datasource/testdata.go +++ b/pkg/tsdb/grafana-testdata-datasource/testdata.go @@ -59,3 +59,10 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) func (s *Service) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error { return s.resourceHandler.CallResource(ctx, req, sender) } + +func (s *Service) CheckHealth(_ context.Context, _ *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { + return &backend.CheckHealthResult{ + Status: backend.HealthStatusOk, + Message: "Data source is working", + }, nil +}