示例#1
0
        internal override void Write(SplitView split)
        {
            try
            {
                using (var conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();

                    var cmd = new SqlCommand(CommandText, conn);

                    foreach (var parameter in Parameters)
                    {
                        if (CommandText.Contains(parameter.Key))
                        {
                            cmd.Parameters.AddWithValue(parameter.Key, ParameterRetriever.RetireveValue(split, parameter.Value));
                        }
                    }

                    cmd.ExecuteNonQuery();

                    conn.Close();
                }
            }
            catch (Exception ex)
            {
                if (TargetService.Config.Targets.ThrowExceptions)
                {
                    throw new Exception("Exception occurred in AbTestMaster when writing to database. Error Message: " + ex.Message);
                }
            }
        }
示例#2
0
        internal void WriteToFile(SplitView split)
        {
            var keyValuePairs = new Dictionary<string, string>
            {
                {Constants.SPLIT_GROUP, split.SplitGroup},
                {Constants.SPLIT_NAME, split.SplitViewName},
                {Constants.SPLIT_SEQUENCE, split.Sequence}
            };

            CheckForFile(Constants.SPLIT_VIEWS_FILE_PATH, new List<string> { Constants.DATE_TIME, Constants.SPLIT_GROUP, Constants.SPLIT_NAME, Constants.SPLIT_SEQUENCE });

            WriteToFile(keyValuePairs, Constants.SPLIT_VIEWS_FILE_PATH);
        }
示例#3
0
        internal void WriteToFile(SplitView split)
        {
            var keyValuePairs = new Dictionary<string, string>
            {
                {Constants.DATE_TIME, DateTime.UtcNow.ToString()},
                {Constants.SPLIT_GROUP, split.SplitGroup},
                {Constants.SPLIT_NAME, split.SplitViewName},
                {Constants.SPLIT_GOAL, split.Goal}
            };

            CheckForFile(Constants.SPLIT_VIEWS_FILE_PATH, new List<string> { Constants.DATE_TIME, Constants.SPLIT_GROUP, Constants.SPLIT_NAME, Constants.SPLIT_GOAL });

            WriteToFile(keyValuePairs, Constants.SPLIT_VIEWS_FILE_PATH);
        }
        public SplitView GetSplitView(SplitView splitView)
        {
            try
            {
                using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings[TargetService.Config.SplitViews.ConnectionStringName].ConnectionString))
                {
                    conn.Open();
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = @"SELECT SplitGroup, SplitGoal, Ratio FROM [dbo].[AbSplitView] WHERE SplitName = @SplitName";
                        cmd.Parameters.AddWithValue("@SplitName", splitView.SplitViewName);
                        using (var reader = cmd.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                if (!reader.IsDBNull(0))
                                {
                                    splitView.SplitGroup = reader.GetString(0);
                                }

                                if (!reader.IsDBNull(1))
                                {
                                    splitView.Goal = reader.GetString(1);
                                }

                                if (!reader.IsDBNull(2))
                                {
                                    splitView.Ratio = reader.GetDouble(2);
                                }
                            }
                        }
                    }

                    conn.Close();
                }
            }
            catch (Exception ex)
            {
                if (TargetService.Config.Targets.ThrowExceptions)
                {
                    throw new Exception("Exception occurred in AbTestMaster when writing to database. Error Message: " + ex.Message);
                }
            }
            return splitView;
        }
示例#5
0
        internal override void Write(SplitView split)
        {
            try
            {
                var logservice = new LogService();

                var values = Parameters.ToDictionary(parameter => parameter.Key, parameter => ParameterRetriever.RetireveValue(split, parameter.Value).ToString());

                logservice.WriteToFile(values, Path);
            }
            catch (Exception ex)
            {
                if (TargetService.Config.Targets.ThrowExceptions)
                {
                    throw new Exception("Exception occurred in AbTestMaster when writing to file. Error Message: " + ex.Message);
                }
            }
        }
 private void AddRemoveArea(ControllerContext controllerContext, SplitView selectedSplit)
 {
     if (String.IsNullOrEmpty(selectedSplit.Area))
     {
         if (controllerContext.RouteData.Values.ContainsKey(Constants.AREA))
         {
             controllerContext.RouteData.Values.Remove(Constants.AREA);
         }
     }
     else
     {
         if (controllerContext.RouteData.Values.ContainsKey(Constants.AREA))
         {
             controllerContext.RouteData.Values[Constants.AREA] = selectedSplit.Area;
         }
         else
         {
             controllerContext.RouteData.Values.Add(Constants.AREA, selectedSplit.Area);
         }
     }
 }
        internal static object RetireveValue(SplitView view, string parameterName)
        {
            object value;

            switch (parameterName)
            {
                case Constants.SPLIT_GROUP_VARIABLE:
                    value = view.SplitGroup;
                    break;
                case Constants.SPLIT_NAME_VARIABLE:
                    value = view.SplitViewName;
                    break;
                case Constants.SPLIT_GOAL_VARIABLE:
                    value = view.Goal;
                    break;
                default:
                    value = RetireveValue(parameterName);
                    break;
            }

            return value;
        }
示例#8
0
        internal static SplitView ReadFromCookie(string splitGroup)
        {
            SplitView split = null;

            HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(Constants.AB_TEST_MASTER_COOKIE + "_" + splitGroup);

            if (cookie != null)
            {
                split = new SplitView
                {
                    SplitGroup = cookie[Constants.SPLIT_GROUP],
                    SplitViewName = cookie[Constants.SPLIT_NAME],
                    Goal = cookie[Constants.SPLIT_GOAL] ?? cookie[Constants.SPLIT_SEQUENCE],
                    Action = cookie[Constants.ACTION],
                    Controller = cookie[Constants.CONTROLLER],
                    Area = cookie[Constants.AREA],
                    Namespace = cookie[Constants.NAMESPACES]
                };
            }

            return split;
        }
示例#9
0
        private static string FormatSplitViewData(SplitView splitView)
        {
            string output = string.Empty;

            if (splitView == null)
            {
                return output;
            }

            output = "(" + splitView.SplitViewName + "#" + splitView.SplitGroup + "#" + splitView.Goal + ")";

            return output;
        }
示例#10
0
 internal static void SaveToSession(SplitView selectedSplit)
 {
     SessionSplitViews.Add(selectedSplit);
 }
示例#11
0
 internal static void SaveToCookie(SplitView split)
 {
     var myCookie = new HttpCookie(Constants.AB_TEST_MASTER_COOKIE + "_" + split.SplitGroup);
     myCookie[Constants.SPLIT_GROUP] = split.SplitGroup;
     myCookie[Constants.SPLIT_NAME] = split.SplitViewName;
     myCookie[Constants.SPLIT_GOAL] = split.Goal;
     myCookie[Constants.ACTION] = split.Action;
     myCookie[Constants.CONTROLLER] = split.Controller;
     myCookie[Constants.AREA] = split.Area;
     myCookie[Constants.NAMESPACES] = split.Namespace;
     myCookie.Expires = DateTime.Now.AddYears(1);
     HttpContext.Current.Response.Cookies.Add(myCookie);
 }
示例#12
0
 public SplitViewAttribute(string splitName, string splitGroup, string sequence)
 {
     SplitView = new SplitView { SplitGroup = splitGroup, SplitViewName = splitName, Sequence = sequence };
 }
示例#13
0
 public SplitViewAttribute(string splitName, string splitGroup)
 {
     SplitView = new SplitView { SplitGroup = splitGroup, SplitViewName = splitName };
 }
        private void ReinstantiateController(ControllerContext controllerContext, SplitView splitView, SplitView selectedSplit)
        {
            var factory = ControllerBuilder.Current.GetControllerFactory();

            if (splitView.Controller != selectedSplit.Controller
                || splitView.Namespace != selectedSplit.Namespace)
            {
                controllerContext.Controller = (ControllerBase)factory.CreateController(controllerContext.RequestContext,
                    selectedSplit.Controller);
            }
        }
        private void AddRemoveNamespace(ControllerContext controllerContext, SplitView currentSplit, SplitView selectedSplit)
        {
            if (currentSplit.Namespace == selectedSplit.Namespace)
            {
                return;
            }

            if (controllerContext.RouteData.DataTokens.ContainsKey(Constants.NAMESPACES))
            {
                var namespaces = new string[1];
                namespaces[0] = selectedSplit.Namespace;
                controllerContext.RouteData.DataTokens[Constants.NAMESPACES] = namespaces;
            }
        }
示例#16
0
 internal abstract void Write(SplitView split);
示例#17
0
 public SplitViewAttribute(string splitName, string splitGroup, string goal, double ratio)
 {
     SplitView = new SplitView { SplitGroup = splitGroup, SplitViewName = splitName, Goal = goal, Ratio = ratio };
 }
示例#18
0
 public SplitViewAttribute(string splitName, string splitGroup, string goal)
 {
     SplitView = new SplitView { SplitGroup = splitGroup, SplitViewName = splitName, Goal = goal };
 }