From ebe3fbc180acf3b8e3768a8ff70464f49b95365e Mon Sep 17 00:00:00 2001 From: Christopher Crone Date: Wed, 20 May 2020 15:56:07 +0200 Subject: [PATCH] Use config dir for serving API Signed-off-by: Christopher Crone --- cli/cmd/serve.go | 11 +++------ server/server.go | 62 +++++++++++++++++++++++------------------------- 2 files changed, 33 insertions(+), 40 deletions(-) diff --git a/cli/cmd/serve.go b/cli/cmd/serve.go index 6ea6c0793..5e681884e 100644 --- a/cli/cmd/serve.go +++ b/cli/cmd/serve.go @@ -21,6 +21,7 @@ type serveOpts struct { // ServeCommand returns the command to serve the API func ServeCommand() *cobra.Command { + // FIXME(chris-crone): Should warn that specified context is ignored var opts serveOpts cmd := &cobra.Command{ Use: "serve", @@ -36,14 +37,12 @@ func ServeCommand() *cobra.Command { } func runServe(ctx context.Context, opts serveOpts) error { - s := server.New() + s := server.New(ctx) listener, err := server.CreateListener(opts.address) - if err != nil { return errors.Wrap(err, "listen address "+opts.address) } - // nolint errcheck defer listener.Close() @@ -71,11 +70,7 @@ type cliServer struct { } func (cs *cliServer) Contexts(ctx context.Context, request *cliv1.ContextsRequest) (*cliv1.ContextsResponse, error) { - s, err := store.New() - if err != nil { - logrus.Error(err) - return &cliv1.ContextsResponse{}, err - } + s := store.ContextStore(ctx) contexts, err := s.List() if err != nil { logrus.Error(err) diff --git a/server/server.go b/server/server.go index ecac067f3..2f83f9e30 100644 --- a/server/server.go +++ b/server/server.go @@ -45,10 +45,10 @@ import ( ) // New returns a new GRPC server. -func New() *grpc.Server { +func New(ctx context.Context) *grpc.Server { s := grpc.NewServer( grpc.ChainUnaryInterceptor( - unaryMeta, + unaryMeta(ctx), unary, ), grpc.StreamInterceptor(stream), @@ -74,36 +74,34 @@ func stream(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, return grpc_prometheus.StreamServerInterceptor(srv, ss, info, handler) } -func unaryMeta(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - md, ok := metadata.FromIncomingContext(ctx) - if !ok { +func unaryMeta(clictx context.Context) func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return handler(ctx, req) + } + + key, ok := md[apicontext.Key] + if !ok { + return handler(ctx, req) + } + + if len(key) == 1 { + s := store.ContextStore(clictx) + ctx = store.WithContextStore(ctx, s) + ctx = apicontext.WithCurrentContext(ctx, key[0]) + + c, err := client.New(ctx) + if err != nil { + return nil, err + } + + ctx, err = proxy.WithClient(ctx, c) + if err != nil { + return nil, err + } + } + return handler(ctx, req) } - - key, ok := md[apicontext.Key] - if !ok { - return handler(ctx, req) - } - - if len(key) == 1 { - s, err := store.New() - if err != nil { - return nil, err - } - - ctx = store.WithContextStore(ctx, s) - ctx = apicontext.WithCurrentContext(ctx, key[0]) - - c, err := client.New(ctx) - if err != nil { - return nil, err - } - - ctx, err = proxy.WithClient(ctx, c) - if err != nil { - return nil, err - } - } - - return handler(ctx, req) }