private static SAEventConversionFacts BuildVisitEventGroupFromEventsList(long sessionTimeoutThreshold, long endOfDelta, List <UETEvent> uetEvents, int maxEventsPerVisit, int maxVisitsPerIPTag) { var factObject = new SAEventConversionFacts { Visits = new List <Visit>() }; long prevDateTime = 0; string prevReferrer = string.Empty; foreach (var uetEvent in uetEvents) { if (!VisitizationUtils.AreEventGroupsInTheSameVisit(uetEvent, prevDateTime, prevReferrer, sessionTimeoutThreshold)) { // Not the same group, Create a new Visit and add this event to be the first one. if (factObject.Visits.Count == maxVisitsPerIPTag) { // Visits within the IPTag already reach the limit, we should break and stop adding new Visits. break; } // Create a new Visit and add it to the Visits list var visitId = VisitizationUtils.GenerateVisitId( uetEvent.ANID == null ? null : (Guid?)uetEvent.ANID.ToSystemGuid(), uetEvent.MUID == null ? null : (Guid?)uetEvent.MUID.ToSystemGuid(), uetEvent.EventDateTime, uetEvent.ReferrerURL); var newVisit = InitializeNewVisit(visitId, uetEvent.EventDateTime, sessionTimeoutThreshold, endOfDelta); newVisit.Events.Add(uetEvent); factObject.Visits.Add(newVisit); } else { // Add the event to the last Visit in the Visits list var lastVisit = factObject.Visits[factObject.Visits.Count - 1]; if (lastVisit.Events.Count < maxEventsPerVisit) { lastVisit.Events.Add(uetEvent); } } prevDateTime = uetEvent.EventDateTime; prevReferrer = uetEvent.ReferrerURL; } return(factObject); }
private static void FixCustomGoalValues(SAEventConversionFacts factObject) { var midGVTable = new Dictionary <Guid, double>(); foreach (var visit in factObject.Visits) { foreach (var evnt in visit.Events) { if (IsCustomGoalEvent(evnt) && evnt.UETMatchingGuid != null && evnt.GoalValue.HasValue) { double currentGoal; var mid = evnt.UETMatchingGuid.ToSystemGuid(); if (midGVTable.TryGetValue(mid, out currentGoal)) { if (currentGoal < evnt.GoalValue) { midGVTable[mid] = evnt.GoalValue.Value; } } else { midGVTable.Add(mid, evnt.GoalValue.Value); } } } } foreach (var visit in factObject.Visits) { foreach (var evnt in visit.Events) { if (!String.Equals(evnt.EventType, VisitizationUtils.EventTypeCustom, StringComparison.OrdinalIgnoreCase) && evnt.UETMatchingGuid != null) { double goal; if (midGVTable.TryGetValue(evnt.UETMatchingGuid.ToSystemGuid(), out goal)) { evnt.GoalValue = goal; } } } } }
public static string Serialize(SAEventConversionFacts fact) { if (fact == null) { return(""); } var sb = new StringBuilder(); sb.AppendFormat("ANID={0}, MUID={1}, IsNewMUID={2}, ", (fact.ANID == null ? string.Empty : fact.ANID.ToSystemGuid().ToString()), (fact.MUID == null ? string.Empty : fact.MUID.ToSystemGuid().ToString()), fact.IsNewMUID); foreach (Visit visit in fact.Visits) { sb.AppendFormat(",Visit({0})", Serialize(visit)); } return(sb.ToString()); }
public static SAEventConversionFacts CombineConversionFactsAndEscrow(SAEventConversionFacts facts, EscrowVisitRecord escrow, string sessionTimeoutThresholdString) { var sessionTimeoutThreshold = GetTickesFromMinutes(sessionTimeoutThresholdString); var currentVisit = facts.Visits[0]; var currentFirstEvent = currentVisit.Events[0]; var groupEvents = AreEventGroupsInTheSameVisit( currentFirstEvent, escrow.LastEventDateTime, escrow.LastEventReferrerURL, sessionTimeoutThreshold); if (groupEvents) { // Copy VisitId currentVisit.VisitId = escrow.VisitId == 0 ? (ulong)escrow.VisitIdint : escrow.VisitId; // Copy Statistics currentVisit.Statistic = escrow.Statistic; } return(facts); }