CloudMonitoring: use CallResourceHandler instead of PluginProxy (#41064)
This commit is contained in:
@@ -21,6 +21,7 @@ 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/instancemgmt"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/httpclient"
|
||||
@@ -81,8 +82,11 @@ func ProvideService(cfg *setting.Cfg, httpClientProvider httpclient.Provider, re
|
||||
dsService: dsService,
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
s.registerRoutes(mux)
|
||||
factory := coreplugin.New(backend.ServeOpts{
|
||||
QueryDataHandler: s,
|
||||
QueryDataHandler: s,
|
||||
CallResourceHandler: httpadapter.New(mux),
|
||||
})
|
||||
|
||||
if err := registrar.LoadAndRegister(pluginID, factory); err != nil {
|
||||
@@ -110,11 +114,16 @@ type datasourceInfo struct {
|
||||
defaultProject string
|
||||
clientEmail string
|
||||
tokenUri string
|
||||
client *http.Client
|
||||
services map[string]datasourceService
|
||||
|
||||
decryptedSecureJSONData map[string]string
|
||||
}
|
||||
|
||||
type datasourceService struct {
|
||||
url string
|
||||
client *http.Client
|
||||
}
|
||||
|
||||
func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.InstanceFactoryFunc {
|
||||
return func(settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) {
|
||||
var jsonData map[string]interface{}
|
||||
@@ -152,6 +161,7 @@ func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.Inst
|
||||
clientEmail: clientEmail,
|
||||
tokenUri: tokenUri,
|
||||
decryptedSecureJSONData: settings.DecryptedSecureJSONData,
|
||||
services: map[string]datasourceService{},
|
||||
}
|
||||
|
||||
opts, err := settings.HTTPClientOptions()
|
||||
@@ -159,9 +169,15 @@ func newInstanceSettings(httpClientProvider httpclient.Provider) datasource.Inst
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dsInfo.client, err = newHTTPClient(dsInfo, opts, httpClientProvider)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
for name, info := range routes {
|
||||
client, err := newHTTPClient(dsInfo, opts, httpClientProvider, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dsInfo.services[name] = datasourceService{
|
||||
url: info.url,
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
return dsInfo, nil
|
||||
@@ -576,7 +592,7 @@ func (s *Service) createRequest(ctx context.Context, dsInfo *datasourceInfo, pro
|
||||
if body != nil {
|
||||
method = http.MethodPost
|
||||
}
|
||||
req, err := http.NewRequest(method, cloudMonitoringRoute.url, body)
|
||||
req, err := http.NewRequest(method, dsInfo.services[cloudMonitor].url, body)
|
||||
if err != nil {
|
||||
slog.Error("Failed to create request", "error", err)
|
||||
return nil, fmt.Errorf("failed to create request: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user