From 1f7774edf941ff91668883cddfa320a073006a52 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Mon, 3 Jan 2022 10:52:25 +0530 Subject: [PATCH] Basic server setup complete for usermgmt --- components/usermgmt/go.mod | 1 - components/usermgmt/go.sum | 2 + components/usermgmt/main.go | 77 ++++++++++++++++++++++++- components/usermgmt/pkg/service/user.go | 30 ++++++++++ 4 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 components/usermgmt/pkg/service/user.go diff --git a/components/usermgmt/go.mod b/components/usermgmt/go.mod index 977b8b1..b9a18ef 100644 --- a/components/usermgmt/go.mod +++ b/components/usermgmt/go.mod @@ -6,7 +6,6 @@ require ( github.com/RafaySystems/rcloud-base/components/adminsrv v0.0.0-unpublished github.com/RafaySystems/rcloud-base/components/common v0.0.0-unpublished github.com/gogo/protobuf v1.3.2 - github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.2 github.com/spf13/viper v1.10.1 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa diff --git a/components/usermgmt/go.sum b/components/usermgmt/go.sum index 5ec7f80..3633fd4 100644 --- a/components/usermgmt/go.sum +++ b/components/usermgmt/go.sum @@ -336,6 +336,7 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= @@ -484,6 +485,7 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/speps/go-hashids v2.0.0+incompatible h1:kSfxGfESueJKTx0mpER9Y/1XHl+FVQjtCqRyYcviFbw= github.com/speps/go-hashids v2.0.0+incompatible/go.mod h1:P7hqPzMdnZOfyIk+xrlG1QaSMw+gCBdHKsBDnhpaZvc= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= diff --git a/components/usermgmt/main.go b/components/usermgmt/main.go index 72e1fb1..da9179c 100644 --- a/components/usermgmt/main.go +++ b/components/usermgmt/main.go @@ -3,18 +3,25 @@ package main import ( "context" "fmt" + "net" "net/http" "sync" + "time" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/spf13/viper" "sigs.k8s.io/controller-runtime/pkg/manager/signals" + "github.com/RafaySystems/rcloud-base/components/common/pkg/auth/interceptors" authv3 "github.com/RafaySystems/rcloud-base/components/common/pkg/auth/v3" "github.com/RafaySystems/rcloud-base/components/common/pkg/gateway" logv2 "github.com/RafaySystems/rcloud-base/components/common/pkg/log/v2" configrpc "github.com/RafaySystems/rcloud-base/components/common/proto/rpc/config" + "github.com/RafaySystems/rcloud-base/components/usermgmt/pkg/service" pbrpcv3 "github.com/RafaySystems/rcloud-base/components/usermgmt/proto/rpc/v3" + rpcv3 "github.com/RafaySystems/rcloud-base/components/usermgmt/proto/rpc/v3" + "google.golang.org/grpc" + _grpc "google.golang.org/grpc" ) const ( @@ -78,8 +85,8 @@ func run() { wg.Add(1) go runAPI(&wg, ctx) - // go runRPC(&wg, ctx) - // go runDebug(&wg, ctx) + go runRPC(&wg, ctx) + go runDebug(&wg, ctx) <-ctx.Done() wg.Wait() @@ -120,6 +127,72 @@ func runAPI(wg *sync.WaitGroup, ctx context.Context) { } } +func runRPC(wg *sync.WaitGroup, ctx context.Context) { + defer wg.Done() + // defer configPool.Close() + + // userServer := rpcv3.NewUserServer(service.NewUserServer()) + + l, err := net.Listen("tcp", fmt.Sprintf(":%d", rpcPort)) + if err != nil { + _log.Fatalw("unable to start rpc listener", "error", err) + } + + var opts []_grpc.ServerOption + if !dev { + opts = append(opts, _grpc.UnaryInterceptor( + interceptors.NewAuthInterceptorWithOptions( + interceptors.WithLogRequest(), + interceptors.WithAuthPool(authPool), + interceptors.WithExclude("POST", "/v2/sentry/bootstrap/:templateToken/register"), + ), + )) + defer authPool.Close() + } else { + opts = append(opts, _grpc.UnaryInterceptor( + interceptors.NewAuthInterceptorWithOptions(interceptors.WithDummy())), + ) + } + s := grpc.NewServer(opts...) + if err != nil { + _log.Fatalw("unable to create grpc server", "error", err) + } + + go func() { + defer s.GracefulStop() + + <-ctx.Done() + _log.Infow("context done") + }() + + rpcv3.RegisterUserServer(s, service.NewUserServer()) + + _log.Infow("starting rpc server", "port", rpcPort) + err = s.Serve(l) + if err != nil { + _log.Fatalw("unable to start rpc server", "error", err) + } +} + +func runDebug(wg *sync.WaitGroup, ctx context.Context) { + defer wg.Done() + s := http.Server{ + Addr: fmt.Sprintf(":%d", debugPort), + } + _log.Infow("starting debug server", "port", debugPort) + go func() { + err := s.ListenAndServe() + if err != nil { + _log.Fatalw("unable to start debug server", "error", err) + } + }() + + <-ctx.Done() + ctx, cancel := context.WithTimeout(ctx, time.Second*10) + defer cancel() + s.Shutdown(ctx) +} + func main() { setup() run() diff --git a/components/usermgmt/pkg/service/user.go b/components/usermgmt/pkg/service/user.go new file mode 100644 index 0000000..b009b48 --- /dev/null +++ b/components/usermgmt/pkg/service/user.go @@ -0,0 +1,30 @@ +package service + +import ( + "context" + "fmt" + + userv3 "github.com/RafaySystems/rcloud-base/components/usermgmt/proto/types/userpb/v3" + userrpcv3 "github.com/RafaySystems/rcloud-base/components/usermgmt/proto/rpc/v3" +) + +type server struct{} + +func (s *server) CreateUser(context.Context, *userv3.User) (*userv3.User, error) { + fmt.Println("Called create user") + return nil, nil +} +func (s *server) GetUsers(context.Context, *userrpcv3.GetUsersRequest) (*userrpcv3.GetUsersResponse, error) { + return nil, nil +} +func (s *server) GetUser(context.Context, *userrpcv3.GetUserRequest) (*userv3.User, error) { return nil, nil } +func (s *server) UpdateUser(context.Context, *userrpcv3.PutUserRequest) (*userrpcv3.UserResponse, error) { + return nil, nil +} +func (s *server) DeleteUser(context.Context, *userrpcv3.DeleteUserRequest) (*userrpcv3.UserResponse, error) { + return nil, nil +} + +func NewUserServer() userrpcv3.UserServer { + return &server{} +}