/// <summary> /// Sends telemetry data item to the configured channel if the instrumentation key /// is not empty. Also publishes the telemetry item to the MessageBroker. Filters /// out the requests to Glimpse handler. /// </summary> /// <param name="item">Item to send.</param> public void Send(ITelemetry item) { var timer = this.TimerStrategy(); if (item == null) { return; } // Filter the request telemetry to glimpse.axd if (item is RequestTelemetry) { var request = item as RequestTelemetry; if (request.Url != null && request.Url.AbsolutePath != null) { if (request.Url.AbsolutePath.ToLower().EndsWith("glimpse.axd")) { return; } } } if (timer != null && this.MessageBroker != null) { if (item is TraceTelemetry) { var trace = item as TraceTelemetry; var traceMessage = new TraceTelemetryTraceMessage(trace); traceMessage.FromFirst = timer.Point().Offset; traceMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(traceMessage); } else if (item is EventTelemetry) { // Send it to TraceTab var eventT = item as EventTelemetry; var eventMessage = new EventTelemetryTraceMessage(eventT); eventMessage.FromFirst = timer.Point().Offset; eventMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(eventMessage); // Send it to TimelineTab var timelineMessage = new EventTelemetryTimelineMessage(eventT); timelineMessage.Offset = timer.Point().Offset; this.MessageBroker.Publish(timelineMessage); } else if (item is ExceptionTelemetry) { // Send it to TraceTab var trace = item as ExceptionTelemetry; var traceMessage = new ExceptionTelemetryTraceMessage(trace); traceMessage.FromFirst = timer.Point().Offset; traceMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(traceMessage); // Send it to TimelineTab var timelineMessage = new ExceptionTelemetryTimelineMessage(trace); timelineMessage.Offset = timer.Point().Offset; this.MessageBroker.Publish(timelineMessage); } else if (item is RequestTelemetry) { var request = item as RequestTelemetry; var timelineMessage = new RequestTelemetryTimelineMessage(request); timelineMessage.Offset = timer.Point().Offset.Subtract(request.Duration); this.MessageBroker.Publish(timelineMessage); } else if (item is DependencyTelemetry) { var dependency = item as DependencyTelemetry; var timelineMessage = new DependencyTelemetryTimelineMessage(dependency); timelineMessage.Offset = timer.Point().Offset.Subtract(dependency.Duration); this.MessageBroker.Publish(timelineMessage); } this.messageBroker.Publish(item); } // Filter telemetry with empty instrumentation key if (item.Context.InstrumentationKey != null && !item.Context.InstrumentationKey.Equals("00000000-0000-0000-0000-000000000000")) { if (this.Channel != null) { this.Channel.Send(item); } } }
/// <summary> /// Sends telemetry data item to the configured channel if the instrumentation key /// is not empty. Also publishes the telemetry item to the MessageBroker. Filters /// out the requests to Glimpse handler. /// </summary> /// <param name="item">Item to send.</param> public void Send(ITelemetry item) { var timer = this.TimerStrategy(); if (item == null || timer == null || this.MessageBroker == null) { return; } // Filter the request telemetry to glimpse.axd if (item is RequestTelemetry) { var request = item as RequestTelemetry; if (request.Url != null && request.Url.AbsolutePath != null) { if (request.Url.AbsolutePath.ToLower().EndsWith("glimpse.axd")) { return; } } } if (item is TraceTelemetry) { var trace = item as TraceTelemetry; var traceMessage = new TraceTelemetryTraceMessage(trace); traceMessage.FromFirst = timer.Point().Offset; traceMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(traceMessage); } if (item is EventTelemetry) { // Send it to TraceTab var eventT = item as EventTelemetry; var eventMessage = new EventTelemetryTraceMessage(eventT); eventMessage.FromFirst = timer.Point().Offset; eventMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(eventMessage); // Send it to TimelineTab var timelineMessage = new EventTelemetryTimelineMessage(eventT); timelineMessage.Offset = timer.Point().Offset; this.MessageBroker.Publish(timelineMessage); } if (item is ExceptionTelemetry) { // Send it to TraceTab var trace = item as ExceptionTelemetry; var traceMessage = new ExceptionTelemetryTraceMessage(trace); traceMessage.FromFirst = timer.Point().Offset; traceMessage.FromLast = this.CalculateFromLast(timer); this.MessageBroker.Publish(traceMessage); // Send it to TimelineTab var timelineMessage = new ExceptionTelemetryTimelineMessage(trace); timelineMessage.Offset = timer.Point().Offset; this.MessageBroker.Publish(timelineMessage); } if (item is RequestTelemetry) { var request = item as RequestTelemetry; var timelineMessage = new RequestTelemetryTimelineMessage(request); timelineMessage.Offset = timer.Point().Offset.Subtract(request.Duration); this.MessageBroker.Publish(timelineMessage); } if (item is DependencyTelemetry) { var dependency = item as DependencyTelemetry; var timelineMessage = new DependencyTelemetryTimelineMessage(dependency); timelineMessage.Offset = timer.Point().Offset.Subtract(dependency.Duration); this.MessageBroker.Publish(timelineMessage); } // Filter telemetry with empty instrumentation key if (item.Context.InstrumentationKey != null && !item.Context.InstrumentationKey.Equals("00000000-0000-0000-0000-000000000000")) { this.Channel.Send(item); } this.messageBroker.Publish(item); }