CloudMonitoring: use CallResourceHandler instead of PluginProxy (#41064)

This commit is contained in:
Isabella Siu
2021-11-02 10:37:02 -04:00
committed by GitHub
parent 69fe2def89
commit 96f37b3f30
8 changed files with 290 additions and 52 deletions
+22 -6
View File
@@ -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)