in apm-sniffer/apm-sdk-plugin/undertow-plugins/undertow-2.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/undertow/v2x/handler/TracingHandler.java [48:91]
public void handleRequest(HttpServerExchange exchange) throws Exception {
final HeaderMap headers = exchange.getRequestHeaders();
final ContextCarrier carrier = new ContextCarrier();
CarrierItem items = carrier.items();
while (items.hasNext()) {
items = items.next();
items.setHeadValue(headers.getFirst(items.getHeadKey()));
}
String operationName;
if (null == template) {
operationName = exchange.getRequestPath();
} else {
operationName = template;
}
final AbstractSpan span = ContextManager.createEntrySpan(exchange.getRequestMethod() + ":" + operationName, carrier);
Tags.URL.set(span, exchange.getRequestURL());
Tags.HTTP.METHOD.set(span, exchange.getRequestMethod().toString());
span.setComponent(ComponentsDefine.UNDERTOW);
SpanLayer.asHttp(span);
try {
span.prepareForAsync();
exchange.addExchangeCompleteListener(new ExchangeCompletionListener() {
@Override
public void exchangeEvent(HttpServerExchange httpServerExchange, NextListener nextListener) {
nextListener.proceed();
Tags.HTTP_RESPONSE_STATUS_CODE.set(span, httpServerExchange.getStatusCode());
if (httpServerExchange.getStatusCode() >= 400) {
span.errorOccurred();
}
span.asyncFinish();
}
});
} catch (Throwable e) {
ContextManager.activeSpan().log(e);
}
try {
next.handleRequest(exchange);
} catch (Throwable e) {
span.log(e);
} finally {
ContextManager.stopSpan(span);
ContextManager.getRuntimeContext().remove(Constants.FORWARD_REQUEST_FLAG);
}
}