public static string Serialize(EscrowVisitRecord escrowRow) { if (escrowRow == null) { return(string.Empty); } var sb = new StringBuilder(); sb.AppendFormat("VisitId={0}, LastEventDateTime={1}, LastEventIsNewMUID={2}, " + "LastEventReferrerURL={3}, IsJoined={4}, VisitStatistics={5}", escrowRow.VisitId, escrowRow.LastEventDateTime, escrowRow.LastEventIsNewMUID, escrowRow.LastEventReferrerURL, escrowRow.IsJoined, Serialize(escrowRow.Statistic)); return(sb.ToString()); }
public IEnumerable <SerializeType> getData(IEnumerable <SerializeType> data) { var sessionTimeoutThreshold = VisitizationUtils.GetTickesFromMinutes("30"); // Current input value is 30 minutes var endOfDelta = DateTime.Parse(@"2016-09-02 07:00:00").Ticks; var maxVisitDuration = VisitizationUtils.GetTicksFromHours("24"); // Current input value is 24 hours. List <SerializeType> res = new List <SerializeType>(); foreach (var line in data) { var input = line.DeserializeObject <VisitsWithConversion>(); var output = new NewEscrowCandidate(); var fact = input.SAEventConversionFactsRow; var maxEventDateTime = fact.Visits.Max(visit => visit.Events[visit.Events.Count - 1].EventDateTime); var lastVisit = fact.Visits.First(visit => visit.Events[visit.Events.Count - 1].EventDateTime == maxEventDateTime); if (lastVisit.Events.Count > 0) { var lastVisitStartDateTime = lastVisit.Statistic != null ? lastVisit.Statistic.VisitStartDateTime : lastVisit.Events[0].EventDateTime; var lastVisitDuration = endOfDelta - lastVisitStartDateTime; // Check whether the visit duration exceeds the maximum allowed duration if (lastVisitDuration <= maxVisitDuration) { var lastEvent = lastVisit.Events[lastVisit.Events.Count - 1]; // Check if the last event is close enough to the end of the current delta if (endOfDelta - lastEvent.EventDateTime <= sessionTimeoutThreshold) { // Add this row to the escrow file output.UETUserId = (Guid)input.UETUserId; output.UAIPId = input.UAIPId; output.AnalyticsGuid = input.AnalyticsGuid; output.TagId = input.TagId; output.TagName = input.TagName; var escrowFact = new EscrowVisitRecord(); escrowFact.LastEventDateTime = lastEvent.EventDateTime; escrowFact.LastEventIsNewMUID = lastEvent.IsNewMUID; escrowFact.LastEventReferrerURL = lastEvent.ReferrerURL; escrowFact.Statistic = lastVisit.Statistic; escrowFact.VisitId = lastVisit.VisitId; escrowFact.HasConversions = lastVisit.Conversions != null && lastVisit.Conversions.Count > 0; output.EscrowRow = escrowFact; res.Add(output.SerializeObject()); } } } } return(res); }
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); }