mirror of https://github.com/grafana/grafana.git
67 lines
1.8 KiB
Go
67 lines
1.8 KiB
Go
|
package mtdsclient
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||
|
"github.com/grafana/grafana/pkg/infra/log"
|
||
|
"github.com/grafana/grafana/pkg/registry/apis/query/clientapi"
|
||
|
)
|
||
|
|
||
|
type MTDatasourceClientBuilder interface {
|
||
|
BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool)
|
||
|
}
|
||
|
|
||
|
type nullBuilder struct{}
|
||
|
|
||
|
func (m *nullBuilder) BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool) {
|
||
|
return nil, false
|
||
|
}
|
||
|
|
||
|
// we use this noop for st flows
|
||
|
func NewNullMTDatasourceClientBuilder() MTDatasourceClientBuilder {
|
||
|
return &nullBuilder{}
|
||
|
}
|
||
|
|
||
|
type MtDatasourceClientBuilderWithClientSupplier struct {
|
||
|
clientSupplier clientapi.DataSourceClientSupplier
|
||
|
ctx context.Context
|
||
|
headers map[string]string
|
||
|
instanceConfig clientapi.InstanceConfigurationSettings
|
||
|
logger log.Logger
|
||
|
}
|
||
|
|
||
|
func (b *MtDatasourceClientBuilderWithClientSupplier) BuildClient(pluginId string, uid string) (clientapi.QueryDataClient, bool) {
|
||
|
dsClient, err := b.clientSupplier.GetDataSourceClient(
|
||
|
b.ctx,
|
||
|
v0alpha1.DataSourceRef{
|
||
|
Type: pluginId,
|
||
|
UID: uid,
|
||
|
},
|
||
|
b.headers,
|
||
|
b.instanceConfig,
|
||
|
)
|
||
|
if err != nil {
|
||
|
b.logger.Debug("failed to get mt ds client", "error", err)
|
||
|
return nil, false
|
||
|
}
|
||
|
return dsClient, true
|
||
|
}
|
||
|
|
||
|
// TODO: I think we might be able to refactor this to just use the client supplier directly
|
||
|
func NewMtDatasourceClientBuilderWithClientSupplier(
|
||
|
clientSupplier clientapi.DataSourceClientSupplier,
|
||
|
ctx context.Context,
|
||
|
headers map[string]string,
|
||
|
instanceConfig clientapi.InstanceConfigurationSettings,
|
||
|
logger log.Logger,
|
||
|
) MTDatasourceClientBuilder {
|
||
|
return &MtDatasourceClientBuilderWithClientSupplier{
|
||
|
clientSupplier: clientSupplier,
|
||
|
ctx: ctx,
|
||
|
headers: headers,
|
||
|
instanceConfig: instanceConfig,
|
||
|
logger: logger,
|
||
|
}
|
||
|
}
|