/// <summary> /// Performs logging of the hit. /// </summary> private void LogHit(string type, IABTestVariant variant, string conversionName, int[] variantData, int daysFromStart, DateTime logDate) { var conversionValueMultiplier = GetConversionValueMultiplier(variant, conversionName); var name = $"{type};{ABTest.ABTestName};{variant.Guid}"; var hits = variantData[daysFromStart % variantData.Length]; var data = new AnalyticsData(SiteContext.CurrentSiteID, conversionName, hits, hits * conversionValueMultiplier, CULTURE_CODE, uri: new Uri("http://domain.com")); mLogger.LogCustomAnalytics(name, data, logDate); }
/// <summary> /// Return a value to be used for multiplying conversion value. /// </summary> /// <remarks> /// Only the value for purchase is multiplied as page visit has a value that equals to 1. /// Current date time is used to add more variance to the conversion value, so that in the report when /// 'Average conversion value' is used we have different values per day. /// Variant B always gets bigger multiplier so that it wins in every statistic. /// </remarks> private decimal GetConversionValueMultiplier(IABTestVariant variant, string conversionName) { decimal conversionValueMultiplier = 1m; if (conversionName.Equals(ABTestConversionNames.PURCHASE, StringComparison.OrdinalIgnoreCase)) { if (variant.IsOriginal) { conversionValueMultiplier = DateTime.Now.Millisecond / 2; } else { conversionValueMultiplier = DateTime.Now.Millisecond * 2; } } return(conversionValueMultiplier); }
/// <summary> /// Performs logging of the hit. /// </summary> private void LogHit(string type, IABTestVariant variant, string conversionName, double[] variantData, int daysFromStart, DateTime logDate) { double conversionValueMultiplier = GetConversionValueMultiplier(variant, conversionName); var hits = Convert.ToInt32(variantData[daysFromStart % variantData.Length]); var logRecord = new LogRecord { CodeName = $"{type};{ABTest.ABTestName};{variant.Guid}", Hits = hits, Value = hits * conversionValueMultiplier, LogTime = logDate, ObjectName = conversionName, SiteName = SiteContext.CurrentSiteName, Culture = CULTURE_CODE }; HitLogProcessor.SaveLogToDatabase(logRecord); }
/// <summary> /// Performs logging of A/B conversions. /// </summary> private void LogConversions(IABTestVariant ABTestVariant, string conversionName, int daysFromStart, int[] firstConversions, int[] recurringConversions, int[] conversions, DateTime logDate) { LogHit(ABTestConstants.ABSESSIONCONVERSION_FIRST, ABTestVariant, conversionName, firstConversions, daysFromStart, logDate); LogHit(ABSESSIONCONVERSION_RECURRING, ABTestVariant, conversionName, recurringConversions, daysFromStart, logDate); LogHit(ABCONVERSION, ABTestVariant, conversionName, conversions, daysFromStart, logDate); }