in common/src/main/java/co/elastic/otel/common/ChainingSpanProcessorsInstaller.java [65:91]
private SpanProcessor createProcessorChain(
List<ChainingSpanProcessorAutoConfiguration> chainedProcessorAutoConfigs,
ConfigProperties properties,
MutableCompositeSpanProcessor terminalProcessor) {
List<ProcessorFactoryWithOrder> factories = new ArrayList<>();
for (ChainingSpanProcessorAutoConfiguration autoConfig : chainedProcessorAutoConfigs) {
autoConfig.registerSpanProcessors(
properties,
new ChainingSpanProcessorRegisterer() {
@Override
public void register(
Function<SpanProcessor, SpanProcessor> processorFactory, int order) {
factories.add(new ProcessorFactoryWithOrder(processorFactory, order));
}
});
}
// sort from highest (= last processor) to first
factories.sort((a, b) -> Integer.compare(b.order, a.order));
SpanProcessor result = terminalProcessor;
for (ProcessorFactoryWithOrder fac : factories) {
result = fac.factory.apply(result);
}
return result;
}