Adds signed in user to backend v2 plugins requests (#22584)

closes #12043
This commit is contained in:
Carl Bergquist 2020-03-06 14:37:36 +01:00 committed by GitHub
parent c73a0007c7
commit 1dcfaf25fc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 8 deletions

View File

@ -16,6 +16,7 @@ import (
"github.com/grafana/grafana/pkg/util"
)
// QueryMetricsV2 returns query metrics
// POST /api/ds/query DataSource query w/ expressions
func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
if !setting.IsExpressionsEnabled() {
@ -29,6 +30,7 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricReq
request := &tsdb.TsdbQuery{
TimeRange: tsdb.NewTimeRange(reqDto.From, reqDto.To),
Debug: reqDto.Debug,
User: c.SignedInUser,
}
expr := false
@ -92,6 +94,7 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricReq
return JSON(statusCode, &resp)
}
// QueryMetrics returns query metrics
// POST /api/tsdb/query
func (hs *HTTPServer) QueryMetrics(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
timeRange := tsdb.NewTimeRange(reqDto.From, reqDto.To)
@ -113,7 +116,11 @@ func (hs *HTTPServer) QueryMetrics(c *models.ReqContext, reqDto dtos.MetricReque
return Error(500, "Unable to load datasource meta data", err)
}
request := &tsdb.TsdbQuery{TimeRange: timeRange, Debug: reqDto.Debug}
request := &tsdb.TsdbQuery{
TimeRange: timeRange,
Debug: reqDto.Debug,
User: c.SignedInUser,
}
for _, query := range reqDto.Queries {
request.Queries = append(request.Queries, &tsdb.Query{
@ -165,7 +172,7 @@ func GetTestDataScenarios(c *models.ReqContext) Response {
return JSON(200, &result)
}
// Generates a index out of range error
// GenerateError generates a index out of range error
func GenerateError(c *models.ReqContext) Response {
var array []string
// nolint: govet

View File

@ -205,6 +205,7 @@ func ImportDashboard(c *models.ReqContext, apiCmd dtos.ImportDashboardCommand) R
return JSON(200, cmd.Result)
}
// CheckHealth returns the health of a plugin.
// /api/plugins/:pluginId/health
func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
pluginID := c.Params("pluginId")
@ -226,8 +227,9 @@ func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
}
payload := map[string]interface{}{
"status": resp.Status.String(),
"message": resp.Message,
"status": resp.Status.String(),
"message": resp.Message,
"jsonDetails": resp.JSONDetails,
}
if resp.Status != backendplugin.HealthStatusOk {

View File

@ -230,6 +230,15 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
Body: req.Body,
}
if req.User != nil {
protoReq.User = &pluginv2.User{
Name: req.User.Name,
Login: req.User.Login,
Email: req.User.Email,
Role: string(req.User.OrgRole),
}
}
if req.Config.DataSourceConfig != nil {
protoReq.Config.DatasourceConfig = &pluginv2.DataSourceConfig{
Id: req.Config.DataSourceConfig.ID,

View File

@ -5,6 +5,7 @@ import (
"time"
"github.com/grafana/grafana/pkg/components/simplejson"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2"
)
@ -37,8 +38,9 @@ func (hs HealthStatus) String() string {
// CheckHealthResult check health result.
type CheckHealthResult struct {
Status HealthStatus
Message string
Status HealthStatus
Message string
JSONDetails string
}
func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *CheckHealthResult {
@ -51,8 +53,9 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *Check
}
return &CheckHealthResult{
Status: status,
Message: protoResp.Message,
Status: status,
Message: protoResp.Message,
JSONDetails: protoResp.JsonDetails,
}
}
@ -83,6 +86,7 @@ type CallResourceRequest struct {
URL string
Headers map[string][]string
Body []byte
User *models.SignedInUser
}
// CallResourceResult call resource result.

View File

@ -208,6 +208,7 @@ func (m *manager) CallResource(config PluginConfig, c *models.ReqContext, path s
URL: clonedReq.URL.String(),
Headers: clonedReq.Header,
Body: body,
User: c.SignedInUser,
}
stream, err := p.callResource(clonedReq.Context(), req)

View File

@ -51,6 +51,15 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS
Queries: []*pluginv2.DataQuery{},
}
if query.User != nil {
pbQuery.User = &pluginv2.User{
Name: query.User.Name,
Login: query.User.Login,
Email: query.User.Email,
Role: string(query.User.OrgRole),
}
}
for _, q := range query.Queries {
modelJSON, err := q.Model.MarshalJSON()
if err != nil {

View File

@ -6,10 +6,12 @@ import (
"github.com/grafana/grafana/pkg/models"
)
// TsdbQuery contains all information about a query request.
type TsdbQuery struct {
TimeRange *TimeRange
Queries []*Query
Debug bool
User *models.SignedInUser
}
type Query struct {