
io.opentelemetry.javaagent.instrumentation.tomcat.common.TomcatHelper Maven / Gradle / Ivy
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.javaagent.instrumentation.tomcat.common;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.servlet.AppServerBridge;
import io.opentelemetry.javaagent.instrumentation.servlet.ServletHelper;
import org.apache.coyote.Request;
import org.apache.coyote.Response;
public class TomcatHelper {
protected final Instrumenter instrumenter;
protected final TomcatServletEntityProvider servletEntityProvider;
private final ServletHelper servletHelper;
public TomcatHelper(
Instrumenter instrumenter,
TomcatServletEntityProvider servletEntityProvider,
ServletHelper servletHelper) {
this.instrumenter = instrumenter;
this.servletEntityProvider = servletEntityProvider;
this.servletHelper = servletHelper;
}
public boolean shouldStart(Context parentContext, Request request) {
return instrumenter.shouldStart(parentContext, request);
}
public Context start(Context parentContext, Request request) {
Context context = instrumenter.start(parentContext, request);
request.setAttribute(ServletHelper.CONTEXT_ATTRIBUTE, context);
return context;
}
public void end(
Request request, Response response, Throwable throwable, Context context, Scope scope) {
if (scope == null) {
return;
}
scope.close();
if (throwable == null) {
throwable = AppServerBridge.getException(context);
}
if (throwable != null || mustEndOnHandlerMethodExit(request)) {
instrumenter.end(context, request, response, throwable);
}
}
private boolean mustEndOnHandlerMethodExit(Request request) {
REQUEST servletRequest = servletEntityProvider.getServletRequest(request);
return servletRequest != null && servletHelper.mustEndOnHandlerMethodExit(servletRequest);
}
public void attachResponseToRequest(Request request, Response response) {
REQUEST servletRequest = servletEntityProvider.getServletRequest(request);
RESPONSE servletResponse = servletEntityProvider.getServletResponse(response);
if (servletRequest != null && servletResponse != null) {
servletHelper.setAsyncListenerResponse(servletRequest, servletResponse);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy