public TaxonomyMetrics CalculateFactsForGroup(VisitGroupMeasurement <string> groupMeasurement, IInteractionAggregationContext context) { var calculatedInteraction = CalculateInteraction(context); return(new TaxonomyMetrics { EngagementValue = calculatedInteraction.EngagementValue, Visits = 1 }); }
public T CalculateFactsForGroup( VisitGroupMeasurement <U> groupMeasurement, IInteractionAggregationContext context) { if (groupMeasurement == null) { throw new ArgumentNullException(nameof(groupMeasurement)); } if (context == null) { throw new ArgumentNullException(nameof(context)); } var itemId = groupMeasurement.Occurrences.First().ItemId; var productId = groupMeasurement.Id.Id.Split('_').Last(); var visitPageEventList = context.Interaction.Events.OfType <PageViewEvent>().ToList(); var visitGoalList = context.Interaction.Events.OfType <Goal>().ToList(); var visitOrderOutcomeList = context.Interaction.Events.OfType <SubmittedOrderOutcome>().ToList(); var itemPageEventList = visitPageEventList.Where(pageEvent => pageEvent.ItemId.Equals(itemId)).ToList(); var itemGoalList = visitGoalList.Where(goal => (goal.DataKey?.Equals("productId")).GetValueOrDefault() && (goal.Data?.Equals(productId)).GetValueOrDefault()); var cartLineList = visitOrderOutcomeList .SelectMany(outcome => outcome.Order.CartLines .Select(cartLine => new { outcomeId = outcome.Id, cartLine.Product.ProductId, cartLine.Total, outcome.Timestamp })) .Where(cartLineSummary => cartLineSummary.ProductId.Equals(productId)) .ToList(); T metric = new T { Visits = 1, Value = context.Interaction.EngagementValue, ItemValue = itemGoalList.Sum(goal => goal.EngagementValue), MonetaryValue = visitOrderOutcomeList.Sum(outcome => outcome.MonetaryValue), ItemMonetaryValue = cartLineList.Sum(item => ConvertCurrency(item.Timestamp, item.Total.Amount, item.Total.CurrencyCode)), Conversions = visitGoalList.Count, ItemConversions = itemGoalList.Count(), Pageviews = visitPageEventList.Count, ItemPageviews = groupMeasurement.Occurrences.Count(), Bounces = visitPageEventList.Count == 1 ? 1 : 0, TimeOnPage = ConvertDurationToSeconds(itemPageEventList.Sum(pageEvent => pageEvent.Duration.TotalMilliseconds)), TimeOnSite = ConvertDurationToSeconds(visitPageEventList.Sum(pageEvent => pageEvent.Duration.TotalMilliseconds)), OutcomeOccurrences = visitOrderOutcomeList.Count, ItemOutcomeOccurrences = cartLineList.Select(line => line.outcomeId).Distinct().Count() }; return(metric); }
public OperatingSystemMetrics CalculateFactsForGroup(VisitGroupMeasurement <OperatingSystemData> groupMeasurement, IInteractionAggregationContext context) { return(new OperatingSystemMetrics { Visits = 1 // Depending on our Metric we could use the context to Calculate some other values // (example) instance.Value = context.Interaction.EngagementValue; // (example) instance.Count = groupMeasurement.Occurrences.Count<DownloadEvent>(); // (example) instance.Conversions = context.Interaction.Events.OfType<Goal>().ToList<Goal>(); }); }