/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List <ITelemetryProcessor>(); // TransmissionProcessor is always appended by default to the end of the chain. ITelemetryProcessor linkedTelemetryProcessor = new TransmissionProcessor(this.configuration); telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { ITelemetryProcessor prevTelemetryProcessor = linkedTelemetryProcessor; linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { // Loading of a telemetry processor failed, so skip it // Error is logged when telemetry processor loading failed linkedTelemetryProcessor = prevTelemetryProcessor; continue; } telemetryProcessorsList.Add(linkedTelemetryProcessor); } var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); this.configuration.TelemetryProcessorChain = telemetryProcessorChain; }
/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List<ITelemetryProcessor>(); // TransmissionProcessor is always appended by default to the end of the chain. ITelemetryProcessor linkedTelemetryProcessor = new TransmissionProcessor(this.configuration); telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { ITelemetryProcessor prevTelemetryProcessor = linkedTelemetryProcessor; linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { // Loading of a telemetry processor failed, so skip it // Error is logged when telemetry processor loading failed linkedTelemetryProcessor = prevTelemetryProcessor; continue; } telemetryProcessorsList.Add(linkedTelemetryProcessor); } var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); this.configuration.TelemetryProcessorChain = telemetryProcessorChain; }
/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List <ITelemetryProcessor>(); ITelemetryProcessor linkedTelemetryProcessor; if (this.telemetrySink == null) { // We are building the "common" telemetry processor chain. if (this.configuration.TelemetrySinks.Count == 1) { // We just need to pass the telemetry directly into the (single) sink. linkedTelemetryProcessor = new PassThroughProcessor(this.configuration.DefaultTelemetrySink); } else { linkedTelemetryProcessor = new BroadcastProcessor(this.configuration.TelemetrySinks); } } else { linkedTelemetryProcessor = new TransmissionProcessor(this.telemetrySink); } telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { ITelemetryProcessor prevTelemetryProcessor = linkedTelemetryProcessor; linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { // Loading of a telemetry processor failed, so skip it // Error is logged when telemetry processor loading failed linkedTelemetryProcessor = prevTelemetryProcessor; continue; } telemetryProcessorsList.Add(linkedTelemetryProcessor); } var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); if (this.telemetrySink != null) { this.telemetrySink.TelemetryProcessorChain = telemetryProcessorChain; } else { this.configuration.TelemetryProcessorChain = telemetryProcessorChain; } }
/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List<ITelemetryProcessor>(); // TransmissionProcessor is always appended by default to the end of the chain. ITelemetryProcessor linkedTelemetryProcessor = new TransmissionProcessor(this.configuration); telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); telemetryProcessorsList.Add(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { throw new InvalidOperationException("TelemetryProcessor returned from TelemetryProcessorFactory cannot be null."); } } var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); this.configuration.TelemetryProcessors = telemetryProcessorChain; }
/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List <ITelemetryProcessor>(); // TransmissionProcessor is always appended by default to the end of the chain. ITelemetryProcessor linkedTelemetryProcessor = new TransmissionProcessor(this.configuration); telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); telemetryProcessorsList.Add(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { throw new InvalidOperationException("TelemetryProcessor returned from TelemetryProcessorFactory cannot be null."); } } var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); this.configuration.TelemetryProcessors = telemetryProcessorChain; }
/// <summary> /// Builds the chain of linked <see cref="ITelemetryProcessor" /> instances and sets the same in configuration object passed. /// A special telemetry processor for handling Transmission is always appended as the last /// processor in the chain. /// </summary> public void Build() { var telemetryProcessorsList = new List <ITelemetryProcessor>(); ITelemetryProcessor linkedTelemetryProcessor; if (this.telemetrySink == null) { // We are building the "common" telemetry processor chain. if (this.configuration.TelemetrySinks.Count == 1) { // We just need to pass the telemetry directly into the (single) sink. linkedTelemetryProcessor = new PassThroughProcessor(this.configuration.DefaultTelemetrySink); } else { linkedTelemetryProcessor = new BroadcastProcessor(this.configuration.TelemetrySinks); } } else { linkedTelemetryProcessor = new TransmissionProcessor(this.telemetrySink); } telemetryProcessorsList.Add(linkedTelemetryProcessor); foreach (var generator in this.factories.AsEnumerable().Reverse()) { ITelemetryProcessor prevTelemetryProcessor = linkedTelemetryProcessor; linkedTelemetryProcessor = generator.Invoke(linkedTelemetryProcessor); if (linkedTelemetryProcessor == null) { // Loading of a telemetry processor failed, so skip it // Error is logged when telemetry processor loading failed linkedTelemetryProcessor = prevTelemetryProcessor; continue; } telemetryProcessorsList.Add(linkedTelemetryProcessor); // If a Processor also implements ITelemtryModule, We should Initialize that Module if (linkedTelemetryProcessor is ITelemetryModule telemetryModule) { try { telemetryModule.Initialize(this.configuration); } catch (Exception ex) { CoreEventSource.Log.ComponentInitializationConfigurationError(telemetryModule.ToString(), ex.ToInvariantString()); } } } // Save changes to the TelemetryProcessorChain var telemetryProcessorChain = new TelemetryProcessorChain(telemetryProcessorsList.AsEnumerable().Reverse()); if (this.telemetrySink != null) { this.telemetrySink.TelemetryProcessorChain = telemetryProcessorChain; } else { this.configuration.TelemetryProcessorChain = telemetryProcessorChain; } }