func runAgent(logger logger.Logger) chan error { errCh := make(chan error, 1) go func() { defer logger.HandlePanic("Main") logger.Debug(mainLogTag, "Starting agent") fs := boshsys.NewOsFileSystem(logger) app := boshapp.New(logger, fs) err := app.Setup(os.Args) if err != nil { logger.Error(mainLogTag, "App setup %s", err.Error()) errCh <- err return } err = app.Run() if err != nil { logger.Error(mainLogTag, "App run %s", err.Error()) errCh <- err return } }() return errCh }
func fail(err error, ui biui.UI, logger boshlog.Logger, callback func()) { logger.Error(mainLogTag, err.Error()) ui.ErrorLinef("") ui.ErrorLinef(biuifmt.MultilineError(err)) if callback != nil { callback() } os.Exit(1) }
func mustLoadConfig(fs boshsys.FileSystem, logger boshlog.Logger) Config { flag.Parse() config, err := NewConfigFromPath(*configPathOpt, fs) if err != nil { logger.Error(mainLogTag, "Failed to load config %s", err) os.Exit(1) } return config }
func NewSignalableLogger(writerLogger logger.Logger, signalChannel chan os.Signal) (logger.Logger, chan bool) { doneChannel := make(chan bool, 1) go func() { for { <-signalChannel writerLogger.Error("Received SIGSEGV", "Dumping goroutines...") stackTrace := make([]byte, 10000) runtime.Stack(stackTrace, true) writerLogger.Error("Received SIGSEGV", string(stackTrace)) doneChannel <- true } }() return writerLogger, doneChannel }
func marshalResponse(response Response, maxResponseLength int, logger boshlog.Logger) ([]byte, error) { respJSON, err := json.Marshal(response) if err != nil { logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error()) return respJSON, bosherr.WrapError(err, "Marshalling JSON response") } if maxResponseLength == UnlimitedResponseLength { return respJSON, nil } if len(respJSON) > maxResponseLength { respJSON, err = json.Marshal(response.Shorten()) if err != nil { logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error()) return respJSON, bosherr.WrapError(err, "Marshalling JSON response") } } if len(respJSON) > maxResponseLength { respJSON, err = BuildErrorWithJSON(responseMaxLengthErrMsg, logger) if err != nil { logger.Error(mbusHandlerLogTag, "Failed to build 'max length exceeded' response: %s", err.Error()) return respJSON, bosherr.WrapError(err, "Building error") } } return respJSON, nil }
func Fail(err error, logger boshlog.Logger) { logger.Error("main", err.Error()) os.Exit(1) }