From 2313e4db1fd7c385b48b2d61a050469e805379e2 Mon Sep 17 00:00:00 2001 From: Jason McCallister Date: Mon, 27 Jul 2020 07:43:09 -0400 Subject: [PATCH] break out to multiple services --- cmd/nitrod/main.go | 5 +- internal/client/client.go | 9 + internal/cmd/nginx.go | 12 +- internal/cmd/php.go | 14 +- internal/nitrod/iniset.go | 2 +- internal/nitrod/initset_test.go | 2 +- internal/nitrod/nginx.go | 33 --- internal/nitrod/nitrod.pb.go | 189 +++++++++++------- internal/nitrod/nitrod.proto | 7 +- internal/nitrod/php_fpm.go | 45 ----- internal/nitrod/service.go | 6 +- ...x_test.go => system_service_nginx_test.go} | 4 +- ...test.go => system_service_php_fpm_test.go} | 4 +- 13 files changed, 152 insertions(+), 180 deletions(-) delete mode 100644 internal/nitrod/nginx.go delete mode 100644 internal/nitrod/php_fpm.go rename internal/nitrod/{nginx_test.go => system_service_nginx_test.go} (95%) rename internal/nitrod/{php_fpm_test.go => system_service_php_fpm_test.go} (97%) diff --git a/cmd/nitrod/main.go b/cmd/nitrod/main.go index 816404e6..e194b3ee 100644 --- a/cmd/nitrod/main.go +++ b/cmd/nitrod/main.go @@ -25,8 +25,9 @@ func main() { // create the grpc server s := grpc.NewServer() - // register our service - nitrod.RegisterNitroServiceServer(s, nitrod.New()) + // register our services + nitrod.RegisterNitroServiceServer(s, nitrod.NewNitroService()) + nitrod.RegisterSystemServiceServer(s, nitrod.NewSystemService()) fmt.Println("running nitrod on port", *port) diff --git a/internal/client/client.go b/internal/client/client.go index 6d203961..091f62a9 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -19,3 +19,12 @@ func NewClient(ip, port string) nitrod.NitroServiceClient { return nitrod.NewNitroServiceClient(cc) } + +func NewSystemClient(ip, port string) nitrod.SystemServiceClient { + cc, err := grpc.Dial(ip+":"+port, grpc.WithInsecure()) + if err != nil { + log.Fatal("error creating nitrod system client, error:", err) + } + + return nitrod.NewSystemServiceClient(cc) +} diff --git a/internal/cmd/nginx.go b/internal/cmd/nginx.go index 9c913095..e7073ca7 100644 --- a/internal/cmd/nginx.go +++ b/internal/cmd/nginx.go @@ -25,9 +25,9 @@ var nginxRestartCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") - resp, err := c.NginxService(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_RESTART}) + resp, err := c.Nginx(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_RESTART}) if err != nil { return err } @@ -45,9 +45,9 @@ var nginxStartCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") - resp, err := c.NginxService(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_START}) + resp, err := c.Nginx(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_START}) if err != nil { return err } @@ -65,9 +65,9 @@ var nginxStopCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") - resp, err := c.NginxService(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_STOP}) + resp, err := c.Nginx(cmd.Context(), &nitrod.NginxServiceRequest{Action: nitrod.ServiceAction_STOP}) if err != nil { return err } diff --git a/internal/cmd/php.go b/internal/cmd/php.go index a0b523c5..67bd7c80 100644 --- a/internal/cmd/php.go +++ b/internal/cmd/php.go @@ -6,9 +6,9 @@ import ( "github.com/spf13/cobra" "github.com/craftcms/nitro/config" - "github.com/craftcms/nitro/internal/nitrod" "github.com/craftcms/nitro/internal/client" "github.com/craftcms/nitro/internal/nitro" + "github.com/craftcms/nitro/internal/nitrod" ) var phpCommand = &cobra.Command{ @@ -26,10 +26,10 @@ var phpRestartCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") php := config.GetString("php", flagPhpVersion) - resp, err := c.PhpFpmService(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_RESTART}) + resp, err := c.PhpFpm(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_RESTART}) if err != nil { return err } @@ -47,10 +47,10 @@ var phpStartCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") php := config.GetString("php", flagPhpVersion) - resp, err := c.PhpFpmService(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_START}) + resp, err := c.PhpFpm(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_START}) if err != nil { return err } @@ -68,10 +68,10 @@ var phpStopCommand = &cobra.Command{ machine := flagMachineName runner := nitro.NewMultipassRunner("multipass") ip := nitro.IP(machine, runner) - c := client.NewClient(ip, "50051") + c := client.NewSystemClient(ip, "50051") php := config.GetString("php", flagPhpVersion) - resp, err := c.PhpFpmService(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_STOP}) + resp, err := c.PhpFpm(cmd.Context(), &nitrod.PhpFpmServiceRequest{Version: php, Action: nitrod.ServiceAction_STOP}) if err != nil { return err } diff --git a/internal/nitrod/iniset.go b/internal/nitrod/iniset.go index b12e1658..a0b39705 100644 --- a/internal/nitrod/iniset.go +++ b/internal/nitrod/iniset.go @@ -10,7 +10,7 @@ import ( "github.com/craftcms/nitro/validate" ) -func (s *Service) PhpIniSettings(ctx context.Context, request *ChangePhpIniSettingRequest) (*ServiceResponse, error) { +func (s *NitroService) PhpIniSettings(ctx context.Context, request *ChangePhpIniSettingRequest) (*ServiceResponse, error) { var setting string value := request.GetValue() version := request.GetVersion() diff --git a/internal/nitrod/initset_test.go b/internal/nitrod/initset_test.go index 0aae3fae..4adbdae2 100644 --- a/internal/nitrod/initset_test.go +++ b/internal/nitrod/initset_test.go @@ -213,7 +213,7 @@ func TestNitrodService_PhpIniSettings(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { spy := &spyChainRunner{} - s := &Service{ + s := &NitroService{ command: spy, logger: tt.fields.logger, } diff --git a/internal/nitrod/nginx.go b/internal/nitrod/nginx.go deleted file mode 100644 index 0e26ac89..00000000 --- a/internal/nitrod/nginx.go +++ /dev/null @@ -1,33 +0,0 @@ -package nitrod - -import ( - "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func (s *Service) NginxService(ctx context.Context, request *NginxServiceRequest) (*ServiceResponse, error) { - var action string - var message string - switch request.GetAction() { - case ServiceAction_START: - message = "started" - action = "start" - case ServiceAction_STOP: - message = "stopped" - action = "stop" - default: - message = "restarted" - action = "restart" - } - - // perform the action on the php-fpm service - if output, err := s.command.Run("service", []string{"nginx", action}); err != nil { - s.logger.Println(err) - s.logger.Println("output:", string(output)) - return nil, status.Errorf(codes.Unknown, string(output)) - } - - return &ServiceResponse{Message: "successfully " + message + " nginx"}, nil -} diff --git a/internal/nitrod/nitrod.pb.go b/internal/nitrod/nitrod.pb.go index 175dbe4e..91dfc91c 100644 --- a/internal/nitrod/nitrod.pb.go +++ b/internal/nitrod/nitrod.pb.go @@ -387,23 +387,24 @@ var file_internal_nitrod_nitrod_proto_rawDesc = []byte{ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x02, 0x32, - 0xf1, 0x01, 0x0a, 0x0c, 0x4e, 0x69, 0x74, 0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x48, 0x0a, 0x0d, 0x50, 0x68, 0x70, 0x46, 0x70, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x1c, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x50, 0x68, 0x70, 0x46, 0x70, - 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0c, 0x4e, 0x67, - 0x69, 0x6e, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x6e, 0x69, 0x74, - 0x72, 0x6f, 0x64, 0x2e, 0x4e, 0x67, 0x69, 0x6e, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x50, 0x68, 0x70, 0x49, 0x6e, 0x69, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x50, 0x68, 0x70, 0x49, 0x6e, 0x69, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, + 0x5f, 0x0a, 0x0c, 0x4e, 0x69, 0x74, 0x72, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x4f, 0x0a, 0x0e, 0x50, 0x68, 0x70, 0x49, 0x6e, 0x69, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x22, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x50, 0x68, 0x70, 0x49, 0x6e, 0x69, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x93, 0x01, 0x0a, 0x0d, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x3f, 0x0a, 0x05, 0x4e, 0x67, 0x69, 0x6e, 0x78, 0x12, 0x1b, 0x2e, 0x6e, 0x69, + 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x4e, 0x67, 0x69, 0x6e, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x11, 0x5a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x06, 0x50, 0x68, 0x70, 0x46, 0x70, 0x6d, 0x12, 0x1c, 0x2e, + 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x50, 0x68, 0x70, 0x46, 0x70, 0x6d, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6e, 0x69, + 0x74, 0x72, 0x6f, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x11, 0x5a, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x6e, 0x69, 0x74, 0x72, 0x6f, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -432,12 +433,12 @@ var file_internal_nitrod_nitrod_proto_depIdxs = []int32{ 0, // 0: nitrod.ChangePhpIniSettingRequest.setting:type_name -> nitrod.PhpIniSetting 1, // 1: nitrod.PhpFpmServiceRequest.action:type_name -> nitrod.ServiceAction 1, // 2: nitrod.NginxServiceRequest.action:type_name -> nitrod.ServiceAction - 3, // 3: nitrod.NitroService.PhpFpmService:input_type -> nitrod.PhpFpmServiceRequest - 4, // 4: nitrod.NitroService.NginxService:input_type -> nitrod.NginxServiceRequest - 2, // 5: nitrod.NitroService.PhpIniSettings:input_type -> nitrod.ChangePhpIniSettingRequest - 5, // 6: nitrod.NitroService.PhpFpmService:output_type -> nitrod.ServiceResponse - 5, // 7: nitrod.NitroService.NginxService:output_type -> nitrod.ServiceResponse - 5, // 8: nitrod.NitroService.PhpIniSettings:output_type -> nitrod.ServiceResponse + 2, // 3: nitrod.NitroService.PhpIniSettings:input_type -> nitrod.ChangePhpIniSettingRequest + 4, // 4: nitrod.SystemService.Nginx:input_type -> nitrod.NginxServiceRequest + 3, // 5: nitrod.SystemService.PhpFpm:input_type -> nitrod.PhpFpmServiceRequest + 5, // 6: nitrod.NitroService.PhpIniSettings:output_type -> nitrod.ServiceResponse + 5, // 7: nitrod.SystemService.Nginx:output_type -> nitrod.ServiceResponse + 5, // 8: nitrod.SystemService.PhpFpm:output_type -> nitrod.ServiceResponse 6, // [6:9] is the sub-list for method output_type 3, // [3:6] is the sub-list for method input_type 3, // [3:3] is the sub-list for extension type_name @@ -508,7 +509,7 @@ func file_internal_nitrod_nitrod_proto_init() { NumEnums: 2, NumMessages: 4, NumExtensions: 0, - NumServices: 1, + NumServices: 2, }, GoTypes: file_internal_nitrod_nitrod_proto_goTypes, DependencyIndexes: file_internal_nitrod_nitrod_proto_depIdxs, @@ -533,8 +534,6 @@ const _ = grpc.SupportPackageIsVersion6 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type NitroServiceClient interface { - PhpFpmService(ctx context.Context, in *PhpFpmServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) - NginxService(ctx context.Context, in *NginxServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) PhpIniSettings(ctx context.Context, in *ChangePhpIniSettingRequest, opts ...grpc.CallOption) (*ServiceResponse, error) } @@ -546,24 +545,6 @@ func NewNitroServiceClient(cc grpc.ClientConnInterface) NitroServiceClient { return &nitroServiceClient{cc} } -func (c *nitroServiceClient) PhpFpmService(ctx context.Context, in *PhpFpmServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) { - out := new(ServiceResponse) - err := c.cc.Invoke(ctx, "/nitrod.NitroService/PhpFpmService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *nitroServiceClient) NginxService(ctx context.Context, in *NginxServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) { - out := new(ServiceResponse) - err := c.cc.Invoke(ctx, "/nitrod.NitroService/NginxService", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *nitroServiceClient) PhpIniSettings(ctx context.Context, in *ChangePhpIniSettingRequest, opts ...grpc.CallOption) (*ServiceResponse, error) { out := new(ServiceResponse) err := c.cc.Invoke(ctx, "/nitrod.NitroService/PhpIniSettings", in, out, opts...) @@ -575,8 +556,6 @@ func (c *nitroServiceClient) PhpIniSettings(ctx context.Context, in *ChangePhpIn // NitroServiceServer is the server API for NitroService service. type NitroServiceServer interface { - PhpFpmService(context.Context, *PhpFpmServiceRequest) (*ServiceResponse, error) - NginxService(context.Context, *NginxServiceRequest) (*ServiceResponse, error) PhpIniSettings(context.Context, *ChangePhpIniSettingRequest) (*ServiceResponse, error) } @@ -584,12 +563,6 @@ type NitroServiceServer interface { type UnimplementedNitroServiceServer struct { } -func (*UnimplementedNitroServiceServer) PhpFpmService(context.Context, *PhpFpmServiceRequest) (*ServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PhpFpmService not implemented") -} -func (*UnimplementedNitroServiceServer) NginxService(context.Context, *NginxServiceRequest) (*ServiceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method NginxService not implemented") -} func (*UnimplementedNitroServiceServer) PhpIniSettings(context.Context, *ChangePhpIniSettingRequest) (*ServiceResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PhpIniSettings not implemented") } @@ -598,75 +571,139 @@ func RegisterNitroServiceServer(s *grpc.Server, srv NitroServiceServer) { s.RegisterService(&_NitroService_serviceDesc, srv) } -func _NitroService_PhpFpmService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PhpFpmServiceRequest) +func _NitroService_PhpIniSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ChangePhpIniSettingRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(NitroServiceServer).PhpFpmService(ctx, in) + return srv.(NitroServiceServer).PhpIniSettings(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/nitrod.NitroService/PhpFpmService", + FullMethod: "/nitrod.NitroService/PhpIniSettings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NitroServiceServer).PhpFpmService(ctx, req.(*PhpFpmServiceRequest)) + return srv.(NitroServiceServer).PhpIniSettings(ctx, req.(*ChangePhpIniSettingRequest)) } return interceptor(ctx, in, info, handler) } -func _NitroService_NginxService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { +var _NitroService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "nitrod.NitroService", + HandlerType: (*NitroServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "PhpIniSettings", + Handler: _NitroService_PhpIniSettings_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "internal/nitrod/nitrod.proto", +} + +// SystemServiceClient is the client API for SystemService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type SystemServiceClient interface { + Nginx(ctx context.Context, in *NginxServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) + PhpFpm(ctx context.Context, in *PhpFpmServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) +} + +type systemServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSystemServiceClient(cc grpc.ClientConnInterface) SystemServiceClient { + return &systemServiceClient{cc} +} + +func (c *systemServiceClient) Nginx(ctx context.Context, in *NginxServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) { + out := new(ServiceResponse) + err := c.cc.Invoke(ctx, "/nitrod.SystemService/Nginx", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *systemServiceClient) PhpFpm(ctx context.Context, in *PhpFpmServiceRequest, opts ...grpc.CallOption) (*ServiceResponse, error) { + out := new(ServiceResponse) + err := c.cc.Invoke(ctx, "/nitrod.SystemService/PhpFpm", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SystemServiceServer is the server API for SystemService service. +type SystemServiceServer interface { + Nginx(context.Context, *NginxServiceRequest) (*ServiceResponse, error) + PhpFpm(context.Context, *PhpFpmServiceRequest) (*ServiceResponse, error) +} + +// UnimplementedSystemServiceServer can be embedded to have forward compatible implementations. +type UnimplementedSystemServiceServer struct { +} + +func (*UnimplementedSystemServiceServer) Nginx(context.Context, *NginxServiceRequest) (*ServiceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Nginx not implemented") +} +func (*UnimplementedSystemServiceServer) PhpFpm(context.Context, *PhpFpmServiceRequest) (*ServiceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PhpFpm not implemented") +} + +func RegisterSystemServiceServer(s *grpc.Server, srv SystemServiceServer) { + s.RegisterService(&_SystemService_serviceDesc, srv) +} + +func _SystemService_Nginx_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(NginxServiceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(NitroServiceServer).NginxService(ctx, in) + return srv.(SystemServiceServer).Nginx(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/nitrod.NitroService/NginxService", + FullMethod: "/nitrod.SystemService/Nginx", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NitroServiceServer).NginxService(ctx, req.(*NginxServiceRequest)) + return srv.(SystemServiceServer).Nginx(ctx, req.(*NginxServiceRequest)) } return interceptor(ctx, in, info, handler) } -func _NitroService_PhpIniSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ChangePhpIniSettingRequest) +func _SystemService_PhpFpm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PhpFpmServiceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(NitroServiceServer).PhpIniSettings(ctx, in) + return srv.(SystemServiceServer).PhpFpm(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/nitrod.NitroService/PhpIniSettings", + FullMethod: "/nitrod.SystemService/PhpFpm", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NitroServiceServer).PhpIniSettings(ctx, req.(*ChangePhpIniSettingRequest)) + return srv.(SystemServiceServer).PhpFpm(ctx, req.(*PhpFpmServiceRequest)) } return interceptor(ctx, in, info, handler) } -var _NitroService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "nitrod.NitroService", - HandlerType: (*NitroServiceServer)(nil), +var _SystemService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "nitrod.SystemService", + HandlerType: (*SystemServiceServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "PhpFpmService", - Handler: _NitroService_PhpFpmService_Handler, - }, - { - MethodName: "NginxService", - Handler: _NitroService_NginxService_Handler, + MethodName: "Nginx", + Handler: _SystemService_Nginx_Handler, }, { - MethodName: "PhpIniSettings", - Handler: _NitroService_PhpIniSettings_Handler, + MethodName: "PhpFpm", + Handler: _SystemService_PhpFpm_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/internal/nitrod/nitrod.proto b/internal/nitrod/nitrod.proto index 049b825f..86bdfa17 100644 --- a/internal/nitrod/nitrod.proto +++ b/internal/nitrod/nitrod.proto @@ -5,11 +5,14 @@ package nitrod; option go_package = "internal/nitrod"; service NitroService { - rpc PhpFpmService(PhpFpmServiceRequest) returns (ServiceResponse) {} - rpc NginxService(NginxServiceRequest) returns (ServiceResponse) {} rpc PhpIniSettings(ChangePhpIniSettingRequest) returns (ServiceResponse) {} } +service SystemService { + rpc Nginx(NginxServiceRequest) returns (ServiceResponse) {} + rpc PhpFpm(PhpFpmServiceRequest) returns (ServiceResponse) {} +} + enum PhpIniSetting { MAX_EXECUTION_TIME = 0; UPLOAD_MAX_FILESIZE = 1; diff --git a/internal/nitrod/php_fpm.go b/internal/nitrod/php_fpm.go deleted file mode 100644 index f00adac2..00000000 --- a/internal/nitrod/php_fpm.go +++ /dev/null @@ -1,45 +0,0 @@ -package nitrod - -import ( - "context" - - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/craftcms/nitro/validate" -) - -func (s *Service) PhpFpmService(ctx context.Context, request *PhpFpmServiceRequest) (*ServiceResponse, error) { - // validate the request - if err := validate.PHPVersion(request.GetVersion()); err != nil { - s.logger.Println(err) - return nil, status.Errorf(codes.InvalidArgument, err.Error()) - } - - var action string - var message string - switch request.GetAction() { - case ServiceAction_START: - message = "started" - action = "start" - case ServiceAction_STOP: - message = "stopped" - action = "stop" - default: - message = "restarted" - action = "restart" - } - - // perform the action on the php-fpm service - if output, err := s.command.Run("service", []string{"php" + request.GetVersion() + "-fpm", action}); err != nil { - s.logger.Println(err) - s.logger.Println("output:", string(output)) - return nil, status.Errorf(codes.Unknown, string(output)) - } - - msg := "successfully " + message + " php-fpm " + request.GetVersion() - - s.logger.Println(msg) - - return &ServiceResponse{Message: msg}, nil -} diff --git a/internal/nitrod/service.go b/internal/nitrod/service.go index f7c916e3..16579ad6 100644 --- a/internal/nitrod/service.go +++ b/internal/nitrod/service.go @@ -7,13 +7,13 @@ import ( var Version string -type Service struct { +type NitroService struct { command Runner logger *log.Logger } -func New() *Service { - return &Service{ +func NewNitroService() *NitroService { + return &NitroService{ command: &ServiceRunner{}, logger: log.New(os.Stdout, "nitrod ", 0), } diff --git a/internal/nitrod/nginx_test.go b/internal/nitrod/system_service_nginx_test.go similarity index 95% rename from internal/nitrod/nginx_test.go rename to internal/nitrod/system_service_nginx_test.go index 8b3956aa..c501b113 100644 --- a/internal/nitrod/nginx_test.go +++ b/internal/nitrod/system_service_nginx_test.go @@ -44,11 +44,11 @@ func TestNitrodServer_NginxService(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { spy := &spyServiceRunner{} - s := &Service{ + s := &SystemService{ command: spy, logger: tt.fields.logger, } - got, err := s.NginxService(tt.args.ctx, tt.args.request) + got, err := s.Nginx(tt.args.ctx, tt.args.request) if (err != nil) != tt.wantErr { t.Errorf("NginxService() error = %v, wantErr %v", err, tt.wantErr) return diff --git a/internal/nitrod/php_fpm_test.go b/internal/nitrod/system_service_php_fpm_test.go similarity index 97% rename from internal/nitrod/php_fpm_test.go rename to internal/nitrod/system_service_php_fpm_test.go index e06bf0f9..9ceb0819 100644 --- a/internal/nitrod/php_fpm_test.go +++ b/internal/nitrod/system_service_php_fpm_test.go @@ -84,11 +84,11 @@ func TestNitrodServer_PhpFpmService(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { spy := &spyServiceRunner{} - s := &Service{ + s := &SystemService{ command: spy, logger: tt.fields.logger, } - got, err := s.PhpFpmService(tt.args.ctx, tt.args.request) + got, err := s.PhpFpm(tt.args.ctx, tt.args.request) if (err != nil) != tt.wantErr { t.Errorf("PhpFpmService() error = %v, wantErr %v", err, tt.wantErr) return