From df215d9d09caaab28cc736c5403b31b08f2ef276 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Wed, 3 Oct 2018 17:08:13 +0200 Subject: [PATCH] stackdriver: WIP - test retrieving project id from gce metadata --- pkg/api/pluginproxy/ds_auth_provider.go | 26 +++++++++++++++++++++++-- pkg/tsdb/stackdriver/stackdriver.go | 3 +++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/pkg/api/pluginproxy/ds_auth_provider.go b/pkg/api/pluginproxy/ds_auth_provider.go index d32d34f6187..320c4cc2cd3 100644 --- a/pkg/api/pluginproxy/ds_auth_provider.go +++ b/pkg/api/pluginproxy/ds_auth_provider.go @@ -64,11 +64,33 @@ func ApplyRoute(ctx context.Context, req *http.Request, proxyPath string, route } if req.Header.Get("Authorization") == "" && ds.Type == "stackdriver" { - tokenSrc, err := google.DefaultTokenSource(ctx, "https://www.googleapis.com/auth/monitoring.read") + defaultCredentials, err := google.FindDefaultCredentials(ctx) + projectName := ds.JsonData.Get("defaultProject").MustString() + if projectName == "" { + ds.JsonData.Set("defaultProject", defaultCredentials.ProjectID) + } + if err != nil { + logger.Error("Failed to get default credentials", "error", err) + } else { + token, err := defaultCredentials.TokenSource.Token() + if err != nil { + logger.Error("Failed to get default access token", "error", err) + } else { + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token.AccessToken)) + } + } + } + + if req.Header.Get("Authorization") == "" && ds.Type == "stackdriver" { + credentials, err := google.FindDefaultCredentials(ctx, "https://www.googleapis.com/auth/monitoring.read") + projectName := ds.JsonData.Get("defaultProject").MustString() + if projectName == "" { + ds.JsonData.Set("defaultProject", credentials.ProjectID) + } if err != nil { logger.Error("Failed to get access token", "error", err) } else { - token, err := tokenSrc.Token() + token, err := credentials.TokenSource.Token() if err != nil { logger.Error("Failed to get access token", "error", err) } else { diff --git a/pkg/tsdb/stackdriver/stackdriver.go b/pkg/tsdb/stackdriver/stackdriver.go index 96242dfdec4..f555ebfa3f4 100644 --- a/pkg/tsdb/stackdriver/stackdriver.go +++ b/pkg/tsdb/stackdriver/stackdriver.go @@ -15,6 +15,8 @@ import ( "strings" "time" + "github.com/grafana/grafana/pkg/cmd/grafana-cli/logger" + "golang.org/x/net/context/ctxhttp" "github.com/grafana/grafana/pkg/api/pluginproxy" @@ -551,6 +553,7 @@ func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models. return nil, errors.New("Unable to find datasource plugin Stackdriver") } projectName := dsInfo.JsonData.Get("defaultProject").MustString() + logger.Info("projectName", "projectName", projectName) proxyPass := fmt.Sprintf("stackdriver%s", "v3/projects/"+projectName+"/timeSeries") var stackdriverRoute *plugins.AppPluginRoute