diff options
-rw-r--r-- | cmd/rr/cmd/stop.go | 52 | ||||
-rw-r--r-- | cmd/rr/http/reset.go | 2 | ||||
-rw-r--r-- | service/rpc/service.go | 7 | ||||
-rw-r--r-- | service/rpc/system.go | 18 |
4 files changed, 77 insertions, 2 deletions
diff --git a/cmd/rr/cmd/stop.go b/cmd/rr/cmd/stop.go new file mode 100644 index 00000000..8beee73e --- /dev/null +++ b/cmd/rr/cmd/stop.go @@ -0,0 +1,52 @@ +// Copyright (c) 2018 SpiralScout +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package cmd + +import ( + "github.com/spf13/cobra" + "github.com/spiral/roadrunner/cmd/util" +) + +func init() { + CLI.AddCommand(&cobra.Command{ + Use: "stop", + Short: "Stop RoadRunner server", + RunE: stopHandler, + }) +} + +func stopHandler(cmd *cobra.Command, args []string) error { + client, err := util.RPCClient(Container) + if err != nil { + return err + } + defer client.Close() + + util.Printf("<green>Stopping RoadRunner</reset>: ") + + var r string + if err := client.Call("system.Stop", true, &r); err != nil { + return err + } + + util.Printf("<green+hb>done</reset>\n") + return nil +} diff --git a/cmd/rr/http/reset.go b/cmd/rr/http/reset.go index 42fd966d..3008848a 100644 --- a/cmd/rr/http/reset.go +++ b/cmd/rr/http/reset.go @@ -41,7 +41,7 @@ func reloadHandler(cmd *cobra.Command, args []string) error { } defer client.Close() - util.Printf("<green>restarting http worker pool</reset>: ") + util.Printf("<green>Restarting http worker pool</reset>: ") var r string if err := client.Call("http.Reset", true, &r); err != nil { diff --git a/service/rpc/service.go b/service/rpc/service.go index 0b957976..eba74c2d 100644 --- a/service/rpc/service.go +++ b/service/rpc/service.go @@ -3,6 +3,7 @@ package rpc import ( "errors" "github.com/spiral/goridge" + "github.com/spiral/roadrunner/service" "github.com/spiral/roadrunner/service/env" "net/rpc" "sync" @@ -21,7 +22,7 @@ type Service struct { } // Init rpc service. Must return true if service is enabled. -func (s *Service) Init(cfg *Config, env env.Environment) (bool, error) { +func (s *Service) Init(cfg *Config, c service.Container, env env.Environment) (bool, error) { if !cfg.Enable { return false, nil } @@ -33,6 +34,10 @@ func (s *Service) Init(cfg *Config, env env.Environment) (bool, error) { env.SetEnv("RR_RPC", cfg.Listen) } + if err := s.Register("system", &systemService{c}); err != nil { + return false, err + } + return true, nil } diff --git a/service/rpc/system.go b/service/rpc/system.go new file mode 100644 index 00000000..778250ad --- /dev/null +++ b/service/rpc/system.go @@ -0,0 +1,18 @@ +package rpc + +import "github.com/spiral/roadrunner/service" + +// systemService service controls roadrunner server. +type systemService struct { + c service.Container +} + +// Stop the underlying c. +func (s *systemService) Stop(stop bool, r *string) error { + if stop { + s.c.Stop() + } + *r = "OK" + + return nil +} |