func Less()

in pkg/storage/cassandra/store.go [1943:2010]


func Less(orderByList []*query.OrderBy, t1 *task.TaskInfo, t2 *task.TaskInfo) bool {
	// Keep comparing the two tasks by the field related with Order from the OrderbyList
	// until they are not equal on one fields
	for _, orderBy := range orderByList {
		desc := orderBy.GetOrder() == query.OrderBy_DESC
		property := orderBy.GetProperty().GetValue()
		if property == creationTimeField {
			time1, err1 := time.Parse(time.RFC3339, t1.GetRuntime().GetStartTime())
			time2, err2 := time.Parse(time.RFC3339, t2.GetRuntime().GetStartTime())
			if err1 != nil || err2 != nil {
				// if any StartTime of two tasks can't get parsed (or not exist)
				// task with a valid StartTime is less
				if err1 == nil {
					return !desc
				} else if err2 == nil {
					return desc
				}

				// both tasks have invalid StartTime, goto next loop
				continue
			}
			// return result if not equal, otherwise goto next loop
			if time1.Before(time2) {
				return !desc
			} else if time1.After(time2) {
				return desc
			}
		} else if property == hostField {
			if t1.GetRuntime().GetHost() < t2.GetRuntime().GetHost() {
				return !desc
			} else if t1.GetRuntime().GetHost() > t2.GetRuntime().GetHost() {
				return desc
			}
		} else if property == instanceIDField {
			if t1.GetInstanceId() < t2.GetInstanceId() {
				return !desc
			} else if t1.GetInstanceId() > t2.GetInstanceId() {
				return desc
			}
		} else if property == messageField {
			if t1.GetRuntime().GetMessage() < t2.GetRuntime().GetMessage() {
				return !desc
			} else if t1.GetRuntime().GetMessage() > t2.GetRuntime().GetMessage() {
				return desc
			}
		} else if property == nameField {
			if t1.GetConfig().GetName() < t2.GetConfig().GetName() {
				return !desc
			} else if t1.GetConfig().GetName() > t2.GetConfig().GetName() {
				return desc
			}
		} else if property == reasonField {
			if t1.GetRuntime().GetReason() < t2.GetRuntime().GetReason() {
				return !desc
			} else if t1.GetRuntime().GetReason() > t2.GetRuntime().GetReason() {
				return desc
			}
		} else if property == stateField {
			if t1.GetRuntime().GetState() < t2.GetRuntime().GetState() {
				return !desc
			} else if t1.GetRuntime().GetState() > t2.GetRuntime().GetState() {
				return desc
			}
		}
	}
	// Default order by InstanceId with increase order
	return t1.GetInstanceId() < t2.GetInstanceId()
}