| // Package debug implements a server that exports debugging information from |
| // various sources: log files, stats, etc. |
| package debug |
| |
| import ( |
| "fmt" |
| |
| "veyron.io/veyron/veyron2" |
| "veyron.io/veyron/veyron2/ipc" |
| "veyron.io/veyron/veyron2/security" |
| "veyron.io/veyron/veyron2/vlog" |
| ) |
| |
| // StartDebugServer starts a debug server. |
| func StartDebugServer(rt veyron2.Runtime, listenSpec *ipc.ListenSpec, logsDir string, auth security.Authorizer) (string, func(), error) { |
| if len(logsDir) == 0 { |
| return "", nil, fmt.Errorf("logs directory missing") |
| } |
| disp := NewDispatcher(logsDir, auth) |
| server, err := rt.NewServer() |
| if err != nil { |
| return "", nil, fmt.Errorf("failed to start debug server: %v", err) |
| } |
| endpoint, err := server.ListenX(listenSpec) |
| if err != nil { |
| return "", nil, fmt.Errorf("failed to listen on %s: %v", listenSpec, err) |
| } |
| if err := server.Serve("", disp); err != nil { |
| return "", nil, err |
| } |
| ep := endpoint.String() |
| vlog.VI(1).Infof("Debug server listening on %v", ep) |
| return ep, func() { server.Stop() }, nil |
| } |