/// <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> /// Build an Measurement Protocol URI from an entry containing activity and custom variables. /// </summary> /// <param name="entry">Entry to build the URI for.</param> /// <returns>URI that when requested will track this activity.</returns> public Uri BuildUri(MeasurementActivityEntry entry) { var parameters = BuildParameterList(entry); CarryForwardParameters(entry.Activity, parameters); var endpoint = configuration.UseSsl ? secureTrackingEndpoint : trackingEndpoint; var uriBuilder = new UriBuilder(endpoint) { Query = CreateQueryString(parameters), Fragment = DateTime.UtcNow.ToString("O") }; return uriBuilder.Uri; }
/// <summary> /// Build a list of the parameters required based on configuration, environment, activity, session, custom variables and state. /// </summary> /// <param name="entry">Entry to build the parameter list for.</param> /// <returns>Enumeration of key/value pairs containing the parameters necessary for this request.</returns> private ICollection <KeyValuePair <string, string> > BuildParameterList(MeasurementActivityEntry entry) { return(GetParameters() .Concat(GetParameters(environment)) .Concat(GetParameters(configuration)) .Concat(GetParameters(sessionManager)) .Concat(MeasurementActivityParameterBuilder.GetActivityParameters(entry.Activity)) .Concat(GetParameters(entry.CustomDimensions)) .Concat(GetParameters(entry.CustomMetrics)) .ToList()); }
/// <summary> /// Track an activity in analytics. /// </summary> /// <param name="entry">MeasurementActivityEntry to track in analytics.</param> public void Track(MeasurementActivityEntry entry) { if (sessionManager.VisitorStatus != VisitorStatus.Active) return; CarryForwardLastTransaction(entry.Activity); sessionManager.Hit(); if (entry.EndSession) sessionManager.End(); var trackingUri = uriBuilder.BuildUri(entry); sender(trackingUri); }
/// <summary> /// Build an Measurement Protocol URI from an entry containing activity and custom variables. /// </summary> /// <param name="entry">Entry to build the URI for.</param> /// <returns>URI that when requested will track this activity.</returns> public Uri BuildUri(MeasurementActivityEntry entry) { var parameters = BuildParameterList(entry); CarryForwardParameters(entry.Activity, parameters); var endpoint = configuration.UseSsl ? secureTrackingEndpoint : trackingEndpoint; var uriBuilder = new UriBuilder(endpoint) { Query = CreateQueryString(parameters), Fragment = DateTime.UtcNow.ToString("O") }; return(uriBuilder.Uri); }
/// <summary> /// Track an activity in analytics. /// </summary> /// <param name="entry">MeasurementActivityEntry to track in analytics.</param> public void Track(MeasurementActivityEntry entry) { if (sessionManager.VisitorStatus != VisitorStatus.Active) { return; } CarryForwardLastTransaction(entry.Activity); sessionManager.Hit(); if (entry.EndSession) { sessionManager.End(); } var trackingUri = uriBuilder.BuildUri(entry); sender(trackingUri); }
/// <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> /// Build a list of the parameters required based on configuration, environment, activity, session, custom variables and state. /// </summary> /// <param name="entry">Entry to build the parameter list for.</param> /// <returns>Enumeration of key/value pairs containing the parameters necessary for this request.</returns> private ICollection<KeyValuePair<string, string>> BuildParameterList(MeasurementActivityEntry entry) { return GetParameters() .Concat(GetParameters(environment)) .Concat(GetParameters(configuration)) .Concat(GetParameters(sessionManager)) .Concat(MeasurementActivityParameterBuilder.GetActivityParameters(entry.Activity)) .Concat(GetParameters(entry.CustomDimensions)) .Concat(GetParameters(entry.CustomMetrics)) .ToList(); }