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  }