func()

in model/model_layer.go [26:75]


func (l *Layer) FindMatchExperimentGroup(experimentContext *ExperimentContext) *ExperimentGroup {
	// first find debug users
	for _, group := range l.ExperimentGroups {
		if group.MatchDebugUsers(experimentContext) {
			return group
		}
	}

	// find filter or crowdid experiment group
	for _, group := range l.ExperimentGroups {
		if group.CrowdTargetType == "" {
			if group.Filter != "" || group.CrowdId > 0 {
				if group.Match(experimentContext) {
					return group
				}
			}

		} else if group.CrowdTargetType == common.CrowdTargetType_Filter || group.CrowdTargetType == common.CrowdTargetType_CrowdId {
			if group.Match(experimentContext) {
				return group
			}
		}
	}

	// find random experiment group
	for _, group := range l.ExperimentGroups {
		if group.CrowdTargetType == common.CrowdTargetType_Random {
			hashKey := fmt.Sprintf("%s_EXPROOM%d_LAYER%d", experimentContext.Uid, l.ExpRoomId, l.LayerId)
			hashValue := hashValue(hashKey)
			//e.logInfo("match experiment hash key:%s, value:%d", hashKey, hashValue)
			hashValueStr := strconv.FormatUint(hashValue, 10)
			if group.Match(&ExperimentContext{Uid: hashValueStr}) {
				return group
			}
		}
	}

	for _, group := range l.ExperimentGroups {
		if group.CrowdTargetType == "" {
			if group.Filter == "" && group.CrowdId == 0 {
				return group
			}

		} else if group.CrowdTargetType == common.CrowdTargetType_ALL {
			return group
		}
	}

	return nil
}