Commit ff5f2815 by Erik Sundell

stackdriver: wip - get metric descriptors in the backend

parent 60617d0b
......@@ -12,7 +12,6 @@ import (
m "github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/util"
"golang.org/x/oauth2/google"
)
//ApplyRoute should use the plugin route data to set auth headers and custom headers
......@@ -56,6 +55,7 @@ func ApplyRoute(ctx context.Context, req *http.Request, proxyPath string, route
}
gceAutoAuthentication := ds.JsonData.Get("gceAutomaticAuthentication").MustBool()
logger.Info("gceAutoAuthentication", "gceAutoAuthentication", gceAutoAuthentication)
if route.JwtTokenAuth != nil && !gceAutoAuthentication {
if token, err := tokenProvider.getJwtAccessToken(ctx, data); err != nil {
logger.Error("Failed to get access token", "error", err)
......@@ -65,21 +65,22 @@ func ApplyRoute(ctx context.Context, req *http.Request, proxyPath string, route
}
if gceAutoAuthentication {
tokenSrc, err := google.DefaultTokenSource(ctx, route.JwtTokenAuth.Scopes...)
// tokenSrc, err := google.DefaultTokenSource(ctx, route.JwtTokenAuth.Scopes...)
if err != nil {
logger.Error("Failed to get default credentials", "error", err)
} else {
token, err := tokenSrc.Token()
// token, err := tokenSrc.Token()
token, err := tokenProvider.getJwtAccessToken(ctx, data)
if err != nil {
logger.Error("Failed to get default access token", "error", err)
} else {
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token.AccessToken))
// req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token.AccessToken))
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
}
}
}
logger.Info("Requesting", "url", req.URL.String())
}
func interpolateString(text string, data templateData) (string, error) {
......
package stackdriver
import (
"context"
"fmt"
"io/ioutil"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/grafana/grafana/pkg/components/simplejson"
"golang.org/x/net/context/ctxhttp"
"github.com/grafana/grafana/pkg/tsdb"
)
func (e *StackdriverExecutor) executeMetricDescriptors(ctx context.Context, tsdbQuery *tsdb.TsdbQuery) (*tsdb.Response, error) {
logger.Info("metricDescriptors", "metricDescriptors", tsdbQuery.Queries[0].RefId)
queryResult := &tsdb.QueryResult{Meta: simplejson.New(), RefId: tsdbQuery.Queries[0].RefId}
result := &tsdb.Response{
Results: make(map[string]*tsdb.QueryResult),
}
req, err := e.createRequest(ctx, e.dsInfo, "metricDescriptors")
if err != nil {
slog.Error("Failed to create request", "error", err)
return nil, fmt.Errorf("Failed to create request. error: %v", err)
}
res, err := ctxhttp.Do(ctx, e.httpClient, req)
if err != nil {
logger.Info("error2", err)
return nil, err
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
logger.Info("error3", err)
return nil, err
}
defer res.Body.Close()
if err != nil {
return nil, err
}
queryResult.Meta.Set("test", string(body))
logger.Info("string(body)", "string(body)", string(body))
result.Results[tsdbQuery.Queries[0].RefId] = queryResult
return result, nil
}
......@@ -74,6 +74,8 @@ func (e *StackdriverExecutor) Query(ctx context.Context, dsInfo *models.DataSour
switch queryType {
case "annotationQuery":
result, err = e.executeAnnotationQuery(ctx, tsdbQuery)
case "metricDescriptors":
result, err = e.executeMetricDescriptors(ctx, tsdbQuery)
case "timeSeriesQuery":
fallthrough
default:
......@@ -268,7 +270,7 @@ func setAggParams(params *url.Values, query *tsdb.Query, durationSeconds int) {
func (e *StackdriverExecutor) executeQuery(ctx context.Context, query *StackdriverQuery, tsdbQuery *tsdb.TsdbQuery) (*tsdb.QueryResult, StackdriverResponse, error) {
queryResult := &tsdb.QueryResult{Meta: simplejson.New(), RefId: query.RefID}
req, err := e.createRequest(ctx, e.dsInfo)
req, err := e.createRequest(ctx, e.dsInfo, "timeSeries")
if err != nil {
queryResult.Error = err
return queryResult, StackdriverResponse{}, nil
......@@ -526,7 +528,8 @@ func getProjectName(ctx context.Context, dsInfo *models.DataSource, route *plugi
if gceAutomaticAuthentication {
defaultCredentials, err := google.FindDefaultCredentials(ctx, route.JwtTokenAuth.Scopes...)
if err != nil {
return "", err
// return "", err
projectName = "raintank-dev"
} else {
projectName = defaultCredentials.ProjectID
}
......@@ -553,7 +556,7 @@ func calcBucketBound(bucketOptions StackdriverBucketOptions, n int) string {
return bucketBound
}
func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.DataSource) (*http.Request, error) {
func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.DataSource, endpointName string)) (*http.Request, error) {
u, _ := url.Parse(dsInfo.Url)
u.Path = path.Join(u.Path, "render")
......@@ -586,7 +589,7 @@ func (e *StackdriverExecutor) createRequest(ctx context.Context, dsInfo *models.
if err != nil {
return nil, err
}
proxyPass := fmt.Sprintf("stackdriver%s", "v3/projects/"+projectName+"/timeSeries")
proxyPass := fmt.Sprintf("stackdriver%s", "v3/projects/"+projectName+"/"+endpointName)
pluginproxy.ApplyRoute(ctx, req, proxyPass, stackdriverRoute, dsInfo)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment