Files
grafana/pkg/tsdb/cloudmonitoring/httpclient.go
T

57 lines
1.6 KiB
Go

package cloudmonitoring
import (
"net/http"
"github.com/grafana/grafana-google-sdk-go/pkg/tokenprovider"
"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
infrahttp "github.com/grafana/grafana/pkg/infra/httpclient"
)
var cloudMonitoringRoute = struct {
path string
method string
url string
scopes []string
}{
path: "cloudmonitoring",
method: "GET",
url: "https://monitoring.googleapis.com",
scopes: []string{"https://www.googleapis.com/auth/monitoring.read"},
}
func getMiddleware(model *datasourceInfo) (httpclient.Middleware, error) {
providerConfig := tokenprovider.Config{
RoutePath: cloudMonitoringRoute.path,
RouteMethod: cloudMonitoringRoute.method,
DataSourceID: model.id,
DataSourceUpdated: model.updated,
Scopes: cloudMonitoringRoute.scopes,
}
var provider tokenprovider.TokenProvider
switch model.authenticationType {
case gceAuthentication:
provider = tokenprovider.NewGceAccessTokenProvider(providerConfig)
case jwtAuthentication:
providerConfig.JwtTokenConfig = &tokenprovider.JwtTokenConfig{
Email: model.clientEmail,
URI: model.tokenUri,
PrivateKey: []byte(model.decryptedSecureJSONData["privateKey"]),
}
provider = tokenprovider.NewJwtAccessTokenProvider(providerConfig)
}
return tokenprovider.AuthMiddleware(provider), nil
}
func newHTTPClient(model *datasourceInfo, opts httpclient.Options, clientProvider infrahttp.Provider) (*http.Client, error) {
m, err := getMiddleware(model)
if err != nil {
return nil, err
}
opts.Middlewares = append(opts.Middlewares, m)
return clientProvider.New(opts)
}