/// <summary> /// Execute action on event, using telemetryManifestContext as a provider of the necessary information. /// Return true if it is allowed to execute next actions. /// Return false action forbids the event. /// By default OptOut set IsEventDropped to the true, and exclude all properties. /// </summary> /// <param name="eventProcessorContext"></param> /// <returns>Indicator, whether current action is not explicitely forbid current event</returns> public bool Execute(IEventProcessorContext eventProcessorContext) { if (!eventProcessorContext.HostTelemetrySession.IsOptedIn) { TelemetryEvent telemetryEvent = eventProcessorContext.TelemetryEvent; if (!telemetryEvent.IsOptOutFriendly && !optoutFriendlyEvents.Contains(telemetryEvent.Name)) { eventProcessorContext.IsEventDropped = true; } foreach (string item in new List <string>(telemetryEvent.Properties.Keys)) { if ((!telemetryEvent.IsOptOutFriendly || TelemetryEvent.IsPropertyNameReserved(item) || TelemetryContext.IsPropertyNameReserved(item)) && !optoutFriendlyProperties.Contains(item)) { eventProcessorContext.ExcludePropertyFromEvent(item); } } } return(true); }
/// <summary> /// Validate event. Ensure that event regular properties doesn't contain Reserved. prefix /// </summary> /// <param name="telemetryEvent"></param> internal static void ValidateEvent(TelemetryEvent telemetryEvent) { CodeContract.RequiresArgumentNotNull <TelemetryEvent>(telemetryEvent, "telemetryEvent"); foreach (KeyValuePair <string, object> property in telemetryEvent.Properties) { if (property.Key.StartsWith("Reserved.", StringComparison.Ordinal) && TelemetryEvent.IsPropertyNameReserved(property.Key)) { throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "property '{0}' has reserved prefix 'Reserved'", new object[1] { property.Key })); } } }
/// <summary> /// Validate coming event /// </summary> /// <param name="eventProcessorContext"></param> /// <returns></returns> public bool Execute(IEventProcessorContext eventProcessorContext) { TelemetryEvent telemetryEvent = eventProcessorContext.TelemetryEvent; if (TelemetryContext.IsEventNameContextPostProperty(telemetryEvent.Name)) { return(telemetryEvent.Properties.Any((KeyValuePair <string, object> p) => !TelemetryEvent.IsPropertyNameReserved(p.Key) && !TelemetryContext.IsPropertyNameReserved(p.Key))); } return(true); }