Merge pull request #3124 from hashicorp/log-signal-events

agent: log events and exit code to the log file
pull/2148/merge
James Phillips 8 years ago committed by GitHub
commit 4a6b7f6c61

@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"io"
"log"
"net"
"os"
"os/signal"
@ -45,6 +46,7 @@ type Command struct {
args []string
logFilter *logutils.LevelFilter
logOutput io.Writer
logger *log.Logger
}
// readConfig is responsible for setup of our configuration using
@ -664,6 +666,14 @@ func (cmd *Command) registerWatches(config *Config) error {
}
func (cmd *Command) Run(args []string) int {
code := cmd.run(args)
if cmd.logger != nil {
cmd.logger.Println("[INFO] Exit code: ", code)
}
return code
}
func (cmd *Command) run(args []string) int {
cmd.UI = &cli.PrefixedUi{
OutputPrefix: "==> ",
InfoPrefix: " ",
@ -690,6 +700,7 @@ func (cmd *Command) Run(args []string) int {
}
cmd.logFilter = logFilter
cmd.logOutput = logOutput
cmd.logger = log.New(logOutput, "", log.LstdFlags)
if err := startupTelemetry(config); err != nil {
cmd.UI.Error(err.Error())
@ -769,7 +780,7 @@ func (cmd *Command) Run(args []string) int {
case <-cmd.ShutdownCh:
sig = os.Interrupt
case err := <-agent.RetryJoinCh():
cmd.UI.Error(err.Error())
cmd.logger.Println("[ERR] Retry join failed: ", err)
return 1
case <-agent.ShutdownCh():
// Agent is already down!
@ -781,14 +792,14 @@ func (cmd *Command) Run(args []string) int {
continue
case syscall.SIGHUP:
cmd.UI.Output(fmt.Sprintf("Caught signal: %v", sig))
cmd.logger.Println("[INFO] Caught signal: ", sig)
conf, err := cmd.handleReload(agent, config)
if conf != nil {
config = conf
}
if err != nil {
cmd.UI.Error(err.Error())
cmd.logger.Println("[ERR] Reload config failed: ", err)
}
// Send result back if reload was called via HTTP
if reloadErrCh != nil {
@ -796,19 +807,19 @@ func (cmd *Command) Run(args []string) int {
}
default:
cmd.UI.Output(fmt.Sprintf("Caught signal: %v", sig))
cmd.logger.Println("[INFO] Caught signal: ", sig)
graceful := (sig == os.Interrupt && !(*config.SkipLeaveOnInt)) || (sig == syscall.SIGTERM && (*config.LeaveOnTerm))
if !graceful {
cmd.UI.Output("Graceful shutdown disabled. Exiting")
cmd.logger.Println("[INFO] Graceful shutdown disabled. Exiting")
return 1
}
cmd.UI.Output("Gracefully shutting down agent...")
cmd.logger.Println("[INFO] Gracefully shutting down agent...")
gracefulCh := make(chan struct{})
go func() {
if err := agent.Leave(); err != nil {
cmd.UI.Error(fmt.Sprintf("Error on leave: %s", err))
cmd.logger.Println("[ERR] Error on leave:", err)
return
}
close(gracefulCh)
@ -817,13 +828,13 @@ func (cmd *Command) Run(args []string) int {
gracefulTimeout := 15 * time.Second
select {
case <-signalCh:
cmd.UI.Output(fmt.Sprintf("Caught second signal: %v. Exiting", sig))
cmd.logger.Printf("[INFO] Caught second signal %v. Exiting\n", sig)
return 1
case <-time.After(gracefulTimeout):
cmd.UI.Output("Timeout on graceful leave. Exiting")
cmd.logger.Println("[INFO] Timeout on graceful leave. Exiting")
return 1
case <-gracefulCh:
cmd.UI.Output("Graceful exit completed")
cmd.logger.Println("[INFO] Graceful exit completed")
return 0
}
}
@ -832,7 +843,7 @@ func (cmd *Command) Run(args []string) int {
// handleReload is invoked when we should reload our configs, e.g. SIGHUP
func (cmd *Command) handleReload(agent *Agent, cfg *Config) (*Config, error) {
cmd.UI.Output("Reloading configuration...")
cmd.logger.Println("[INFO] Reloading configuration...")
var errs error
newCfg := cmd.readConfig()
if newCfg == nil {

Loading…
Cancel
Save