diff --git a/pkg/server/backgroundsvcs/background_services.go b/pkg/server/backgroundsvcs/background_services.go index 5862715661e..03aa3837eef 100644 --- a/pkg/server/backgroundsvcs/background_services.go +++ b/pkg/server/backgroundsvcs/background_services.go @@ -51,6 +51,7 @@ func ProvideBackgroundServiceRegistry( _ serviceaccounts.Service, _ *guardian.Provider, _ *plugindashboardsservice.DashboardUpdater, _ *sanitizer.Provider, _ *grpcserver.HealthService, + _ *grpcserver.ReflectionService, ) *BackgroundServiceRegistry { return NewBackgroundServiceRegistry( httpServer, diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 36b61905181..109d1619b9a 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -344,6 +344,7 @@ var wireBasicSet = wire.NewSet( orgimpl.ProvideService, grpcserver.ProvideService, grpcserver.ProvideHealthService, + grpcserver.ProvideReflectionService, teamimpl.ProvideService, tempuserimpl.ProvideService, loginattemptimpl.ProvideService, diff --git a/pkg/services/grpcserver/reflection.go b/pkg/services/grpcserver/reflection.go new file mode 100644 index 00000000000..3a4ecd09fe4 --- /dev/null +++ b/pkg/services/grpcserver/reflection.go @@ -0,0 +1,35 @@ +package grpcserver + +import ( + "context" + + "github.com/grafana/grafana/pkg/setting" + + "google.golang.org/grpc/reflection" + "google.golang.org/grpc/reflection/grpc_reflection_v1alpha" +) + +// ReflectionService implements the gRPC Server Reflection Protocol: +// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md +type ReflectionService struct { + cfg *setting.Cfg + reflectionServer *reflectionServer +} + +type reflectionServer struct { + grpc_reflection_v1alpha.ServerReflectionServer +} + +// AuthFuncOverride no auth for reflection service. +func (s *reflectionServer) AuthFuncOverride(ctx context.Context, _ string) (context.Context, error) { + return ctx, nil +} + +func ProvideReflectionService(cfg *setting.Cfg, grpcServerProvider Provider) (*ReflectionService, error) { + re := &reflectionServer{reflection.NewServer(reflection.ServerOptions{Services: grpcServerProvider.GetServer()})} + grpc_reflection_v1alpha.RegisterServerReflectionServer(grpcServerProvider.GetServer(), re) + return &ReflectionService{ + cfg: cfg, + reflectionServer: re, + }, nil +} diff --git a/pkg/services/grpcserver/service.go b/pkg/services/grpcserver/service.go index e207bd3fa4f..8294a287f0b 100644 --- a/pkg/services/grpcserver/service.go +++ b/pkg/services/grpcserver/service.go @@ -16,7 +16,6 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" - "google.golang.org/grpc/reflection" ) type Provider interface { @@ -51,9 +50,7 @@ func ProvideService(cfg *setting.Cfg, apiKey apikey.Service, userService user.Se opts = append(opts, grpc.Creds(credentials.NewTLS(cfg.GRPCServerTLSConfig))) } - grpcServer := grpc.NewServer(opts...) - reflection.Register(grpcServer) - s.server = grpcServer + s.server = grpc.NewServer(opts...) return s, nil }