// attemptMap turns a single attempt into the map returned by // GetChildWorkUnits(). func attemptMap(attempt coordinate.Attempt) (map[string]interface{}, error) { // First try to swap out attempt for its work unit's actual // active attempt. workUnit := attempt.WorkUnit() activeAttempt, err := workUnit.ActiveAttempt() if err != nil { return nil, err } if activeAttempt != nil { attempt = activeAttempt } // Collect extra data we need and build the result data, err := attempt.Data() if err != nil { return nil, err } expires, err := attempt.ExpirationTime() if err != nil { return nil, err } result := map[string]interface{}{ "work_spec_name": workUnit.WorkSpec().Name(), "work_unit_key": []byte(workUnit.Name()), "work_unit_data": data, "worker_id": attempt.Worker().Name(), "expires": expires.Unix(), } return result, nil }
func (api *restAPI) attemptURLBuilder(namespace coordinate.Namespace, attempt coordinate.Attempt, startTime time.Time, err error) *urlBuilder { unit := attempt.WorkUnit() spec := unit.WorkSpec() worker := attempt.Worker() if err == nil { return buildURLs(api.Router, "namespace", namespace.Name(), "spec", spec.Name(), "unit", unit.Name(), "worker", worker.Name(), "start", startTime.Format(time.RFC3339), ) } return &urlBuilder{Error: err} }
// AttemptMatches checks that two attempts are attempting the same thing. func AttemptMatches(t *testing.T, expected, actual coordinate.Attempt) bool { return (assert.Equal(t, expected.Worker().Name(), actual.Worker().Name()) && assert.Equal(t, expected.WorkUnit().Name(), actual.WorkUnit().Name()) && assert.Equal(t, expected.WorkUnit().WorkSpec().Name(), actual.WorkUnit().WorkSpec().Name())) }