11/*
2- * Copyright 2019-2021, Optimizely
2+ * Copyright 2019-2021, 2023, Optimizely
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
66 * You may obtain a copy of the License at
77 *
8- * http ://www.apache.org/licenses/LICENSE-2.0
8+ * https ://www.apache.org/licenses/LICENSE-2.0
99 *
1010 * Unless required by applicable law or agreed to in writing, software
1111 * distributed under the License is distributed on an "AS IS" BASIS,
1515 */
1616
1717using System ;
18- using System . Collections ;
1918using System . Collections . Generic ;
2019using System . Linq ;
2120using System . Text ;
2221using Newtonsoft . Json ;
2322using Newtonsoft . Json . Linq ;
2423using OptimizelySDK . Entity ;
24+ using OptimizelySDK . Logger ;
2525
2626namespace OptimizelySDK . OptlyConfig
2727{
2828 public class OptimizelyConfigService
2929 {
30- private OptimizelyConfig OptimizelyConfig ;
30+ private OptimizelyConfig _optimizelyConfig ;
3131
32- private IDictionary < string , List < FeatureVariable > > featureIdVariablesMap ;
32+ private IDictionary < string , List < FeatureVariable > > _featureIdVariablesMap ;
3333
34- public OptimizelyConfigService ( ProjectConfig projectConfig )
34+ private readonly ILogger _logger ;
35+
36+ public OptimizelyConfigService ( ProjectConfig projectConfig , ILogger logger = null )
3537 {
3638 if ( projectConfig == null )
3739 {
3840 return ;
3941 }
4042
41- featureIdVariablesMap = GetFeatureVariablesByIdMap ( projectConfig ) ;
43+ _logger = logger ?? new DefaultLogger ( ) ;
44+
45+ _featureIdVariablesMap = GetFeatureVariablesByIdMap ( projectConfig ) ;
4246 var attributes = GetAttributes ( projectConfig ) ;
4347 var audiences = GetAudiences ( projectConfig ) ;
4448 var experimentsMapById = GetExperimentsMapById ( projectConfig ) ;
@@ -47,7 +51,7 @@ public OptimizelyConfigService(ProjectConfig projectConfig)
4751 var featureMap = GetFeaturesMap ( projectConfig , experimentsMapById ) ;
4852 var events = GetEvents ( projectConfig ) ;
4953
50- OptimizelyConfig = new OptimizelyConfig ( projectConfig . Revision ,
54+ _optimizelyConfig = new OptimizelyConfig ( projectConfig . Revision ,
5155 projectConfig . SDKKey ,
5256 projectConfig . EnvironmentKey ,
5357 attributes ,
@@ -118,6 +122,12 @@ IDictionary<string, OptimizelyExperiment> experimentsMapById
118122
119123 foreach ( var experiment in experimentsMapById . Values )
120124 {
125+ if ( experimentKeyMaps . ContainsKey ( experiment . Key ) )
126+ {
127+ _logger . Log ( LogLevel . WARN ,
128+ $ "Duplicate experiment keys found in datafile: { experiment . Key } ") ;
129+ }
130+
121131 experimentKeyMaps [ experiment . Key ] = experiment ;
122132 }
123133
@@ -210,7 +220,7 @@ bool isFeatureEnabled
210220
211221 if ( ! string . IsNullOrEmpty ( featureId ) )
212222 {
213- variablesMap = featureIdVariablesMap [ featureId ] ? .
223+ variablesMap = _featureIdVariablesMap [ featureId ] ? .
214224 Select ( f => new OptimizelyVariable ( f . Id ,
215225 f . Key ,
216226 f . Type . ToString ( ) . ToLower ( ) ,
@@ -451,7 +461,7 @@ private IDictionary<string, FeatureVariable> GetVariableIdMap(ProjectConfig proj
451461
452462 public OptimizelyConfig GetOptimizelyConfig ( )
453463 {
454- return OptimizelyConfig ;
464+ return _optimizelyConfig ;
455465 }
456466 }
457467}
0 commit comments