mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Adds signed in user to backend v2 plugins requests (#22584)
closes #12043
This commit is contained in:
parent
c73a0007c7
commit
1dcfaf25fc
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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,
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user