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  }