private bool Validate(Variation variation) { var result = NotNull(variation); result = result && ValidateLong(variation.Id); result = result && ValidateString(variation.Name); result = result && ValidateDouble(variation.Weight); return(result); }
/// <summary> /// Allocate variation by checking UserStorageService, Campaign Traffic Allocation and compute UserHash to check variation allocation by bucketing. /// </summary> /// <param name="campaignKey"></param> /// <param name="userId"></param> /// <param name="apiName"></param> /// <param name="campaign"></param> /// <param name="customVariables"></param> /// <param name="variationTargetingVariables"></param> /// <returns> /// If Variation is allocated, returns UserAssignedInfo with valid details, else return Empty UserAssignedInfo. /// </returns> private UserAllocationInfo AllocateVariation(string campaignKey, string userId, BucketedCampaign campaign, Dictionary <string, dynamic> customVariables, Dictionary <string, dynamic> variationTargetingVariables, string apiName = null) { Variation TargettedVariation = this.FindTargetedVariation(apiName, campaign, campaignKey, userId, customVariables, variationTargetingVariables); if (TargettedVariation != null) { return(new UserAllocationInfo(TargettedVariation, campaign)); } UserStorageMap userStorageMap = this._userStorageService.GetUserMap(campaignKey, userId); BucketedCampaign selectedCampaign = this._campaignAllocator.Allocate(this._settings, userStorageMap, campaignKey, userId, apiName); if (userStorageMap != null && userStorageMap.VariationName != null) { Variation variation = this._variationAllocator.GetSavedVariation(campaign, userStorageMap.VariationName.ToString()); return(new UserAllocationInfo(variation, selectedCampaign)); } if (selectedCampaign != null) { Variation variation = this._variationAllocator.Allocate(userStorageMap, selectedCampaign, userId); if (variation != null) { if (campaign.Segments.Count > 0) { string segmentationType = Constants.SegmentationType.PRE_SEGMENTATION; if (customVariables == null) { LogInfoMessage.NoCustomVariables(typeof(IVWOClient).FullName, userId, campaignKey, apiName); customVariables = new Dictionary <string, dynamic>(); } if (variationTargetingVariables == null) { variationTargetingVariables = new Dictionary <string, dynamic>(); } if (!this._segmentEvaluator.evaluate(userId, campaignKey, segmentationType, campaign.Segments, customVariables)) { return(new UserAllocationInfo()); } } else { LogInfoMessage.SkippingPreSegmentation(typeof(IVWOClient).FullName, userId, campaignKey, apiName); } LogInfoMessage.VariationAllocated(file, userId, campaignKey, variation.Name); LogDebugMessage.GotVariationForUser(file, userId, campaignKey, variation.Name, nameof(AllocateVariation)); this._userStorageService.SetUserMap(userId, selectedCampaign.Key, variation.Name); return(new UserAllocationInfo(variation, selectedCampaign)); } } LogInfoMessage.NoVariationAllocated(file, userId, campaignKey); return(new UserAllocationInfo()); }
private Variation FindTargetedVariation(string apiName, BucketedCampaign campaign, string campaignKey, string userId, Dictionary <string, dynamic> customVariables, Dictionary <string, dynamic> variationTargetingVariables) { if (campaign.IsForcedVariationEnabled) { if (variationTargetingVariables == null) { variationTargetingVariables = new Dictionary <string, dynamic>(); variationTargetingVariables.Add("_vwoUserId", userId); } else { if (variationTargetingVariables.ContainsKey("_vwoUserId")) { variationTargetingVariables["_vwoUserId"] = userId; } else { variationTargetingVariables.Add("_vwoUserId", userId); } } List <Variation> whiteListedVariations = this.GetWhiteListedVariationsList(apiName, userId, campaign, campaignKey, customVariables, variationTargetingVariables); string status = Constants.WhitelistingStatus.FAILED; string variationString = " "; Variation variation = this._variationAllocator.TargettedVariation(userId, whiteListedVariations); if (variation != null) { status = Constants.WhitelistingStatus.PASSED; variationString = $"and variation: {variation.Name} is assigned"; } LogInfoMessage.WhitelistingStatus(typeof(IVWOClient).FullName, userId, campaignKey, apiName, variationString, status); return(variation); } LogInfoMessage.SkippingWhitelisting(typeof(IVWOClient).FullName, userId, campaignKey, apiName); return(null); }
private UserAllocationInfo GetControlVariation(BucketedCampaign campaign, Variation variation) { return(new UserAllocationInfo(variation, campaign)); }
internal int GetVariationId(Variation variation) { return(variation.Id); }
private string GetVariationName(Variation variation) { return(variation.Name); }