in pkg/runner/job_status.go [32:77]
func (jr *JobRunner) buildTargetStatuses(coordinates job.TestStepCoordinates, targetEvents []testevent.Event) ([]job.TargetStatus, error) {
var targetStatuses []job.TargetStatus
for _, testEvent := range targetEvents {
// Update the TargetStatus object associated to the Target. If there is no TargetStatus associated yet, append it
var targetStatus *job.TargetStatus
for index, candidateStatus := range targetStatuses {
if candidateStatus.Target.ID == testEvent.Data.Target.ID {
targetStatus = &targetStatuses[index]
break
}
}
if targetStatus == nil {
// There is no TargetStatus associated with this Target, create one
targetStatuses = append(targetStatuses, job.TargetStatus{TestStepCoordinates: coordinates, Target: testEvent.Data.Target})
targetStatus = &targetStatuses[len(targetStatuses)-1]
}
// append non-routing events
if _, isRoutingEvent := targetRoutingEvents[testEvent.Data.EventName]; !isRoutingEvent {
targetStatus.Events = append(targetStatus.Events, testEvent)
}
evName := testEvent.Data.EventName
if evName == target.EventTargetIn {
targetStatus.InTime = testEvent.EmitTime
} else if evName == target.EventTargetOut {
targetStatus.OutTime = testEvent.EmitTime
} else if evName == target.EventTargetErr {
targetStatus.OutTime = testEvent.EmitTime
errorPayload := target.ErrPayload{}
jsonPayload, err := testEvent.Data.Payload.MarshalJSON()
if err != nil {
targetStatus.Error = fmt.Sprintf("could not marshal payload error: %v", err)
} else {
if err := json.Unmarshal(jsonPayload, &errorPayload); err != nil {
targetStatus.Error = fmt.Sprintf("could not unmarshal payload error: %v", err)
} else {
targetStatus.Error = errorPayload.Error
}
}
}
}
return targetStatuses, nil
}