mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 19:32:37 +08:00
Adds signed in user to backend v2 plugins requests (#22584)
closes #12043
This commit is contained in:
@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/util"
|
"github.com/grafana/grafana/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// QueryMetricsV2 returns query metrics
|
||||||
// POST /api/ds/query DataSource query w/ expressions
|
// POST /api/ds/query DataSource query w/ expressions
|
||||||
func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
|
func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
|
||||||
if !setting.IsExpressionsEnabled() {
|
if !setting.IsExpressionsEnabled() {
|
||||||
@ -29,6 +30,7 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricReq
|
|||||||
request := &tsdb.TsdbQuery{
|
request := &tsdb.TsdbQuery{
|
||||||
TimeRange: tsdb.NewTimeRange(reqDto.From, reqDto.To),
|
TimeRange: tsdb.NewTimeRange(reqDto.From, reqDto.To),
|
||||||
Debug: reqDto.Debug,
|
Debug: reqDto.Debug,
|
||||||
|
User: c.SignedInUser,
|
||||||
}
|
}
|
||||||
|
|
||||||
expr := false
|
expr := false
|
||||||
@ -92,6 +94,7 @@ func (hs *HTTPServer) QueryMetricsV2(c *models.ReqContext, reqDto dtos.MetricReq
|
|||||||
return JSON(statusCode, &resp)
|
return JSON(statusCode, &resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QueryMetrics returns query metrics
|
||||||
// POST /api/tsdb/query
|
// POST /api/tsdb/query
|
||||||
func (hs *HTTPServer) QueryMetrics(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
|
func (hs *HTTPServer) QueryMetrics(c *models.ReqContext, reqDto dtos.MetricRequest) Response {
|
||||||
timeRange := tsdb.NewTimeRange(reqDto.From, reqDto.To)
|
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)
|
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 {
|
for _, query := range reqDto.Queries {
|
||||||
request.Queries = append(request.Queries, &tsdb.Query{
|
request.Queries = append(request.Queries, &tsdb.Query{
|
||||||
@ -165,7 +172,7 @@ func GetTestDataScenarios(c *models.ReqContext) Response {
|
|||||||
return JSON(200, &result)
|
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 {
|
func GenerateError(c *models.ReqContext) Response {
|
||||||
var array []string
|
var array []string
|
||||||
// nolint: govet
|
// nolint: govet
|
||||||
|
@ -205,6 +205,7 @@ func ImportDashboard(c *models.ReqContext, apiCmd dtos.ImportDashboardCommand) R
|
|||||||
return JSON(200, cmd.Result)
|
return JSON(200, cmd.Result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CheckHealth returns the health of a plugin.
|
||||||
// /api/plugins/:pluginId/health
|
// /api/plugins/:pluginId/health
|
||||||
func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
|
func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
|
||||||
pluginID := c.Params("pluginId")
|
pluginID := c.Params("pluginId")
|
||||||
@ -226,8 +227,9 @@ func (hs *HTTPServer) CheckHealth(c *models.ReqContext) Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
payload := map[string]interface{}{
|
payload := map[string]interface{}{
|
||||||
"status": resp.Status.String(),
|
"status": resp.Status.String(),
|
||||||
"message": resp.Message,
|
"message": resp.Message,
|
||||||
|
"jsonDetails": resp.JSONDetails,
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.Status != backendplugin.HealthStatusOk {
|
if resp.Status != backendplugin.HealthStatusOk {
|
||||||
|
@ -230,6 +230,15 @@ func (p *BackendPlugin) callResource(ctx context.Context, req CallResourceReques
|
|||||||
Body: req.Body,
|
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 {
|
if req.Config.DataSourceConfig != nil {
|
||||||
protoReq.Config.DatasourceConfig = &pluginv2.DataSourceConfig{
|
protoReq.Config.DatasourceConfig = &pluginv2.DataSourceConfig{
|
||||||
Id: req.Config.DataSourceConfig.ID,
|
Id: req.Config.DataSourceConfig.ID,
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||||
|
"github.com/grafana/grafana/pkg/models"
|
||||||
|
|
||||||
"github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2"
|
"github.com/grafana/grafana-plugin-sdk-go/genproto/pluginv2"
|
||||||
)
|
)
|
||||||
@ -37,8 +38,9 @@ func (hs HealthStatus) String() string {
|
|||||||
|
|
||||||
// CheckHealthResult check health result.
|
// CheckHealthResult check health result.
|
||||||
type CheckHealthResult struct {
|
type CheckHealthResult struct {
|
||||||
Status HealthStatus
|
Status HealthStatus
|
||||||
Message string
|
Message string
|
||||||
|
JSONDetails string
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *CheckHealthResult {
|
func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *CheckHealthResult {
|
||||||
@ -51,8 +53,9 @@ func checkHealthResultFromProto(protoResp *pluginv2.CheckHealth_Response) *Check
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &CheckHealthResult{
|
return &CheckHealthResult{
|
||||||
Status: status,
|
Status: status,
|
||||||
Message: protoResp.Message,
|
Message: protoResp.Message,
|
||||||
|
JSONDetails: protoResp.JsonDetails,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,6 +86,7 @@ type CallResourceRequest struct {
|
|||||||
URL string
|
URL string
|
||||||
Headers map[string][]string
|
Headers map[string][]string
|
||||||
Body []byte
|
Body []byte
|
||||||
|
User *models.SignedInUser
|
||||||
}
|
}
|
||||||
|
|
||||||
// CallResourceResult call resource result.
|
// CallResourceResult call resource result.
|
||||||
|
@ -208,6 +208,7 @@ func (m *manager) CallResource(config PluginConfig, c *models.ReqContext, path s
|
|||||||
URL: clonedReq.URL.String(),
|
URL: clonedReq.URL.String(),
|
||||||
Headers: clonedReq.Header,
|
Headers: clonedReq.Header,
|
||||||
Body: body,
|
Body: body,
|
||||||
|
User: c.SignedInUser,
|
||||||
}
|
}
|
||||||
|
|
||||||
stream, err := p.callResource(clonedReq.Context(), req)
|
stream, err := p.callResource(clonedReq.Context(), req)
|
||||||
|
@ -51,6 +51,15 @@ func (tw *DatasourcePluginWrapperV2) Query(ctx context.Context, ds *models.DataS
|
|||||||
Queries: []*pluginv2.DataQuery{},
|
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 {
|
for _, q := range query.Queries {
|
||||||
modelJSON, err := q.Model.MarshalJSON()
|
modelJSON, err := q.Model.MarshalJSON()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -6,10 +6,12 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/models"
|
"github.com/grafana/grafana/pkg/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TsdbQuery contains all information about a query request.
|
||||||
type TsdbQuery struct {
|
type TsdbQuery struct {
|
||||||
TimeRange *TimeRange
|
TimeRange *TimeRange
|
||||||
Queries []*Query
|
Queries []*Query
|
||||||
Debug bool
|
Debug bool
|
||||||
|
User *models.SignedInUser
|
||||||
}
|
}
|
||||||
|
|
||||||
type Query struct {
|
type Query struct {
|
||||||
|
Reference in New Issue
Block a user