Пример #1
0
        /// <summary>
        /// Turn an IUrchinActivity into the key/value pairs necessary for building
        /// the URI to track with Urchin.
        /// </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> > GetParameters(IUrchinActivity activity)
        {
            if (activity is CampaignActivity)
            {
                return(GetParameters((CampaignActivity)activity));
            }
            if (activity is EventActivity)
            {
                return(GetParameters((EventActivity)activity));
            }
            if (activity is PageViewActivity)
            {
                return(GetParameters((PageViewActivity)activity));
            }
            if (activity is SocialActivity)
            {
                return(GetParameters((SocialActivity)activity));
            }
            if (activity is TimedEventActivity)
            {
                return(GetParameters((TimedEventActivity)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> >());
        }
Пример #2
0
        /// <summary>
        /// Create an Urchin style URI from an activity and custom variables.
        /// </summary>
        /// <param name="activity">Activity to create a URI for.</param>
        /// <param name="customVariables">Custom variables to include in the URI.</param>
        /// <returns>Uri that when requested will track this activity.</returns>
        public Uri CreateUri(IUrchinActivity activity, ScopedCustomVariableSlots[] customVariables)
        {
            var parameters = BuildParameterList(activity, customVariables);

            CarryForwardLastPageParameter(activity, parameters);

            var uriBuilder = new UriBuilder(configuration.UseSsl ? secureTrackingEndpoint : trackingEndpoint) { Query = CreateQueryString(parameters) };
            return uriBuilder.Uri;
        }
Пример #3
0
        /// <summary>
        /// Carry forward the utmp page parameter value to future event 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(IUrchinActivity activity, ICollection <KeyValuePair <string, string> > parameters)
        {
            if ((activity is EventActivity || activity is TimedEventActivity) && lastUtmpParameterValue != null)
            {
                parameters.Add(KeyValuePair.Create("utmp", lastUtmpParameterValue));
            }

            if (parameters.Any(k => k.Key == "utmp"))
            {
                lastUtmpParameterValue = parameters.First(p => p.Key == "utmp").Value;
            }
        }
        /// <summary>
        /// Track this activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        /// <param name="activityCustomVariables">Activity scoped custom variable slots to record for this activity.</param>
        public void Track(IUrchinActivity activity, ScopedCustomVariableSlots activityCustomVariables = null)
        {
            if (activityCustomVariables != null && activityCustomVariables.Scope != CustomVariableScope.Activity)
                throw new ArgumentException("Custom variable slots must be scoped to activity", "activityCustomVariables");

            if (activity is AutoTimedEventActivity)
                ((AutoTimedEventActivity)activity).End();

            sessionManager.Hit();
            var trackingUri = tracker.CreateUri(activity, new[] { VisitorCustomVariables, SessionCustomVariables, activityCustomVariables });
            sender(trackingUri);

            if (activity is PageViewActivity)
                sessionManager.Referrer = new Uri("http://" + hostName + ((PageViewActivity)activity).Page);
        }
        /// <summary>
        /// Track this activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        /// <param name="activityCustomVariables">Activity scoped custom variable slots to record for this activity.</param>
        public void Track(IUrchinActivity activity, CustomVariableSlots activityCustomVariables = null)
        {
            if (activity is AutoTimedEventActivity)
                ((AutoTimedEventActivity)activity).End();

            var entry = new UrchinActivityEntry
            {
                Activity = activity,
                CustomVariables = GetFinalCustomVariables(activityCustomVariables)
            };

            if (tracker == null)
                queue.Enqueue(entry);
            else
                tracker.Track(entry);
        }
        /// <summary>
        /// Turn an IUrchinActivity into the key/value pairs necessary for building
        /// the URI to track with Urchin.
        /// </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>> GetParameters(IUrchinActivity activity)
        {
            if (activity is CampaignActivity)
                return GetParameters((CampaignActivity)activity);
            if (activity is EventActivity)
                return GetParameters((EventActivity)activity);
            if (activity is PageViewActivity)
                return GetParameters((PageViewActivity)activity);
            if (activity is SocialActivity)
                return GetParameters((SocialActivity)activity);
            if (activity is TimedEventActivity)
                return GetParameters((TimedEventActivity)activity);
            if (activity is TransactionActivity)
                return GetParameters((TransactionActivity)activity);

            Debug.Assert(false, "Unknown Activity type");
            return Enumerable.Empty<KeyValuePair<string, string>>();
        }
Пример #7
0
        /// <summary>
        /// Track this activity in analytics.
        /// </summary>
        /// <param name="activity">Activity to track in analytics.</param>
        /// <param name="activityCustomVariables">Activity scoped custom variable slots to record for this activity.</param>
        public void Track(IUrchinActivity activity, CustomVariableSlots activityCustomVariables = null)
        {
            if (activity is AutoTimedEventActivity)
            {
                ((AutoTimedEventActivity)activity).End();
            }

            var entry = new UrchinActivityEntry
            {
                Activity        = activity,
                CustomVariables = GetFinalCustomVariables(activityCustomVariables)
            };

            if (tracker == null)
            {
                queue.Enqueue(entry);
            }
            else
            {
                tracker.Track(entry);
            }
        }
Пример #8
0
        /// <summary>
        /// Carry forward the utmp page parameter value to future event 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(IUrchinActivity activity, ICollection<KeyValuePair<string, string>> parameters)
        {
            if ((activity is EventActivity || activity is TimedEventActivity) && lastUtmpParameterValue != null)
                parameters.Add(KeyValuePair.Create("utmp", lastUtmpParameterValue));

            if (parameters.Any(k => k.Key == "utmp"))
                lastUtmpParameterValue = parameters.First(p => p.Key == "utmp").Value;
        }
Пример #9
0
        /// <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>
        /// <param name="customVariables">Custom variables to include in the parameter list.</param>
        /// <returns>List of key/value pairs containing the parameters necessary for this request.</returns>
        private List<KeyValuePair<string, string>> BuildParameterList(IUrchinActivity activity, ScopedCustomVariableSlots[] customVariables)
        {
            var finalCustomVariables = GetFinalCustomVariables(customVariables);

            return GetParameters()
                .Concat(GetParameters(environment))
                .Concat(GetParameters(configuration))
                .Concat(GetParameters(sessionManager, configuration.GetHostNameHash()))
                .Concat(GetParameters(finalCustomVariables))
                .Concat(UrchinActivityTracker.GetParameters(activity))
                .ToList();
        }