func()

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
}