github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/engine/put_delegate.go (about) 1 package engine 2 3 import ( 4 "io" 5 "time" 6 7 "code.cloudfoundry.org/clock" 8 "code.cloudfoundry.org/lager" 9 "github.com/pf-qiu/concourse/v6/atc" 10 "github.com/pf-qiu/concourse/v6/atc/db" 11 "github.com/pf-qiu/concourse/v6/atc/event" 12 "github.com/pf-qiu/concourse/v6/atc/exec" 13 "github.com/pf-qiu/concourse/v6/atc/policy" 14 "github.com/pf-qiu/concourse/v6/atc/runtime" 15 ) 16 17 func NewPutDelegate( 18 build db.Build, 19 planID atc.PlanID, 20 state exec.RunState, 21 clock clock.Clock, 22 policyChecker policy.Checker, 23 ) exec.PutDelegate { 24 return &putDelegate{ 25 BuildStepDelegate: NewBuildStepDelegate(build, planID, state, clock, policyChecker), 26 27 eventOrigin: event.Origin{ID: event.OriginID(planID)}, 28 build: build, 29 clock: clock, 30 } 31 } 32 33 type putDelegate struct { 34 exec.BuildStepDelegate 35 36 build db.Build 37 eventOrigin event.Origin 38 clock clock.Clock 39 } 40 41 func (d *putDelegate) Initializing(logger lager.Logger) { 42 err := d.build.SaveEvent(event.InitializePut{ 43 Origin: d.eventOrigin, 44 Time: time.Now().Unix(), 45 }) 46 if err != nil { 47 logger.Error("failed-to-save-initialize-put-event", err) 48 return 49 } 50 51 logger.Info("initializing") 52 } 53 54 func (d *putDelegate) Starting(logger lager.Logger) { 55 err := d.build.SaveEvent(event.StartPut{ 56 Time: time.Now().Unix(), 57 Origin: d.eventOrigin, 58 }) 59 if err != nil { 60 logger.Error("failed-to-save-start-put-event", err) 61 return 62 } 63 64 logger.Info("starting") 65 } 66 67 func (d *putDelegate) Finished(logger lager.Logger, exitStatus exec.ExitStatus, info runtime.VersionResult) { 68 // PR#4398: close to flush stdout and stderr 69 d.Stdout().(io.Closer).Close() 70 d.Stderr().(io.Closer).Close() 71 72 err := d.build.SaveEvent(event.FinishPut{ 73 Origin: d.eventOrigin, 74 Time: d.clock.Now().Unix(), 75 ExitStatus: int(exitStatus), 76 CreatedVersion: info.Version, 77 CreatedMetadata: info.Metadata, 78 }) 79 if err != nil { 80 logger.Error("failed-to-save-finish-put-event", err) 81 return 82 } 83 84 logger.Info("finished", lager.Data{"exit-status": exitStatus, "version-info": info}) 85 } 86 87 func (d *putDelegate) SaveOutput(log lager.Logger, plan atc.PutPlan, source atc.Source, resourceTypes atc.VersionedResourceTypes, info runtime.VersionResult) { 88 logger := log.WithData(lager.Data{ 89 "step": plan.Name, 90 "resource": plan.Resource, 91 "resource-type": plan.Type, 92 "version": info.Version, 93 }) 94 95 err := d.build.SaveOutput( 96 plan.Type, 97 source, 98 resourceTypes, 99 info.Version, 100 db.NewResourceConfigMetadataFields(info.Metadata), 101 plan.Name, 102 plan.Resource, 103 ) 104 if err != nil { 105 logger.Error("failed-to-save-output", err) 106 return 107 } 108 }