github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/engine/task_delegate.go (about) 1 package engine 2 3 import ( 4 "io" 5 6 "code.cloudfoundry.org/clock" 7 "code.cloudfoundry.org/lager" 8 "github.com/pf-qiu/concourse/v6/atc" 9 "github.com/pf-qiu/concourse/v6/atc/db" 10 "github.com/pf-qiu/concourse/v6/atc/event" 11 "github.com/pf-qiu/concourse/v6/atc/exec" 12 "github.com/pf-qiu/concourse/v6/atc/policy" 13 ) 14 15 func NewTaskDelegate( 16 build db.Build, 17 planID atc.PlanID, 18 state exec.RunState, 19 clock clock.Clock, 20 policyChecker policy.Checker, 21 ) exec.TaskDelegate { 22 return &taskDelegate{ 23 BuildStepDelegate: NewBuildStepDelegate(build, planID, state, clock, policyChecker), 24 25 eventOrigin: event.Origin{ID: event.OriginID(planID)}, 26 build: build, 27 clock: clock, 28 } 29 } 30 31 type taskDelegate struct { 32 exec.BuildStepDelegate 33 34 config atc.TaskConfig 35 build db.Build 36 eventOrigin event.Origin 37 clock clock.Clock 38 } 39 40 func (d *taskDelegate) SetTaskConfig(config atc.TaskConfig) { 41 d.config = config 42 } 43 44 func (d *taskDelegate) Initializing(logger lager.Logger) { 45 err := d.build.SaveEvent(event.InitializeTask{ 46 Origin: d.eventOrigin, 47 Time: d.clock.Now().Unix(), 48 TaskConfig: event.ShadowTaskConfig(d.config), 49 }) 50 if err != nil { 51 logger.Error("failed-to-save-initialize-task-event", err) 52 return 53 } 54 55 logger.Info("initializing") 56 } 57 58 func (d *taskDelegate) Starting(logger lager.Logger) { 59 err := d.build.SaveEvent(event.StartTask{ 60 Origin: d.eventOrigin, 61 Time: d.clock.Now().Unix(), 62 TaskConfig: event.ShadowTaskConfig(d.config), 63 }) 64 if err != nil { 65 logger.Error("failed-to-save-initialize-task-event", err) 66 return 67 } 68 69 logger.Debug("starting") 70 } 71 72 func (d *taskDelegate) Finished(logger lager.Logger, exitStatus exec.ExitStatus) { 73 // PR#4398: close to flush stdout and stderr 74 d.Stdout().(io.Closer).Close() 75 d.Stderr().(io.Closer).Close() 76 77 err := d.build.SaveEvent(event.FinishTask{ 78 ExitStatus: int(exitStatus), 79 Time: d.clock.Now().Unix(), 80 Origin: d.eventOrigin, 81 }) 82 if err != nil { 83 logger.Error("failed-to-save-finish-event", err) 84 return 85 } 86 87 logger.Info("finished", lager.Data{"exit-status": exitStatus}) 88 }