summaryrefslogtreecommitdiffstats
path: root/client/go/script-utils/configserver/runserver.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/go/script-utils/configserver/runserver.go')
-rw-r--r--client/go/script-utils/configserver/runserver.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/client/go/script-utils/configserver/runserver.go b/client/go/script-utils/configserver/runserver.go
new file mode 100644
index 00000000000..bf498941128
--- /dev/null
+++ b/client/go/script-utils/configserver/runserver.go
@@ -0,0 +1,60 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Author: arnej
+
+package configserver
+
+import (
+ "fmt"
+
+ "github.com/vespa-engine/vespa/client/go/defaults"
+ "github.com/vespa-engine/vespa/client/go/trace"
+ "github.com/vespa-engine/vespa/client/go/util"
+)
+
+const (
+ PROG_NAME = "vespa-runserver"
+)
+
+type RunServer struct {
+ ServiceName string
+ Args []string
+}
+
+func (rs *RunServer) PidFile() string {
+ varRunDir := defaults.UnderVespaHome("var/run")
+ return fmt.Sprintf("%s/%s.pid", varRunDir, rs.ServiceName)
+}
+
+func (rs *RunServer) ProgPath() string {
+ p := fmt.Sprintf("%s/bin64/%s", defaults.VespaHome(), PROG_NAME)
+ if util.IsExecutableFile(p) {
+ return p
+ }
+ p = fmt.Sprintf("%s/bin/%s", defaults.VespaHome(), PROG_NAME)
+ if util.IsExecutableFile(p) {
+ return p
+ }
+ panic(fmt.Errorf("not an executable file: %s", p))
+}
+
+func (rs *RunServer) WouldRun() bool {
+ backticks := util.BackTicksForwardStderr
+ out, err := backticks.Run(rs.ProgPath(), "-s", rs.ServiceName, "-p", rs.PidFile(), "-W")
+ trace.Trace("output from -W:", out, "error:", err)
+ return err == nil
+}
+
+func (rs *RunServer) Exec(prog string) {
+ argv := []string{
+ PROG_NAME,
+ "-s", rs.ServiceName,
+ "-p", rs.PidFile(),
+ "--",
+ prog,
+ }
+ for _, arg := range rs.Args {
+ argv = append(argv, arg)
+ }
+ err := util.Execvp(rs.ProgPath(), argv)
+ util.JustExitWith(err)
+}