Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
ff5f2815
Commit
ff5f2815
authored
Oct 09, 2018
by
Erik Sundell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
stackdriver: wip - get metric descriptors in the backend
parent
60617d0b
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
9 deletions
+60
-9
pkg/api/pluginproxy/ds_auth_provider.go
+6
-5
pkg/tsdb/stackdriver/metric_descriptors_query.go
+47
-0
pkg/tsdb/stackdriver/stackdriver.go
+7
-4
No files found.
pkg/api/pluginproxy/ds_auth_provider.go
View file @
ff5f2815
...
...
@@ -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
)
{
...
...
pkg/tsdb/stackdriver/metric_descriptors_query.go
0 → 100644
View file @
ff5f2815
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
}
pkg/tsdb/stackdriver/stackdriver.go
View file @
ff5f2815
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment