github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/engine/get_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 NewGetDelegate( 18 build db.Build, 19 planID atc.PlanID, 20 state exec.RunState, 21 clock clock.Clock, 22 policyChecker policy.Checker, 23 ) exec.GetDelegate { 24 return &getDelegate{ 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 getDelegate struct { 34 exec.BuildStepDelegate 35 36 build db.Build 37 eventOrigin event.Origin 38 clock clock.Clock 39 } 40 41 func (d *getDelegate) Initializing(logger lager.Logger) { 42 err := d.build.SaveEvent(event.InitializeGet{ 43 Origin: d.eventOrigin, 44 Time: time.Now().Unix(), 45 }) 46 if err != nil { 47 logger.Error("failed-to-save-initialize-get-event", err) 48 return 49 } 50 51 logger.Info("initializing") 52 } 53 54 func (d *getDelegate) Starting(logger lager.Logger) { 55 err := d.build.SaveEvent(event.StartGet{ 56 Time: time.Now().Unix(), 57 Origin: d.eventOrigin, 58 }) 59 if err != nil { 60 logger.Error("failed-to-save-start-get-event", err) 61 return 62 } 63 64 logger.Info("starting") 65 } 66 67 func (d *getDelegate) 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.FinishGet{ 73 Origin: d.eventOrigin, 74 Time: d.clock.Now().Unix(), 75 ExitStatus: int(exitStatus), 76 FetchedVersion: info.Version, 77 FetchedMetadata: info.Metadata, 78 }) 79 if err != nil { 80 logger.Error("failed-to-save-finish-get-event", err) 81 return 82 } 83 84 logger.Info("finished", lager.Data{"exit-status": exitStatus}) 85 } 86 87 func (d *getDelegate) UpdateVersion(log lager.Logger, plan atc.GetPlan, info runtime.VersionResult) { 88 logger := log.WithData(lager.Data{ 89 "pipeline-name": d.build.PipelineName(), 90 "pipeline-id": d.build.PipelineID()}, 91 ) 92 93 pipeline, found, err := d.build.Pipeline() 94 if err != nil { 95 logger.Error("failed-to-find-pipeline", err) 96 return 97 } 98 99 if !found { 100 logger.Debug("pipeline-not-found") 101 return 102 } 103 104 resource, found, err := pipeline.Resource(plan.Resource) 105 if err != nil { 106 logger.Error("failed-to-find-resource", err) 107 return 108 } 109 110 if !found { 111 logger.Debug("resource-not-found") 112 return 113 } 114 115 _, err = resource.UpdateMetadata( 116 info.Version, 117 db.NewResourceConfigMetadataFields(info.Metadata), 118 ) 119 if err != nil { 120 logger.Error("failed-to-save-resource-config-version-metadata", err) 121 return 122 } 123 }