mirror of
https://github.com/grafana/grafana.git
synced 2025-07-31 13:02:12 +08:00

`X-Dashboard-Uid`, `X-Datasource-Uid`, `X-Grafana-Org-Id`, `X-Panel-Id` are very useful headers set
by Grafana front-end that we would like to see on the data source as
well. This is so that it would be possible to pinpoint from where slow
queries are coming in Mimir/Thanos/Cortex/etc., for example. Relevant
Mimir code lines:
0a94f26203/pkg/frontend/transport/handler.go (L182-L184)
Tested manually that with these changes the headers are visible.
89 lines
3.5 KiB
Go
89 lines
3.5 KiB
Go
package pluginsintegration
|
|
|
|
import (
|
|
"github.com/google/wire"
|
|
"github.com/grafana/grafana/pkg/plugins"
|
|
"github.com/grafana/grafana/pkg/plugins/backendplugin/coreplugin"
|
|
"github.com/grafana/grafana/pkg/plugins/backendplugin/provider"
|
|
"github.com/grafana/grafana/pkg/plugins/config"
|
|
"github.com/grafana/grafana/pkg/plugins/manager"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/client"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/loader"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/process"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/registry"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/signature"
|
|
"github.com/grafana/grafana/pkg/plugins/manager/store"
|
|
"github.com/grafana/grafana/pkg/plugins/plugincontext"
|
|
"github.com/grafana/grafana/pkg/plugins/repo"
|
|
"github.com/grafana/grafana/pkg/services/oauthtoken"
|
|
"github.com/grafana/grafana/pkg/services/pluginsintegration/clientmiddleware"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
// WireSet provides a wire.ProviderSet of plugin providers.
|
|
var WireSet = wire.NewSet(
|
|
config.ProvideConfig,
|
|
store.ProvideService,
|
|
wire.Bind(new(plugins.Store), new(*store.Service)),
|
|
wire.Bind(new(plugins.RendererManager), new(*store.Service)),
|
|
wire.Bind(new(plugins.SecretsPluginManager), new(*store.Service)),
|
|
wire.Bind(new(plugins.StaticRouteResolver), new(*store.Service)),
|
|
ProvideClientDecorator,
|
|
wire.Bind(new(plugins.Client), new(*client.Decorator)),
|
|
process.ProvideService,
|
|
wire.Bind(new(process.Service), new(*process.Manager)),
|
|
coreplugin.ProvideCoreRegistry,
|
|
loader.ProvideService,
|
|
wire.Bind(new(loader.Service), new(*loader.Loader)),
|
|
wire.Bind(new(plugins.ErrorResolver), new(*loader.Loader)),
|
|
manager.ProvideInstaller,
|
|
wire.Bind(new(plugins.Installer), new(*manager.PluginInstaller)),
|
|
registry.ProvideService,
|
|
wire.Bind(new(registry.Service), new(*registry.InMemory)),
|
|
repo.ProvideService,
|
|
wire.Bind(new(repo.Service), new(*repo.Manager)),
|
|
plugincontext.ProvideService,
|
|
)
|
|
|
|
// WireExtensionSet provides a wire.ProviderSet of plugin providers that can be
|
|
// extended.
|
|
var WireExtensionSet = wire.NewSet(
|
|
provider.ProvideService,
|
|
wire.Bind(new(plugins.BackendFactoryProvider), new(*provider.Service)),
|
|
signature.ProvideOSSAuthorizer,
|
|
wire.Bind(new(plugins.PluginLoaderAuthorizer), new(*signature.UnsignedPluginAuthorizer)),
|
|
)
|
|
|
|
func ProvideClientDecorator(cfg *setting.Cfg, pCfg *config.Cfg,
|
|
pluginRegistry registry.Service,
|
|
oAuthTokenService oauthtoken.OAuthTokenService) (*client.Decorator, error) {
|
|
return NewClientDecorator(cfg, pCfg, pluginRegistry, oAuthTokenService)
|
|
}
|
|
|
|
func NewClientDecorator(cfg *setting.Cfg, pCfg *config.Cfg,
|
|
pluginRegistry registry.Service,
|
|
oAuthTokenService oauthtoken.OAuthTokenService) (*client.Decorator, error) {
|
|
c := client.ProvideService(pluginRegistry, pCfg)
|
|
middlewares := CreateMiddlewares(cfg, oAuthTokenService)
|
|
|
|
return client.NewDecorator(c, middlewares...)
|
|
}
|
|
|
|
func CreateMiddlewares(cfg *setting.Cfg, oAuthTokenService oauthtoken.OAuthTokenService) []plugins.ClientMiddleware {
|
|
skipCookiesNames := []string{cfg.LoginCookieName}
|
|
middlewares := []plugins.ClientMiddleware{
|
|
clientmiddleware.NewTracingHeaderMiddleware(),
|
|
clientmiddleware.NewClearAuthHeadersMiddleware(),
|
|
clientmiddleware.NewOAuthTokenMiddleware(oAuthTokenService),
|
|
clientmiddleware.NewCookiesMiddleware(skipCookiesNames),
|
|
}
|
|
|
|
if cfg.SendUserHeader {
|
|
middlewares = append(middlewares, clientmiddleware.NewUserHeaderMiddleware())
|
|
}
|
|
|
|
middlewares = append(middlewares, clientmiddleware.NewHTTPClientMiddleware())
|
|
|
|
return middlewares
|
|
}
|