
io.opentelemetry.javaagent.instrumentation.tomcat.common.TomcatInstrumenterFactory Maven / Gradle / Ivy
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.tomcat.common;
import static io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming.Source.CONTAINER;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.servlet.AppServerBridge;
import io.opentelemetry.instrumentation.api.servlet.ServerSpanNaming;
import io.opentelemetry.instrumentation.servlet.ServletAccessor;
import io.opentelemetry.javaagent.instrumentation.servlet.ServletErrorCauseExtractor;
import org.apache.coyote.Request;
import org.apache.coyote.Response;
public final class TomcatInstrumenterFactory {
private TomcatInstrumenterFactory() {}
public static Instrumenter create(
String instrumentationName,
ServletAccessor accessor,
TomcatServletEntityProvider servletEntityProvider) {
HttpServerAttributesExtractor httpAttributesExtractor =
new TomcatHttpAttributesExtractor();
SpanNameExtractor spanNameExtractor =
HttpSpanNameExtractor.create(httpAttributesExtractor);
SpanStatusExtractor spanStatusExtractor =
HttpSpanStatusExtractor.create(httpAttributesExtractor);
NetServerAttributesExtractor netAttributesExtractor =
new TomcatNetAttributesExtractor();
AttributesExtractor additionalAttributeExtractor =
new TomcatAdditionalAttributesExtractor<>(accessor, servletEntityProvider);
return Instrumenter.builder(
GlobalOpenTelemetry.get(), instrumentationName, spanNameExtractor)
.setSpanStatusExtractor(spanStatusExtractor)
.setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor))
.addAttributesExtractor(httpAttributesExtractor)
.addAttributesExtractor(netAttributesExtractor)
.addAttributesExtractor(additionalAttributeExtractor)
.addContextCustomizer(
(context, request, attributes) -> {
context = ServerSpanNaming.init(context, CONTAINER);
return AppServerBridge.init(context);
})
.addRequestMetrics(HttpServerMetrics.get())
.newServerInstrumenter(TomcatRequestGetter.INSTANCE);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy