summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/rr/cmd/stop.go52
-rw-r--r--cmd/rr/http/reset.go2
-rw-r--r--service/rpc/service.go7
-rw-r--r--service/rpc/system.go18
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
+}