Example #1
0
        /// <summary>
        /// Track a activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        /// <param name="endSession">True if this tracking event should end the session.</param>
        public void Track(IMeasurementActivity activity, bool endSession = false)
        {
            if (activity is AutoTimedEventActivity)
            {
                ((AutoTimedEventActivity)activity).End();
            }

            OnTrack(this, activity);

            var entry = new MeasurementActivityEntry(activity)
            {
                CustomDimensions = customDimensions.ToArray(),
                CustomMetrics    = customMetrics.ToArray(),
                EndSession       = endSession
            };

            customDimensions.Clear();
            customMetrics.Clear();

            if (tracker == null)
            {
                queue.Enqueue(entry);
            }
            else
            {
                tracker.Track(entry);
            }
        }
        /// <summary>
        /// Turn an IMeasurementActivity into the key/value pairs necessary for building
        /// the URI to track with Measurement Protocol.
        /// </summary>
        /// <param name="activity">Activity to turn into key/value pairs.</param>
        /// <returns>Enumerable of key/value pairs representing the activity.</returns>
        internal IEnumerable<KeyValuePair<string, string>> GetActivityParameters(IMeasurementActivity activity)
        {
            if (activity is AppViewActivity)
                return GetParameters((AppViewActivity)activity);
            if (activity is ContentViewActivity)
                return GetParameters((ContentViewActivity)activity);
            if (activity is CampaignActivity)
                return GetParameters((CampaignActivity)activity);
            if (activity is ExceptionActivity)
                return GetParameters((ExceptionActivity)activity);
            if (activity is EventActivity)
                return GetParameters((EventActivity)activity);
            if (activity is TimedEventActivity)
                return GetParameters((TimedEventActivity)activity);
            if (activity is SocialActivity)
                return GetParameters((SocialActivity)activity);
            if (activity is TransactionActivity)
            {
                var transaction = (TransactionActivity) activity;
                lastTransaction = transaction;
                return GetParameters(transaction);
            }
            if (activity is TransactionItemActivity)
                return GetParameters((TransactionItemActivity)activity);

            Debug.Assert(false, "Unknown Activity type");
            return Enumerable.Empty<KeyValuePair<string, string>>();
        }
        /// <summary>
        /// Preserves the last transaction seen and carries it forward to subsequent
        /// transaction items.
        /// </summary>
        /// <param name="activity">Current activity being tracked.</param>
        private void CarryForwardLastTransaction(IMeasurementActivity activity)
        {
            if (activity is TransactionActivity)
                lastTransaction = (TransactionActivity) activity;

            if (activity is TransactionItemActivity)
                ((TransactionItemActivity) activity).Transaction = lastTransaction;
        }
        /// <summary>
        /// Track a activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        public void Track(IMeasurementActivity activity)
        {
            if (activity is AutoTimedEventActivity)
                ((AutoTimedEventActivity)activity).End();

            sessionManager.Hit();
            var trackingUri = tracker.CreateUri(activity);
            sender(trackingUri);
        }
        /// <summary>
        /// Carry forward the cd parameter value to future event & timing activities to know which page they occurred on.
        /// </summary>
        /// <param name="activity">Current activity being processed.</param>
        /// <param name="parameters">Current parameters for this request.</param>
        private void CarryForwardParameters(IMeasurementActivity activity, ICollection <KeyValuePair <string, string> > parameters)
        {
            if ((activity is EventActivity || activity is TimedEventActivity) && lastCdParameterValue != null)
            {
                parameters.Add(KeyValuePair.Create("cd", lastCdParameterValue));
            }

            if (parameters.Any(k => k.Key == "cd"))
            {
                lastCdParameterValue = parameters.First(p => p.Key == "cd").Value;
            }
        }
Example #6
0
        /// <summary>
        /// Preserves the last transaction seen and carries it forward to subsequent
        /// transaction items.
        /// </summary>
        /// <param name="activity">Current activity being tracked.</param>
        private void CarryForwardLastTransaction(IMeasurementActivity activity)
        {
            if (activity is TransactionActivity)
            {
                lastTransaction = (TransactionActivity)activity;
            }

            if (activity is TransactionItemActivity)
            {
                ((TransactionItemActivity)activity).Transaction = lastTransaction;
            }
        }
        /// <summary>
        /// Track a activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        /// <param name="endSession">True if this tracking event should end the session.</param>
        public void Track(IMeasurementActivity activity, bool endSession = false)
        {
            if (activity is AutoTimedEventActivity)
                ((AutoTimedEventActivity)activity).End();

            OnTrack(this, activity);

            var entry = new MeasurementActivityEntry(activity)
            {
                CustomDimensions = customDimensions.ToArray(),
                CustomMetrics = customMetrics.ToArray(),
                EndSession = endSession
            };

            customDimensions.Clear();
            customMetrics.Clear();

            if (tracker == null)
                queue.Enqueue(entry);
            else
                tracker.Track(entry);
        }
        /// <summary>
        /// Carry forward the cd parameter value to future event & timing activities to know which page they occurred on.
        /// </summary>
        /// <param name="activity">Current activity being processed.</param>
        /// <param name="parameters">Current parameters for this request.</param>
        private void CarryForwardParameters(IMeasurementActivity activity, ICollection<KeyValuePair<string, string>> parameters)
        {
            if ((activity is EventActivity || activity is TimedEventActivity) && lastCdParameterValue != null)
                parameters.Add(KeyValuePair.Create("cd", lastCdParameterValue));

            if (parameters.Any(k => k.Key == "cd"))
                lastCdParameterValue = parameters.First(p => p.Key == "cd").Value;
        }
Example #9
0
        /// <summary>
        /// Turn an IMeasurementActivity into the key/value pairs necessary for building
        /// the URI to track with Measurement Protocol.
        /// </summary>
        /// <param name="activity">Activity to turn into key/value pairs.</param>
        /// <returns>Enumerable of key/value pairs representing the activity.</returns>
        internal static IEnumerable <KeyValuePair <string, string> > GetActivityParameters(IMeasurementActivity activity)
        {
            if (activity is AppViewActivity)
            {
                return(GetParameters((AppViewActivity)activity));
            }
            if (activity is ContentViewActivity)
            {
                return(GetParameters((ContentViewActivity)activity));
            }
            if (activity is CampaignActivity)
            {
                return(GetParameters((CampaignActivity)activity));
            }
            if (activity is ExceptionActivity)
            {
                return(GetParameters((ExceptionActivity)activity));
            }
            if (activity is EventActivity)
            {
                return(GetParameters((EventActivity)activity));
            }
            if (activity is TimedEventActivity)
            {
                return(GetParameters((TimedEventActivity)activity));
            }
            if (activity is SocialActivity)
            {
                return(GetParameters((SocialActivity)activity));
            }
            if (activity is TransactionActivity)
            {
                return(GetParameters((TransactionActivity)activity));
            }
            if (activity is TransactionItemActivity)
            {
                return(GetParameters((TransactionItemActivity)activity));
            }

            Debug.Assert(false, "Unknown Activity type");
            return(Enumerable.Empty <KeyValuePair <string, string> >());
        }
 /// <summary>
 /// Create an Measurement Protocol URI from an activity and custom variables.
 /// </summary>
 /// <param name="activity">Activity to create a URI for.</param>
 /// <returns>URI that when requested will track this activity.</returns>
 public Uri CreateUri(IMeasurementActivity activity)
 {
     var parameters = BuildParameterList(activity);
     var uriBuilder = new UriBuilder(configuration.UseSsl ? secureTrackingEndpoint : trackingEndpoint) { Query = CreateQueryString(parameters) };
     return uriBuilder.Uri;
 }
 /// <summary>
 /// Build a list of the parameters required based on configuration, environment, activity, session, custom variables and state.
 /// </summary>
 /// <param name="activity">Activity to include in the parameter list.</param>
 /// <returns>Enumeration of key/value pairs containing the parameters necessary for this request.</returns>
 private IEnumerable<KeyValuePair<string, string>> BuildParameterList(IMeasurementActivity activity)
 {
     return GetParameters()
         .Concat(GetParameters(environment))
         .Concat(GetParameters(configuration))
         .Concat(GetParameters(sessionManager))
         .Concat(activityTracker.GetActivityParameters(activity))
         .ToList();
 }
 /// <summary>
 /// Create a new MeasurementActivityEntry given an activity to capture.
 /// </summary>
 /// <param name="activity">Measurement activity to capture.</param>
 public MeasurementActivityEntry(IMeasurementActivity activity)
 {
     Activity = activity;
 }
 /// <summary>
 /// Create a new MeasurementActivityEntry given an activity to capture.
 /// </summary>
 /// <param name="activity">Measurement activity to capture.</param>
 public MeasurementActivityEntry(IMeasurementActivity activity)
 {
     Activity = activity;
 }