From 71a4f20770128769905709bc7b1e75cf7b08adeb Mon Sep 17 00:00:00 2001 From: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com> Date: Tue, 1 Jul 2025 10:58:00 +0200 Subject: [PATCH] Zipkin: Decouple backend (#107312) * Zipkin: Decouple backend * Update * Remove core import --- .golangci.yml | 2 + pkg/tsdb/zipkin/standalone/datasource.go | 39 +++++++++++++++++++ pkg/tsdb/zipkin/standalone/main.go | 23 +++++++++++ pkg/tsdb/zipkin/zipkin.go | 7 ++-- .../app/plugins/datasource/zipkin/plugin.json | 1 + 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 pkg/tsdb/zipkin/standalone/datasource.go create mode 100644 pkg/tsdb/zipkin/standalone/main.go diff --git a/.golangci.yml b/.golangci.yml index 745881e3e2e..5bb4a5e3167 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -103,6 +103,8 @@ linters: - '**/pkg/tsdb/cloudwatch/**/*' - '**/pkg/tsdb/loki/*' - '**/pkg/tsdb/loki/**/*' + - '**/pkg/tsdb/zipkin/*' + - '**/pkg/tsdb/zipkin/**/*' - '**/pkg/tsdb/jaeger/*' - '**/pkg/tsdb/jaeger/**/*' deny: diff --git a/pkg/tsdb/zipkin/standalone/datasource.go b/pkg/tsdb/zipkin/standalone/datasource.go new file mode 100644 index 00000000000..25dea4d46a1 --- /dev/null +++ b/pkg/tsdb/zipkin/standalone/datasource.go @@ -0,0 +1,39 @@ +package main + +import ( + "context" + + "github.com/grafana/grafana-plugin-sdk-go/backend" + "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" + "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" + + "github.com/grafana/grafana/pkg/tsdb/zipkin" +) + +var ( + _ backend.QueryDataHandler = (*Datasource)(nil) + _ backend.CheckHealthHandler = (*Datasource)(nil) + _ backend.CallResourceHandler = (*Datasource)(nil) +) + +func NewDatasource(context.Context, backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { + return &Datasource{ + Service: zipkin.ProvideService(httpclient.NewProvider()), + }, nil +} + +type Datasource struct { + Service *zipkin.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) +} diff --git a/pkg/tsdb/zipkin/standalone/main.go b/pkg/tsdb/zipkin/standalone/main.go new file mode 100644 index 00000000000..0666b55e4f2 --- /dev/null +++ b/pkg/tsdb/zipkin/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("zipkin", NewDatasource, datasource.ManageOpts{}); err != nil { + log.DefaultLogger.Error(err.Error()) + os.Exit(1) + } +} diff --git a/pkg/tsdb/zipkin/zipkin.go b/pkg/tsdb/zipkin/zipkin.go index e6d77a82caf..0cd79b3f6fa 100644 --- a/pkg/tsdb/zipkin/zipkin.go +++ b/pkg/tsdb/zipkin/zipkin.go @@ -7,10 +7,9 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" + "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" "github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter" - - "github.com/grafana/grafana/pkg/infra/httpclient" ) var logger = backend.NewLoggerWith("logger", "tsdb.zipkin") @@ -19,7 +18,7 @@ type Service struct { im instancemgmt.InstanceManager } -func ProvideService(httpClientProvider httpclient.Provider) *Service { +func ProvideService(httpClientProvider *httpclient.Provider) *Service { return &Service{ im: datasource.NewInstanceManager(newInstanceSettings(httpClientProvider)), } @@ -29,7 +28,7 @@ type datasourceInfo struct { ZipkinClient ZipkinClient } -func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc { +func newInstanceSettings(httpClientProvider *httpclient.Provider) datasource.InstanceFactoryFunc { return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { httpClientOptions, err := settings.HTTPClientOptions(ctx) if err != nil { diff --git a/public/app/plugins/datasource/zipkin/plugin.json b/public/app/plugins/datasource/zipkin/plugin.json index 9f6e8994f17..fe2c6705549 100644 --- a/public/app/plugins/datasource/zipkin/plugin.json +++ b/public/app/plugins/datasource/zipkin/plugin.json @@ -3,6 +3,7 @@ "name": "Zipkin", "id": "zipkin", "category": "tracing", + "executable": "gpx_zipkin", "backend": true, "metrics": true,