예제 #1
0
        /// <summary>
        /// Make map of featureVariable which are associated with given feature experiment
        /// </summary>
        /// <param name="projectConfig">The project config</param>
        /// <param name="variableIdMap">Map containing variable ID as key and Object of featureVariable</param>
        /// <param name="experimentId">experimentId of featureExperiment</param>
        /// <param name="variation">variation</param>
        /// <returns>Dictionary | Dictionary of FeatureVariable key and value as FeatureVariable object</returns>
        private IDictionary <string, OptimizelyVariable> MergeFeatureVariables(
            ProjectConfig projectConfig,
            IDictionary <string, FeatureVariable> variableIdMap,
            string experimentId,
            Variation variation)
        {
            var featureId             = projectConfig.GetExperimentFeatureList(experimentId)?.FirstOrDefault();
            var featureIdVariablesMap = GetFeatureIdVariablesMap(projectConfig);
            var variablesMap          = new Dictionary <string, OptimizelyVariable>();

            if (featureId?.Any() ?? false)
            {
                variablesMap = featureIdVariablesMap[featureId]?.Select(f => new OptimizelyVariable(f.Id,
                                                                                                    f.Key,
                                                                                                    f.Type.ToString().ToLower(),
                                                                                                    f.DefaultValue)
                                                                        ).ToDictionary(k => k.Key, v => v);

                foreach (var featureVariableUsage in variation.FeatureVariableUsageInstances)
                {
                    var defaultVariable    = variableIdMap[featureVariableUsage.Id];
                    var optimizelyVariable = new OptimizelyVariable(featureVariableUsage.Id,
                                                                    defaultVariable.Key,
                                                                    defaultVariable.Type.ToString().ToLower(),
                                                                    variation.IsFeatureEnabled ? featureVariableUsage.Value : defaultVariable.DefaultValue);

                    variablesMap[defaultVariable.Key] = optimizelyVariable;
                }
            }

            return(variablesMap);
        }
예제 #2
0
        /// <summary>
        /// Gets Map of all experiments except rollouts
        /// </summary>
        /// <param name="projectConfig">The project config</param>
        /// <returns>Dictionary | Dictionary of experiment key and value as experiment object</returns>
        private IDictionary <string, OptimizelyExperiment> GetExperimentsMapById(ProjectConfig projectConfig)
        {
            var experimentsMap       = new Dictionary <string, OptimizelyExperiment>();
            var featureVariableIdMap = GetVariableIdMap(projectConfig);
            var experiments          = projectConfig?.Experiments?.ToList();

            experiments = projectConfig?.Groups?.SelectMany(g => g.Experiments).Concat(experiments)?.ToList();

            foreach (Experiment experiment in experiments)
            {
                var featureId            = projectConfig.GetExperimentFeatureList(experiment.Id)?.FirstOrDefault();
                var variationsMap        = GetVariationsMap(experiment.Variations, featureVariableIdMap, featureId);
                var experimentAudience   = GetExperimentAudiences(experiment, projectConfig);
                var optimizelyExperiment = new OptimizelyExperiment(experiment.Id,
                                                                    experiment.Key,
                                                                    experimentAudience,
                                                                    variationsMap);

                experimentsMap.Add(experiment.Id, optimizelyExperiment);
            }

            return(experimentsMap);
        }