projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '18349-fed-request-id'
[arvados.git]
/
lib
/
service
/
cmd.go
diff --git
a/lib/service/cmd.go
b/lib/service/cmd.go
index 1e7a9a36edd3a8142192d14bfcfbf12885e1e857..dbafc89fe4792d90b30e5fa70ec18b43a0c5107d 100644
(file)
--- a/
lib/service/cmd.go
+++ b/
lib/service/cmd.go
@@
-2,7
+2,7
@@
//
// SPDX-License-Identifier: Apache-2.0
//
// SPDX-License-Identifier: Apache-2.0
-//
p
ackage service provides a cmd.Handler that brings up a system service.
+//
P
ackage service provides a cmd.Handler that brings up a system service.
package service
import (
package service
import (
@@
-12,6
+12,7
@@
import (
"io"
"net"
"net/http"
"io"
"net"
"net/http"
+ _ "net/http/pprof"
"net/url"
"os"
"strings"
"net/url"
"os"
"strings"
@@
-70,16
+71,19
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
loader := config.NewLoader(stdin, log)
loader.SetupFlags(flags)
versionFlag := flags.Bool("version", false, "Write version information to stdout and exit 0")
loader := config.NewLoader(stdin, log)
loader.SetupFlags(flags)
versionFlag := flags.Bool("version", false, "Write version information to stdout and exit 0")
- err = flags.Parse(args)
- if err == flag.ErrHelp {
- err = nil
- return 0
- } else if err != nil {
- return 2
+ pprofAddr := flags.String("pprof", "", "Serve Go profile data at `[addr]:port`")
+ if ok, code := cmd.ParseFlags(flags, prog, args, "", stderr); !ok {
+ return code
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
}
} else if *versionFlag {
return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr)
}
+ if *pprofAddr != "" {
+ go func() {
+ log.Println(http.ListenAndServe(*pprofAddr, nil))
+ }()
+ }
+
if strings.HasSuffix(prog, "controller") {
// Some config-loader checks try to make API calls via
// controller. Those can't be expected to work if this
if strings.HasSuffix(prog, "controller") {
// Some config-loader checks try to make API calls via
// controller. Those can't be expected to work if this
@@
-101,7
+105,8
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
// logger with a new one according to the logging config.
log = ctxlog.New(stderr, cluster.SystemLogs.Format, cluster.SystemLogs.LogLevel)
logger := log.WithFields(logrus.Fields{
// logger with a new one according to the logging config.
log = ctxlog.New(stderr, cluster.SystemLogs.Format, cluster.SystemLogs.LogLevel)
logger := log.WithFields(logrus.Fields{
- "PID": os.Getpid(),
+ "PID": os.Getpid(),
+ "ClusterID": cluster.ClusterID,
})
ctx := ctxlog.Context(c.ctx, logger)
})
ctx := ctxlog.Context(c.ctx, logger)
@@
-118,13
+123,14
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
}
instrumented := httpserver.Instrument(reg, log,
}
instrumented := httpserver.Instrument(reg, log,
- httpserver.HandlerWith
Context(ctx
,
+ httpserver.HandlerWith
Deadline(cluster.API.RequestTimeout.Duration()
,
httpserver.AddRequestIDs(
httpserver.LogRequests(
httpserver.NewRequestLimiter(cluster.API.MaxConcurrentRequests, handler, reg)))))
srv := &httpserver.Server{
Server: http.Server{
httpserver.AddRequestIDs(
httpserver.LogRequests(
httpserver.NewRequestLimiter(cluster.API.MaxConcurrentRequests, handler, reg)))))
srv := &httpserver.Server{
Server: http.Server{
- Handler: instrumented.ServeAPI(cluster.ManagementToken, instrumented),
+ Handler: instrumented.ServeAPI(cluster.ManagementToken, instrumented),
+ BaseContext: func(net.Listener) context.Context { return ctx },
},
Addr: listenURL.Host,
}
},
Addr: listenURL.Host,
}
@@
-165,8
+171,6
@@
func (c *command) RunCommand(prog string, args []string, stdin io.Reader, stdout
return 0
}
return 0
}
-const rfc3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"
-
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.FieldLogger) (arvados.URL, error) {
svc, ok := svcs.Map()[prog]
if !ok {
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.FieldLogger) (arvados.URL, error) {
svc, ok := svcs.Map()[prog]
if !ok {
@@
-177,6
+181,9
@@
func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.F
} else if url, err := url.Parse(want); err != nil {
return arvados.URL{}, fmt.Errorf("$ARVADOS_SERVICE_INTERNAL_URL (%q): %s", want, err)
} else {
} else if url, err := url.Parse(want); err != nil {
return arvados.URL{}, fmt.Errorf("$ARVADOS_SERVICE_INTERNAL_URL (%q): %s", want, err)
} else {
+ if url.Path == "" {
+ url.Path = "/"
+ }
return arvados.URL(*url), nil
}
return arvados.URL(*url), nil
}