mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Revert "Plugins: Update PDC pattern from latest plugin SDK changes" (#76565)
Revert "Plugins: Update PDC pattern from latest plugin SDK changes (#76036)"
This reverts commit 151f6d6216
.
This commit is contained in:
parent
5e9dac6695
commit
91cf4f0c1c
4
go.mod
4
go.mod
@ -66,7 +66,7 @@ require (
|
|||||||
github.com/grafana/cuetsy v0.1.10 // @grafana/grafana-as-code
|
github.com/grafana/cuetsy v0.1.10 // @grafana/grafana-as-code
|
||||||
github.com/grafana/grafana-aws-sdk v0.19.1 // @grafana/aws-datasources
|
github.com/grafana/grafana-aws-sdk v0.19.1 // @grafana/aws-datasources
|
||||||
github.com/grafana/grafana-azure-sdk-go v1.9.0 // @grafana/backend-platform
|
github.com/grafana/grafana-azure-sdk-go v1.9.0 // @grafana/backend-platform
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.182.0 // @grafana/plugins-platform-backend
|
github.com/grafana/grafana-plugin-sdk-go v0.180.0 // @grafana/plugins-platform-backend
|
||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // @grafana/backend-platform
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // @grafana/backend-platform
|
||||||
github.com/hashicorp/go-hclog v1.5.0 // @grafana/plugins-platform-backend
|
github.com/hashicorp/go-hclog v1.5.0 // @grafana/plugins-platform-backend
|
||||||
github.com/hashicorp/go-plugin v1.4.9 // @grafana/plugins-platform-backend
|
github.com/hashicorp/go-plugin v1.4.9 // @grafana/plugins-platform-backend
|
||||||
@ -192,7 +192,7 @@ require (
|
|||||||
github.com/miekg/dns v1.1.51 // indirect
|
github.com/miekg/dns v1.1.51 // indirect
|
||||||
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // @grafana/alerting-squad-backend
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de // indirect
|
github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de // indirect
|
||||||
github.com/oklog/run v1.1.0 // indirect
|
github.com/oklog/run v1.1.0 // indirect
|
||||||
github.com/oklog/ulid v1.3.1 // indirect
|
github.com/oklog/ulid v1.3.1 // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -1803,8 +1803,8 @@ github.com/grafana/grafana-google-sdk-go v0.1.0 h1:LKGY8z2DSxKjYfr2flZsWgTRTZ6HG
|
|||||||
github.com/grafana/grafana-google-sdk-go v0.1.0/go.mod h1:Vo2TKWfDVmNTELBUM+3lkrZvFtBws0qSZdXhQxRdJrE=
|
github.com/grafana/grafana-google-sdk-go v0.1.0/go.mod h1:Vo2TKWfDVmNTELBUM+3lkrZvFtBws0qSZdXhQxRdJrE=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW39s+c+LetqSCjFj7xxPC5+M=
|
github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW39s+c+LetqSCjFj7xxPC5+M=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk=
|
github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.182.0 h1:UDhzFEXDeskgJi5uG/uHJc350vrQp1hi/Eg8KUFw5Io=
|
github.com/grafana/grafana-plugin-sdk-go v0.180.0 h1:+5aFolBj2H7ze7oejIUjrkmZ9lSydnsbo3e4Kn1CN1Y=
|
||||||
github.com/grafana/grafana-plugin-sdk-go v0.182.0/go.mod h1:fPX9spPWEzyUg0BLTQbdXCCq7PVSJZGNVKfNpiTQUts=
|
github.com/grafana/grafana-plugin-sdk-go v0.180.0/go.mod h1:fPX9spPWEzyUg0BLTQbdXCCq7PVSJZGNVKfNpiTQUts=
|
||||||
github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482 h1:1YNoeIhii4UIIQpCPU+EXidnqf449d0C3ZntAEt4KSo=
|
github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482 h1:1YNoeIhii4UIIQpCPU+EXidnqf449d0C3ZntAEt4KSo=
|
||||||
github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y=
|
github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y=
|
||||||
github.com/grafana/prometheus-alertmanager v0.25.1-0.20230918083811-3513be6760b7 h1:7gsywzIb39SYZEp9qOnNaxD4d9OOkAfJGvnRUQUtlTM=
|
github.com/grafana/prometheus-alertmanager v0.25.1-0.20230918083811-3513be6760b7 h1:7gsywzIb39SYZEp9qOnNaxD4d9OOkAfJGvnRUQUtlTM=
|
||||||
|
@ -76,7 +76,6 @@ func (cp *corePlugin) CollectMetrics(_ context.Context, _ *backend.CollectMetric
|
|||||||
|
|
||||||
func (cp *corePlugin) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) {
|
func (cp *corePlugin) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) {
|
||||||
if cp.CheckHealthHandler != nil {
|
if cp.CheckHealthHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.CheckHealthHandler.CheckHealth(ctx, req)
|
return cp.CheckHealthHandler.CheckHealth(ctx, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +84,6 @@ func (cp *corePlugin) CheckHealth(ctx context.Context, req *backend.CheckHealthR
|
|||||||
|
|
||||||
func (cp *corePlugin) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
|
func (cp *corePlugin) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) {
|
||||||
if cp.QueryDataHandler != nil {
|
if cp.QueryDataHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.QueryDataHandler.QueryData(ctx, req)
|
return cp.QueryDataHandler.QueryData(ctx, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,7 +92,6 @@ func (cp *corePlugin) QueryData(ctx context.Context, req *backend.QueryDataReque
|
|||||||
|
|
||||||
func (cp *corePlugin) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
|
func (cp *corePlugin) CallResource(ctx context.Context, req *backend.CallResourceRequest, sender backend.CallResourceResponseSender) error {
|
||||||
if cp.CallResourceHandler != nil {
|
if cp.CallResourceHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.CallResourceHandler.CallResource(ctx, req, sender)
|
return cp.CallResourceHandler.CallResource(ctx, req, sender)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +100,6 @@ func (cp *corePlugin) CallResource(ctx context.Context, req *backend.CallResourc
|
|||||||
|
|
||||||
func (cp *corePlugin) SubscribeStream(ctx context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) {
|
func (cp *corePlugin) SubscribeStream(ctx context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) {
|
||||||
if cp.StreamHandler != nil {
|
if cp.StreamHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.StreamHandler.SubscribeStream(ctx, req)
|
return cp.StreamHandler.SubscribeStream(ctx, req)
|
||||||
}
|
}
|
||||||
return nil, plugins.ErrMethodNotImplemented
|
return nil, plugins.ErrMethodNotImplemented
|
||||||
@ -111,7 +107,6 @@ func (cp *corePlugin) SubscribeStream(ctx context.Context, req *backend.Subscrib
|
|||||||
|
|
||||||
func (cp *corePlugin) PublishStream(ctx context.Context, req *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) {
|
func (cp *corePlugin) PublishStream(ctx context.Context, req *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) {
|
||||||
if cp.StreamHandler != nil {
|
if cp.StreamHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.StreamHandler.PublishStream(ctx, req)
|
return cp.StreamHandler.PublishStream(ctx, req)
|
||||||
}
|
}
|
||||||
return nil, plugins.ErrMethodNotImplemented
|
return nil, plugins.ErrMethodNotImplemented
|
||||||
@ -119,7 +114,6 @@ func (cp *corePlugin) PublishStream(ctx context.Context, req *backend.PublishStr
|
|||||||
|
|
||||||
func (cp *corePlugin) RunStream(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender) error {
|
func (cp *corePlugin) RunStream(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender) error {
|
||||||
if cp.StreamHandler != nil {
|
if cp.StreamHandler != nil {
|
||||||
ctx = backend.WithGrafanaConfig(ctx, req.PluginContext.GrafanaConfig)
|
|
||||||
return cp.StreamHandler.RunStream(ctx, req, sender)
|
return cp.StreamHandler.RunStream(ctx, req, sender)
|
||||||
}
|
}
|
||||||
return plugins.ErrMethodNotImplemented
|
return plugins.ErrMethodNotImplemented
|
||||||
|
@ -485,13 +485,6 @@ func (s *Service) httpClientOptions(ctx context.Context, ds *datasources.DataSou
|
|||||||
Username: ds.JsonData.Get("secureSocksProxyUsername").MustString(ds.UID),
|
Username: ds.JsonData.Get("secureSocksProxyUsername").MustString(ds.UID),
|
||||||
},
|
},
|
||||||
Timeouts: &sdkproxy.DefaultTimeoutOptions,
|
Timeouts: &sdkproxy.DefaultTimeoutOptions,
|
||||||
ClientCfg: &sdkproxy.ClientCfg{
|
|
||||||
ClientCert: s.cfg.SecureSocksDSProxy.ClientCert,
|
|
||||||
ClientKey: s.cfg.SecureSocksDSProxy.ClientKey,
|
|
||||||
RootCA: s.cfg.SecureSocksDSProxy.RootCA,
|
|
||||||
ProxyAddress: s.cfg.SecureSocksDSProxy.ProxyAddress,
|
|
||||||
ServerName: s.cfg.SecureSocksDSProxy.ServerName,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if val, exists, err := s.DecryptedValue(ctx, ds, "secureSocksProxyPassword"); err == nil && exists {
|
if val, exists, err := s.DecryptedValue(ctx, ds, "secureSocksProxyPassword"); err == nil && exists {
|
||||||
|
@ -3,6 +3,7 @@ package setting
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
|
sdkproxy "github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
|
||||||
"gopkg.in/ini.v1"
|
"gopkg.in/ini.v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -42,5 +43,21 @@ func readSecureSocksDSProxySettings(iniFile *ini.File) (SecureSocksDSProxySettin
|
|||||||
return s, errors.New("proxy address required")
|
return s, errors.New("proxy address required")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setDefaultProxyCli(s)
|
||||||
|
|
||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setDefaultProxyCli overrides the default proxy cli for the sdk
|
||||||
|
//
|
||||||
|
// Note: Not optimal changing global state, but hard to not do in this case.
|
||||||
|
func setDefaultProxyCli(cfg SecureSocksDSProxySettings) {
|
||||||
|
sdkproxy.Cli = sdkproxy.NewWithCfg(&sdkproxy.ClientCfg{
|
||||||
|
Enabled: cfg.Enabled,
|
||||||
|
ClientCert: cfg.ClientCert,
|
||||||
|
ClientKey: cfg.ClientKey,
|
||||||
|
ServerName: cfg.ServerName,
|
||||||
|
RootCA: cfg.RootCA,
|
||||||
|
ProxyAddress: cfg.ProxyAddress,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -63,9 +63,9 @@ type Service struct {
|
|||||||
resourceHandler backend.CallResourceHandler
|
resourceHandler backend.CallResourceHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDatasourceService(ctx context.Context, settings *backend.DataSourceInstanceSettings, cfg *setting.Cfg, clientProvider *httpclient.Provider, dsInfo types.DatasourceInfo, routeName string) (types.DatasourceService, error) {
|
func getDatasourceService(settings *backend.DataSourceInstanceSettings, cfg *setting.Cfg, clientProvider *httpclient.Provider, dsInfo types.DatasourceInfo, routeName string) (types.DatasourceService, error) {
|
||||||
route := dsInfo.Routes[routeName]
|
route := dsInfo.Routes[routeName]
|
||||||
client, err := newHTTPClient(ctx, route, dsInfo, settings, cfg, clientProvider)
|
client, err := newHTTPClient(route, dsInfo, settings, cfg, clientProvider)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return types.DatasourceService{}, err
|
return types.DatasourceService{}, err
|
||||||
}
|
}
|
||||||
@ -76,7 +76,7 @@ func getDatasourceService(ctx context.Context, settings *backend.DataSourceInsta
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider, executors map[string]azDatasourceExecutor) datasource.InstanceFactoryFunc {
|
func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider, executors map[string]azDatasourceExecutor) datasource.InstanceFactoryFunc {
|
||||||
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
jsonDataObj := map[string]any{}
|
jsonDataObj := map[string]any{}
|
||||||
err := json.Unmarshal(settings.JSONData, &jsonDataObj)
|
err := json.Unmarshal(settings.JSONData, &jsonDataObj)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -116,7 +116,7 @@ func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for routeName := range executors {
|
for routeName := range executors {
|
||||||
service, err := getDatasourceService(ctx, &settings, cfg, clientProvider, model, routeName)
|
service, err := getDatasourceService(&settings, cfg, clientProvider, model, routeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package azuremonitor
|
package azuremonitor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -21,8 +20,8 @@ type Provider interface {
|
|||||||
GetTLSConfig(...httpclient.Options) (*tls.Config, error)
|
GetTLSConfig(...httpclient.Options) (*tls.Config, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newHTTPClient(ctx context.Context, route types.AzRoute, model types.DatasourceInfo, settings *backend.DataSourceInstanceSettings, cfg *setting.Cfg, clientProvider Provider) (*http.Client, error) {
|
func newHTTPClient(route types.AzRoute, model types.DatasourceInfo, settings *backend.DataSourceInstanceSettings, cfg *setting.Cfg, clientProvider Provider) (*http.Client, error) {
|
||||||
clientOpts, err := settings.HTTPClientOptions(ctx)
|
clientOpts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error getting HTTP options: %w", err)
|
return nil, fmt.Errorf("error getting HTTP options: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package azuremonitor
|
package azuremonitor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -40,7 +39,7 @@ func TestHttpClient_AzureCredentials(t *testing.T) {
|
|||||||
Scopes: []string{"https://management.azure.com/.default"},
|
Scopes: []string{"https://management.azure.com/.default"},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := newHTTPClient(context.Background(), route, model, settings, cfg, provider)
|
_, err := newHTTPClient(route, model, settings, cfg, provider)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.NotNil(t, provider.opts)
|
require.NotNil(t, provider.opts)
|
||||||
@ -53,7 +52,7 @@ func TestHttpClient_AzureCredentials(t *testing.T) {
|
|||||||
Scopes: []string{},
|
Scopes: []string{},
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := newHTTPClient(context.Background(), route, model, settings, cfg, provider)
|
_, err := newHTTPClient(route, model, settings, cfg, provider)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.NotNil(t, provider.opts)
|
assert.NotNil(t, provider.opts)
|
||||||
@ -74,7 +73,7 @@ func TestHttpClient_AzureCredentials(t *testing.T) {
|
|||||||
"GrafanaHeader": "GrafanaValue",
|
"GrafanaHeader": "GrafanaValue",
|
||||||
"AzureHeader": "AzureValue",
|
"AzureHeader": "AzureValue",
|
||||||
}
|
}
|
||||||
_, err := newHTTPClient(context.Background(), route, model, settings, cfg, provider)
|
_, err := newHTTPClient(route, model, settings, cfg, provider)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
assert.NotNil(t, provider.opts)
|
assert.NotNil(t, provider.opts)
|
||||||
|
@ -161,7 +161,7 @@ type datasourceService struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
var jsonData datasourceJSONData
|
var jsonData datasourceJSONData
|
||||||
err := json.Unmarshal(settings.JSONData, &jsonData)
|
err := json.Unmarshal(settings.JSONData, &jsonData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -188,7 +188,7 @@ func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.Inst
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -89,13 +89,13 @@ func newExecutor(im instancemgmt.InstanceManager, cfg *setting.Cfg, sessions Ses
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
instanceSettings, err := models.LoadCloudWatchSettings(settings)
|
instanceSettings, err := models.LoadCloudWatchSettings(settings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error reading settings: %w", err)
|
return nil, fmt.Errorf("error reading settings: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -71,13 +71,13 @@ func queryData(ctx context.Context, queries []backend.DataQuery, dsInfo *es.Data
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
jsonData := map[string]any{}
|
jsonData := map[string]any{}
|
||||||
err := json.Unmarshal(settings.JSONData, &jsonData)
|
err := json.Unmarshal(settings.JSONData, &jsonData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error reading settings: %w", err)
|
return nil, fmt.Errorf("error reading settings: %w", err)
|
||||||
}
|
}
|
||||||
httpCliOpts, err := settings.HTTPClientOptions(ctx)
|
httpCliOpts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error getting http options: %w", err)
|
return nil, fmt.Errorf("error getting http options: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ type PyroscopeDatasource struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewPyroscopeDatasource creates a new datasource instance.
|
// NewPyroscopeDatasource creates a new datasource instance.
|
||||||
func NewPyroscopeDatasource(ctx context.Context, httpClientProvider httpclient.Provider, settings backend.DataSourceInstanceSettings, ac accesscontrol.AccessControl) (instancemgmt.Instance, error) {
|
func NewPyroscopeDatasource(httpClientProvider httpclient.Provider, settings backend.DataSourceInstanceSettings, ac accesscontrol.AccessControl) (instancemgmt.Instance, error) {
|
||||||
opt, err := settings.HTTPClientOptions(ctx)
|
opt, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -49,8 +49,8 @@ func ProvideService(httpClientProvider httpclient.Provider, ac accesscontrol.Acc
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newInstanceSettings(httpClientProvider httpclient.Provider, ac accesscontrol.AccessControl) datasource.InstanceFactoryFunc {
|
func newInstanceSettings(httpClientProvider httpclient.Provider, ac accesscontrol.AccessControl) datasource.InstanceFactoryFunc {
|
||||||
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
return NewPyroscopeDatasource(ctx, httpClientProvider, settings, ac)
|
return NewPyroscopeDatasource(httpClientProvider, settings, ac)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,8 +55,8 @@ type datasourceInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -31,8 +31,8 @@ func ProvideService(httpClient httpclient.Provider) *Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -89,8 +89,8 @@ func parseQueryModel(raw json.RawMessage) (*QueryJSONModel, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -111,8 +111,8 @@ func newInstanceSettings(cfg *setting.Cfg) datasource.InstanceFactoryFunc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// register a new proxy driver if the secure socks proxy is enabled
|
// register a new proxy driver if the secure socks proxy is enabled
|
||||||
proxyOpts := proxyutil.GetSQLProxyOptions(cfg.SecureSocksDSProxy, dsInfo)
|
proxyOpts := proxyutil.GetSQLProxyOptions(dsInfo)
|
||||||
if sdkproxy.New(proxyOpts).SecureSocksProxyEnabled() {
|
if sdkproxy.Cli.SecureSocksProxyEnabled(proxyOpts) {
|
||||||
URL, err := ParseURL(dsInfo.URL)
|
URL, err := ParseURL(dsInfo.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -71,7 +71,7 @@ var _ core.Driver = (*mssqlProxyDriver)(nil)
|
|||||||
// newMSSQLProxyDriver updates the dialer for a mssql connector with a dialer that proxys connections through the secure socks proxy
|
// newMSSQLProxyDriver updates the dialer for a mssql connector with a dialer that proxys connections through the secure socks proxy
|
||||||
// and returns a new mssql driver to register
|
// and returns a new mssql driver to register
|
||||||
func newMSSQLProxyDriver(connector *mssql.Connector, hostName string, opts *sdkproxy.Options) (*mssqlProxyDriver, error) {
|
func newMSSQLProxyDriver(connector *mssql.Connector, hostName string, opts *sdkproxy.Options) (*mssqlProxyDriver, error) {
|
||||||
dialer, err := sdkproxy.New(opts).NewSecureSocksProxyContextDialer()
|
dialer, err := sdkproxy.Cli.NewSecureSocksProxyContextDialer(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
||||||
mssql "github.com/microsoft/go-mssqldb"
|
mssql "github.com/microsoft/go-mssqldb"
|
||||||
@ -15,16 +14,8 @@ import (
|
|||||||
|
|
||||||
func TestMSSQLProxyDriver(t *testing.T) {
|
func TestMSSQLProxyDriver(t *testing.T) {
|
||||||
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
||||||
proxySettings := setting.SecureSocksDSProxySettings{
|
|
||||||
Enabled: true,
|
|
||||||
ClientCert: settings.ClientCert,
|
|
||||||
ClientKey: settings.ClientKey,
|
|
||||||
RootCA: settings.RootCA,
|
|
||||||
ProxyAddress: settings.ProxyAddress,
|
|
||||||
ServerName: settings.ServerName,
|
|
||||||
}
|
|
||||||
dialect := "mssql"
|
dialect := "mssql"
|
||||||
opts := proxyutil.GetSQLProxyOptions(proxySettings, sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
opts := proxyutil.GetSQLProxyOptions(sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
||||||
cnnstr := "server=127.0.0.1;port=1433;user id=sa;password=yourStrong(!)Password;database=db"
|
cnnstr := "server=127.0.0.1;port=1433;user id=sa;password=yourStrong(!)Password;database=db"
|
||||||
driverName, err := createMSSQLProxyDriver(cnnstr, "127.0.0.1", opts)
|
driverName, err := createMSSQLProxyDriver(cnnstr, "127.0.0.1", opts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -51,7 +51,7 @@ func ProvideService(cfg *setting.Cfg, httpClientProvider httpclient.Provider) *S
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newInstanceSettings(cfg *setting.Cfg, httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc {
|
func newInstanceSettings(cfg *setting.Cfg, httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc {
|
||||||
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
jsonData := sqleng.JsonData{
|
jsonData := sqleng.JsonData{
|
||||||
MaxOpenConns: cfg.SqlDatasourceMaxOpenConnsDefault,
|
MaxOpenConns: cfg.SqlDatasourceMaxOpenConnsDefault,
|
||||||
MaxIdleConns: cfg.SqlDatasourceMaxIdleConnsDefault,
|
MaxIdleConns: cfg.SqlDatasourceMaxIdleConnsDefault,
|
||||||
@ -87,8 +87,8 @@ func newInstanceSettings(cfg *setting.Cfg, httpClientProvider httpclient.Provide
|
|||||||
}
|
}
|
||||||
|
|
||||||
// register the secure socks proxy dialer context, if enabled
|
// register the secure socks proxy dialer context, if enabled
|
||||||
proxyOpts := proxyutil.GetSQLProxyOptions(cfg.SecureSocksDSProxy, dsInfo)
|
proxyOpts := proxyutil.GetSQLProxyOptions(dsInfo)
|
||||||
if sdkproxy.New(proxyOpts).SecureSocksProxyEnabled() {
|
if sdkproxy.Cli.SecureSocksProxyEnabled(proxyOpts) {
|
||||||
// UID is only unique per org, the only way to ensure uniqueness is to do it by connection information
|
// UID is only unique per org, the only way to ensure uniqueness is to do it by connection information
|
||||||
uniqueIdentifier := dsInfo.User + dsInfo.DecryptedSecureJSONData["password"] + dsInfo.URL + dsInfo.Database
|
uniqueIdentifier := dsInfo.User + dsInfo.DecryptedSecureJSONData["password"] + dsInfo.URL + dsInfo.Database
|
||||||
protocol, err = registerProxyDialerContext(protocol, uniqueIdentifier, proxyOpts)
|
protocol, err = registerProxyDialerContext(protocol, uniqueIdentifier, proxyOpts)
|
||||||
@ -109,7 +109,7 @@ func newInstanceSettings(cfg *setting.Cfg, httpClientProvider httpclient.Provide
|
|||||||
cnnstr += "&allowCleartextPasswords=true"
|
cnnstr += "&allowCleartextPasswords=true"
|
||||||
}
|
}
|
||||||
|
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ type mySQLContextDialer struct {
|
|||||||
|
|
||||||
// getProxyDialerContext returns a context dialer that will send the request through to the secure socks proxy
|
// getProxyDialerContext returns a context dialer that will send the request through to the secure socks proxy
|
||||||
func getProxyDialerContext(actualNetwork string, opts *sdkproxy.Options) (*mySQLContextDialer, error) {
|
func getProxyDialerContext(actualNetwork string, opts *sdkproxy.Options) (*mySQLContextDialer, error) {
|
||||||
dialer, err := sdkproxy.New(opts).NewSecureSocksProxyContextDialer()
|
dialer, err := sdkproxy.Cli.NewSecureSocksProxyContextDialer(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/go-sql-driver/mysql"
|
"github.com/go-sql-driver/mysql"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -14,16 +13,9 @@ import (
|
|||||||
|
|
||||||
func TestMySQLProxyDialer(t *testing.T) {
|
func TestMySQLProxyDialer(t *testing.T) {
|
||||||
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
||||||
proxySettings := setting.SecureSocksDSProxySettings{
|
|
||||||
Enabled: true,
|
|
||||||
ClientCert: settings.ClientCert,
|
|
||||||
ClientKey: settings.ClientKey,
|
|
||||||
RootCA: settings.RootCA,
|
|
||||||
ProxyAddress: settings.ProxyAddress,
|
|
||||||
ServerName: settings.ServerName,
|
|
||||||
}
|
|
||||||
protocol := "tcp"
|
protocol := "tcp"
|
||||||
opts := proxyutil.GetSQLProxyOptions(proxySettings, sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
opts := proxyutil.GetSQLProxyOptions(sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
||||||
dbURL := "localhost:5432"
|
dbURL := "localhost:5432"
|
||||||
network, err := registerProxyDialerContext(protocol, dbURL, opts)
|
network, err := registerProxyDialerContext(protocol, dbURL, opts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -43,8 +43,8 @@ type datasourceInfo struct {
|
|||||||
type DsAccess string
|
type DsAccess string
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,8 @@ type ParcaDatasource struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewParcaDatasource creates a new datasource instance.
|
// NewParcaDatasource creates a new datasource instance.
|
||||||
func NewParcaDatasource(ctx context.Context, httpClientProvider httpclient.Provider, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
func NewParcaDatasource(httpClientProvider httpclient.Provider, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opt, err := settings.HTTPClientOptions(ctx)
|
opt, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -47,8 +47,8 @@ func ProvideService(httpClientProvider httpclient.Provider) *Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
return NewParcaDatasource(ctx, httpClientProvider, settings)
|
return NewParcaDatasource(httpClientProvider, settings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,8 +97,8 @@ func (s *Service) newInstanceSettings(cfg *setting.Cfg) datasource.InstanceFacto
|
|||||||
|
|
||||||
driverName := "postgres"
|
driverName := "postgres"
|
||||||
// register a proxy driver if the secure socks proxy is enabled
|
// register a proxy driver if the secure socks proxy is enabled
|
||||||
proxyOpts := proxyutil.GetSQLProxyOptions(cfg.SecureSocksDSProxy, dsInfo)
|
proxyOpts := proxyutil.GetSQLProxyOptions(dsInfo)
|
||||||
if sdkproxy.New(proxyOpts).SecureSocksProxyEnabled() {
|
if sdkproxy.Cli.SecureSocksProxyEnabled(proxyOpts) {
|
||||||
driverName, err = createPostgresProxyDriver(cnnstr, proxyOpts)
|
driverName, err = createPostgresProxyDriver(cnnstr, proxyOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil
|
return "", nil
|
||||||
|
@ -55,10 +55,10 @@ type postgresProxyDriver struct {
|
|||||||
var _ driver.DriverContext = (*postgresProxyDriver)(nil)
|
var _ driver.DriverContext = (*postgresProxyDriver)(nil)
|
||||||
var _ core.Driver = (*postgresProxyDriver)(nil)
|
var _ core.Driver = (*postgresProxyDriver)(nil)
|
||||||
|
|
||||||
// newPostgresProxyDriver updates the dialer for a postgres connector with a dialer that proxies connections through the secure socks proxy
|
// newPostgresProxyDriver updates the dialer for a postgres connector with a dialer that proxys connections through the secure socks proxy
|
||||||
// and returns a new postgres driver to register
|
// and returns a new postgres driver to register
|
||||||
func newPostgresProxyDriver(connector *pq.Connector, opts *sdkproxy.Options) (*postgresProxyDriver, error) {
|
func newPostgresProxyDriver(connector *pq.Connector, opts *sdkproxy.Options) (*postgresProxyDriver, error) {
|
||||||
dialer, err := sdkproxy.New(opts).NewSecureSocksProxyContextDialer()
|
dialer, err := sdkproxy.Cli.NewSecureSocksProxyContextDialer(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng/proxyutil"
|
||||||
"github.com/lib/pq"
|
"github.com/lib/pq"
|
||||||
@ -15,16 +14,8 @@ import (
|
|||||||
|
|
||||||
func TestPostgresProxyDriver(t *testing.T) {
|
func TestPostgresProxyDriver(t *testing.T) {
|
||||||
dialect := "postgres"
|
dialect := "postgres"
|
||||||
|
opts := proxyutil.GetSQLProxyOptions(sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
||||||
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
settings := proxyutil.SetupTestSecureSocksProxySettings(t)
|
||||||
proxySettings := setting.SecureSocksDSProxySettings{
|
|
||||||
Enabled: true,
|
|
||||||
ClientCert: settings.ClientCert,
|
|
||||||
ClientKey: settings.ClientKey,
|
|
||||||
RootCA: settings.RootCA,
|
|
||||||
ProxyAddress: settings.ProxyAddress,
|
|
||||||
ServerName: settings.ServerName,
|
|
||||||
}
|
|
||||||
opts := proxyutil.GetSQLProxyOptions(proxySettings, sqleng.DataSourceInfo{UID: "1", JsonData: sqleng.JsonData{SecureDSProxy: true}})
|
|
||||||
dbURL := "localhost:5432"
|
dbURL := "localhost:5432"
|
||||||
cnnstr := fmt.Sprintf("postgres://auser:password@%s/db?sslmode=disable", dbURL)
|
cnnstr := fmt.Sprintf("postgres://auser:password@%s/db?sslmode=disable", dbURL)
|
||||||
driverName, err := createPostgresProxyDriver(cnnstr, opts)
|
driverName, err := createPostgresProxyDriver(cnnstr, opts)
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -18,8 +17,8 @@ import (
|
|||||||
|
|
||||||
// CreateTransportOptions creates options for the http client. Probably should be shared and should not live in the
|
// CreateTransportOptions creates options for the http client. Probably should be shared and should not live in the
|
||||||
// buffered package.
|
// buffered package.
|
||||||
func CreateTransportOptions(ctx context.Context, settings backend.DataSourceInstanceSettings, cfg *setting.Cfg, logger log.Logger) (*sdkhttpclient.Options, error) {
|
func CreateTransportOptions(settings backend.DataSourceInstanceSettings, cfg *setting.Cfg, logger log.Logger) (*sdkhttpclient.Options, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error getting HTTP options: %w", err)
|
return nil, fmt.Errorf("error getting HTTP options: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package client
|
package client
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/grafana/grafana-azure-sdk-go/azsettings"
|
"github.com/grafana/grafana-azure-sdk-go/azsettings"
|
||||||
@ -22,7 +21,7 @@ func TestCreateTransportOptions(t *testing.T) {
|
|||||||
"httpHeaderValue1": "bar",
|
"httpHeaderValue1": "bar",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
opts, err := CreateTransportOptions(context.Background(), settings, &setting.Cfg{}, &logtest.Fake{})
|
opts, err := CreateTransportOptions(settings, &setting.Cfg{}, &logtest.Fake{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, map[string]string{"foo": "bar"}, opts.Headers)
|
require.Equal(t, map[string]string{"foo": "bar"}, opts.Headers)
|
||||||
require.Equal(t, 2, len(opts.Middlewares))
|
require.Equal(t, 2, len(opts.Middlewares))
|
||||||
@ -39,7 +38,7 @@ func TestCreateTransportOptions(t *testing.T) {
|
|||||||
}`),
|
}`),
|
||||||
DecryptedSecureJSONData: map[string]string{},
|
DecryptedSecureJSONData: map[string]string{},
|
||||||
}
|
}
|
||||||
opts, err := CreateTransportOptions(context.Background(), settings, &setting.Cfg{AzureAuthEnabled: true, Azure: &azsettings.AzureSettings{}}, &logtest.Fake{})
|
opts, err := CreateTransportOptions(settings, &setting.Cfg{AzureAuthEnabled: true, Azure: &azsettings.AzureSettings{}}, &logtest.Fake{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, 3, len(opts.Middlewares))
|
require.Equal(t, 3, len(opts.Middlewares))
|
||||||
})
|
})
|
||||||
|
@ -46,9 +46,9 @@ func ProvideService(httpClientProvider httpclient.Provider, cfg *setting.Cfg, fe
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newInstanceSettings(httpClientProvider httpclient.Provider, cfg *setting.Cfg, features featuremgmt.FeatureToggles, tracer tracing.Tracer) datasource.InstanceFactoryFunc {
|
func newInstanceSettings(httpClientProvider httpclient.Provider, cfg *setting.Cfg, features featuremgmt.FeatureToggles, tracer tracing.Tracer) datasource.InstanceFactoryFunc {
|
||||||
return func(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
// Creates a http roundTripper.
|
// Creates a http roundTripper.
|
||||||
opts, err := client.CreateTransportOptions(ctx, settings, cfg, plog)
|
opts, err := client.CreateTransportOptions(settings, cfg, plog)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error creating transport options: %v", err)
|
return nil, fmt.Errorf("error creating transport options: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ func setup() (*testContext, error) {
|
|||||||
|
|
||||||
features := &fakeFeatureToggles{flags: map[string]bool{"prometheusBufferedClient": false}}
|
features := &fakeFeatureToggles{flags: map[string]bool{"prometheusBufferedClient": false}}
|
||||||
|
|
||||||
opts, err := client.CreateTransportOptions(context.Background(), settings, &setting.Cfg{}, &logtest.Fake{})
|
opts, err := client.CreateTransportOptions(settings, &setting.Cfg{}, &logtest.Fake{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,7 @@ func SetupTestSecureSocksProxySettings(t *testing.T) *sdkproxy.ClientCfg {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
settings := &sdkproxy.ClientCfg{
|
settings := &sdkproxy.ClientCfg{
|
||||||
|
Enabled: true,
|
||||||
ClientCert: clientCert,
|
ClientCert: clientCert,
|
||||||
ClientKey: clientKey,
|
ClientKey: clientKey,
|
||||||
RootCA: rootCACert,
|
RootCA: rootCACert,
|
||||||
@ -107,5 +108,6 @@ func SetupTestSecureSocksProxySettings(t *testing.T) *sdkproxy.ClientCfg {
|
|||||||
ProxyAddress: proxyAddress,
|
ProxyAddress: proxyAddress,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sdkproxy.Cli = sdkproxy.NewWithCfg(settings)
|
||||||
return settings
|
return settings
|
||||||
}
|
}
|
||||||
|
@ -2,23 +2,15 @@ package proxyutil
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
sdkproxy "github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
|
sdkproxy "github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
|
||||||
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
"github.com/grafana/grafana/pkg/tsdb/sqleng"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetSQLProxyOptions(cfg setting.SecureSocksDSProxySettings, dsInfo sqleng.DataSourceInfo) *sdkproxy.Options {
|
func GetSQLProxyOptions(dsInfo sqleng.DataSourceInfo) *sdkproxy.Options {
|
||||||
opts := &sdkproxy.Options{
|
opts := &sdkproxy.Options{
|
||||||
Enabled: dsInfo.JsonData.SecureDSProxy && cfg.Enabled,
|
Enabled: dsInfo.JsonData.SecureDSProxy,
|
||||||
Auth: &sdkproxy.AuthOptions{
|
Auth: &sdkproxy.AuthOptions{
|
||||||
Username: dsInfo.UID,
|
Username: dsInfo.UID,
|
||||||
},
|
},
|
||||||
ClientCfg: &sdkproxy.ClientCfg{
|
|
||||||
ClientCert: cfg.ClientCert,
|
|
||||||
ClientKey: cfg.ClientKey,
|
|
||||||
ServerName: cfg.ServerName,
|
|
||||||
RootCA: cfg.RootCA,
|
|
||||||
ProxyAddress: cfg.ProxyAddress,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
if dsInfo.JsonData.SecureDSProxyUsername != "" {
|
if dsInfo.JsonData.SecureDSProxyUsername != "" {
|
||||||
opts.Auth.Username = dsInfo.JsonData.SecureDSProxyUsername
|
opts.Auth.Username = dsInfo.JsonData.SecureDSProxyUsername
|
||||||
|
@ -33,8 +33,8 @@ type Datasource struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
return func(_ context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||||
opts, err := settings.HTTPClientOptions(ctx)
|
opts, err := settings.HTTPClientOptions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user