public static Object onEnterHandle()

in apm-agent-plugins/apm-jdk-httpserver-plugin/src/main/java/co/elastic/apm/agent/httpserver/HttpHandlerAdvice.java [57:109]


    public static Object onEnterHandle(@Advice.Argument(0) HttpExchange exchange) {

        if (tracer.currentTransaction() != null
            || serverHelper.isRequestExcluded(exchange.getRequestURI().getPath(), exchange.getRequestHeaders().getFirst("User-Agent"))) {
            return null;
        }

        Transaction<?> transaction = tracer.startChildTransaction(exchange.getRequestHeaders(), HeadersHeaderGetter.INSTANCE, Thread.currentThread().getContextClassLoader());
        if (transaction == null) {
            return null;
        }

        TransactionNameUtils.setNameFromHttpRequestPath(
            exchange.getRequestMethod(),
            exchange.getRequestURI().getPath(),
            transaction.getAndOverrideName(AbstractSpan.PRIORITY_LOW_LEVEL_FRAMEWORK),
            webConfiguration.getUrlGroups());

        transaction.withType(Transaction.TYPE_REQUEST)
            .setFrameworkName("JDK HTTP Server");

        Request request = transaction.getContext().getRequest();

        request.getSocket()
            .withRemoteAddress(exchange.getRemoteAddress().getAddress().getHostAddress());

        request.withHttpVersion(exchange.getProtocol())
            .withMethod(exchange.getRequestMethod());

        request.getUrl()
            .withProtocol(exchange instanceof HttpsExchange ? "https" : "http")
            .withHostname(getHostname(exchange))
            .withPort(exchange.getLocalAddress().getPort())
            .withPathname(exchange.getRequestURI().getPath())
            .withSearch(exchange.getRequestURI().getQuery());

        if (transaction.isSampled() && coreConfiguration.isCaptureHeaders()) {
            Headers headers = exchange.getRequestHeaders();
            if (headers != null) {
                for (Map.Entry<String, List<String>> header : headers.entrySet()) {
                    if ("Cookie".equalsIgnoreCase(header.getKey())) {
                        for (String[] cookie : CookieHelper.getCookies(header.getValue())) {
                            request.addCookie(cookie[0], cookie[1]);
                        }
                    } else {
                        request.addHeader(header.getKey(), Collections.enumeration(header.getValue()));
                    }
                }
            }
        }

        return transaction.activate();
    }