Преглед изворни кода

stackdriver: break out project name resolving into its own function in the stackdriver.go file

Erik Sundell пре 7 година
родитељ
комит
102f531c1e
1 измењених фајлова са 26 додато и 3 уклоњено
  1. 26 3
      pkg/tsdb/stackdriver/stackdriver.go

+ 26 - 3
pkg/tsdb/stackdriver/stackdriver.go

@@ -18,6 +18,7 @@ import (
 	"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
 
 	"golang.org/x/net/context/ctxhttp"
+	"golang.org/x/oauth2/google"
 
 	"github.com/grafana/grafana/pkg/api/pluginproxy"
 	"github.com/grafana/grafana/pkg/components/null"
@@ -518,6 +519,23 @@ func replaceWithMetricPart(metaPartName string, metricType string) []byte {
 	return nil
 }
 
+func getProjectName(ctx context.Context, dsInfo *models.DataSource, route *plugins.AppPluginRoute) (string, error) {
+	var projectName string
+	gceAutoAuthentication := dsInfo.JsonData.Get("gceAutoAuthentication").MustBool()
+	if gceAutoAuthentication {
+		defaultCredentials, err := google.FindDefaultCredentials(ctx, route.JwtTokenAuth.Scopes...)
+		if err != nil {
+			return "", err
+		} else {
+			projectName = defaultCredentials.ProjectID
+		}
+	} else {
+		projectName = dsInfo.JsonData.Get("defaultProject").MustString()
+	}
+	logger.Info("projectName", "projectName", projectName)
+	return projectName, nil
+}
+
 func calcBucketBound(bucketOptions StackdriverBucketOptions, n int) string {
 	bucketBound := "0"
 	if n == 0 {
@@ -552,9 +570,6 @@ func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.
 	if !ok {
 		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
 	for _, route := range plugin.Routes {
@@ -564,6 +579,14 @@ func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.
 		}
 	}
 
+	// projectName := dsInfo.JsonData.Get("defaultProject").MustString()
+	// logger.Info("projectName", "projectName", projectName)
+	projectName, err := getProjectName(ctx, dsInfo, stackdriverRoute)
+	if err != nil {
+		return nil, err
+	}
+	proxyPass := fmt.Sprintf("stackdriver%s", "v3/projects/"+projectName+"/timeSeries")
+
 	pluginproxy.ApplyRoute(ctx, req, proxyPass, stackdriverRoute, dsInfo)
 
 	return req, nil