in src/Elastic.Ingest.OpenTelemetry/CustomOtlpTraceExporter.cs [65:94]
public TraceChannel(TraceChannelOptions options, ICollection<IChannelCallbacks<Activity, TraceExportResult>>? callbackListeners)
: base(options, callbackListeners) {
var o = new OtlpExporterOptions
{
Endpoint = options.Endpoint ?? new Uri("http://localhost:4317"),
Headers = $"Authorization=Bearer {options.SecretToken}"
};
TraceExporter = new CustomOtlpTraceExporter(o, options);
Processor = new CustomActivityProcessor(TraceExporter,
maxExportBatchSize: options.BufferOptions.OutboundBufferMaxSize,
maxQueueSize: options.BufferOptions.InboundBufferMaxSize,
scheduledDelayMilliseconds: (int)options.BufferOptions.OutboundBufferMaxLifetime.TotalMilliseconds,
exporterTimeoutMilliseconds: (int)options.BufferOptions.OutboundBufferMaxLifetime.TotalMilliseconds
);
var bufferType = typeof(BaseExporter<>).Assembly.GetTypes().First(t=>t.Name == "CircularBuffer`1");
var activityBuffer = bufferType.GetGenericTypeDefinition().MakeGenericType(typeof(Activity));
var bufferTypeConstructor = activityBuffer.GetConstructors().First();
var bufferAddMethod = bufferType.GetMethod("Add");
var batchType = typeof(Batch<Activity>);
var batchConstructor = batchType.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).First(c=>c.GetParameters().Length == 2);
BatchCreator = (page) =>
{
var buffer = bufferTypeConstructor.Invoke(new object[] {options.BufferOptions.OutboundBufferMaxSize });
bufferAddMethod.Invoke(buffer, new[] { page });
var batch = (Batch<Activity>)batchConstructor.Invoke(new[] {buffer, options.BufferOptions.OutboundBufferMaxSize });
return batch;
};
}