grab team headers from JSON data in datasource instance settings
This commit is contained in:
@@ -67,6 +67,7 @@ func (s *Service) runSearchStream(ctx context.Context, req *backend.RunStreamReq
|
||||
// Ideally this would be pushed higher, so it's set once for all rpc calls, but we have only one now.
|
||||
ctx = metadata.AppendToOutgoingContext(ctx, "User-Agent", backend.UserAgentFromContext(ctx).String())
|
||||
// append the rest of the headers
|
||||
backend.Logger.Warn("Headers:", "headers", req.Headers)
|
||||
for key, value := range req.Headers {
|
||||
ctx = metadata.AppendToOutgoingContext(ctx, key, value)
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"github.com/grafana/grafana/pkg/services/datasources"
|
||||
)
|
||||
|
||||
func (s *Service) SubscribeStream(_ context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) {
|
||||
@@ -39,19 +41,31 @@ func (s *Service) PublishStream(_ context.Context, _ *backend.PublishStreamReque
|
||||
|
||||
func (s *Service) RunStream(ctx context.Context, request *backend.RunStreamRequest, sender *backend.StreamSender) error {
|
||||
s.logger.Debug("New stream call", "path", request.Path)
|
||||
tempoDatasource, err := s.getDSInfo(ctx, request.PluginContext)
|
||||
tempoDatasource, dsInfoErr := s.getDSInfo(ctx, request.PluginContext)
|
||||
|
||||
// get team http headers.
|
||||
plugin := backend.PluginConfigFromContext(ctx)
|
||||
opts, err := plugin.DataSourceInstanceSettings.HTTPClientOptions(ctx)
|
||||
headers := map[string]string{}
|
||||
for name, values := range opts.Header {
|
||||
for _, value := range values {
|
||||
headers[name] = value
|
||||
b := plugin.DataSourceInstanceSettings.JSONData
|
||||
js, err := simplejson.NewJson(b)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
teamHttpHeaders, err := datasources.GetTeamHTTPHeaders(js)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, ruleValue := range teamHttpHeaders.Headers {
|
||||
for _, accessRule := range ruleValue {
|
||||
headers[accessRule.Header] = accessRule.LBACRule
|
||||
}
|
||||
}
|
||||
backend.Logger.Warn("Team HTTP Headers: %v", headers)
|
||||
request.Headers = headers
|
||||
if strings.HasPrefix(request.Path, SearchPathPrefix) {
|
||||
if err != nil {
|
||||
return backend.DownstreamErrorf("failed to get datasource information: %w", err)
|
||||
if dsInfoErr != nil {
|
||||
return backend.DownstreamErrorf("failed to get datasource information: %w", dsInfoErr)
|
||||
}
|
||||
if err = s.runSearchStream(ctx, request, sender, tempoDatasource); err != nil {
|
||||
return sendError(err, sender)
|
||||
@@ -60,8 +74,8 @@ func (s *Service) RunStream(ctx context.Context, request *backend.RunStreamReque
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(request.Path, MetricsPathPrefix) {
|
||||
if err != nil {
|
||||
return backend.DownstreamErrorf("failed to get datasource information: %w", err)
|
||||
if dsInfoErr != nil {
|
||||
return backend.DownstreamErrorf("failed to get datasource information: %w", dsInfoErr)
|
||||
}
|
||||
if err = s.runMetricsStream(ctx, request, sender, tempoDatasource); err != nil {
|
||||
return sendError(err, sender)
|
||||
|
||||
Reference in New Issue
Block a user