public bool IsFeatureEnabled(string feature, User user) { UserAttributes userAtrributes = new UserAttributes(); foreach (KeyValuePair <string, object> keyValuePair in user.GetAttributes()) { userAtrributes.Add(keyValuePair.Key, keyValuePair.Value); } return(_optimizelyClient.IsFeatureEnabled(feature.ToLower(), user.Email, userAtrributes)); }
public void DispatchEvent(LogEvent actualLogEvent) { Visitor[] visitors = null; if (actualLogEvent.Params.ContainsKey("visitors")) { JArray jArray = (JArray)actualLogEvent.Params["visitors"]; visitors = jArray.ToObject <Visitor[]>(); } if (visitors == null) { return; } foreach (var visitor in visitors) { foreach (var snapshot in visitor.Snapshots) { var decisions = snapshot.Decisions ?? new Decision[1] { new Decision() }; foreach (var decision in decisions) { foreach (var @event in snapshot.Events) { var userAttributes = new UserAttributes(); foreach (var attribute in visitor.Attributes.Where(attr => !attr.Key.StartsWith(DatafileProjectConfig.RESERVED_ATTRIBUTE_PREFIX))) { userAttributes.Add(attribute.Key, attribute.Value); } ActualEvents.Add(new CanonicalEvent(decision.ExperimentId, decision.VariationId, @event.Key, visitor.VisitorId, userAttributes, @event.EventTags)); } } } } try { CountdownEvent?.Signal(); } catch (ObjectDisposedException) { Logger.Log(LogLevel.ERROR, "The CountdownEvent instance has already been disposed."); } catch (InvalidOperationException) { Logger.Log(LogLevel.ERROR, "The CountdownEvent instance has already been set."); } }