Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
yasirfolio3 committed Mar 25, 2020
1 parent 931ab96 commit c182a86
Showing 1 changed file with 35 additions and 30 deletions.
65 changes: 35 additions & 30 deletions pkg/decision/rollout_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,38 +61,43 @@ func (r RolloutService) GetDecision(decisionContext FeatureDecisionContext, user
return featureDecision, nil
}

// For now, Rollouts is just a single experiment layer
experiment := rollout.Experiments[0]
experimentDecisionContext := ExperimentDecisionContext{
Experiment: &experiment,
ProjectConfig: decisionContext.ProjectConfig,
}

// if user fails rollout targeting rule we return out of it
if experiment.AudienceConditionTree != nil {
condTreeParams := entities.NewTreeParameters(&userContext, decisionContext.ProjectConfig.GetAudienceMap())
evalResult, _ := r.audienceTreeEvaluator.Evaluate(experiment.AudienceConditionTree, condTreeParams)
if !evalResult {
featureDecision.Reason = reasons.FailedRolloutTargeting
rsLogger.Debug(fmt.Sprintf(`User "%s" failed targeting for feature rollout with key "%s".`, userContext.ID, feature.Key))
return featureDecision, nil
index := 0
for index < numberOfExperiments {
experiment := rollout.Experiments[index]
experimentDecisionContext := ExperimentDecisionContext{
Experiment: &experiment,
ProjectConfig: decisionContext.ProjectConfig,
}
if experiment.AudienceConditionTree != nil {
condTreeParams := entities.NewTreeParameters(&userContext, decisionContext.ProjectConfig.GetAudienceMap())
evalResult, _ := r.audienceTreeEvaluator.Evaluate(experiment.AudienceConditionTree, condTreeParams)
if !evalResult { // Evaluate this user for the next rule
featureDecision.Reason = reasons.FailedRolloutTargeting
rsLogger.Debug(fmt.Sprintf(`User "%s" failed targeting for feature rollout with key "%s".`, userContext.ID, feature.Key))
index++
continue
}
}
decision, _ := r.experimentBucketerService.GetDecision(experimentDecisionContext, userContext)
if decision.Variation == nil && index < numberOfExperiments-1 {
// Evaluate fall back rule / last rule now
index = numberOfExperiments - 1
continue
}
// translate the experiment reason into a more rollouts-appropriate reason
switch decision.Reason {
case reasons.NotBucketedIntoVariation:
featureDecision.Decision = Decision{Reason: reasons.FailedRolloutBucketing}
case reasons.BucketedIntoVariation:
featureDecision.Decision = Decision{Reason: reasons.BucketedIntoRollout}
default:
featureDecision.Decision = decision.Decision
}
}

decision, _ := r.experimentBucketerService.GetDecision(experimentDecisionContext, userContext)
// translate the experiment reason into a more rollouts-appropriate reason
switch decision.Reason {
case reasons.NotBucketedIntoVariation:
featureDecision.Decision = Decision{Reason: reasons.FailedRolloutBucketing}
case reasons.BucketedIntoVariation:
featureDecision.Decision = Decision{Reason: reasons.BucketedIntoRollout}
default:
featureDecision.Decision = decision.Decision
featureDecision.Experiment = experiment
featureDecision.Variation = decision.Variation
rsLogger.Debug(fmt.Sprintf(`Decision made for user "%s" for feature rollout with key "%s": %s.`, userContext.ID, feature.Key, featureDecision.Reason))
break
}

featureDecision.Experiment = experiment
featureDecision.Variation = decision.Variation
rsLogger.Debug(fmt.Sprintf(`Decision made for user "%s" for feature rollout with key "%s": %s.`, userContext.ID, feature.Key, featureDecision.Reason))

return featureDecision, nil
}

0 comments on commit c182a86

Please sign in to comment.