github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/exec/log_error_step.go (about) 1 package exec 2 3 import ( 4 "context" 5 6 "code.cloudfoundry.org/lager" 7 "code.cloudfoundry.org/lager/lagerctx" 8 ) 9 10 const AbortedLogMessage = "interrupted" 11 const TimeoutLogMessage = "timeout exceeded" 12 13 type LogErrorStep struct { 14 Step 15 16 delegateFactory BuildStepDelegateFactory 17 } 18 19 func LogError(step Step, delegateFactory BuildStepDelegateFactory) Step { 20 return LogErrorStep{ 21 Step: step, 22 23 delegateFactory: delegateFactory, 24 } 25 } 26 27 func (step LogErrorStep) Run(ctx context.Context, state RunState) (bool, error) { 28 logger := lagerctx.FromContext(ctx) 29 30 runOk, runErr := step.Step.Run(ctx, state) 31 32 var message string 33 switch runErr { 34 case nil: 35 return runOk, nil 36 case context.Canceled: 37 message = AbortedLogMessage 38 case context.DeadlineExceeded: 39 message = TimeoutLogMessage 40 default: 41 message = runErr.Error() 42 } 43 44 logger.Info("errored", lager.Data{"error": runErr.Error()}) 45 46 delegate := step.delegateFactory.BuildStepDelegate(state) 47 delegate.Errored(logger, message) 48 49 return runOk, runErr 50 }