public void handleRequest()

in aws-xray-agent/src/main/java/com/amazonaws/xray/agent/runtime/handlers/upstream/ServletHandler.java [34:70]


    public void handleRequest(Event event) {
        HttpServletNetworkRequestEvent requestEvent = (HttpServletNetworkRequestEvent) event;

        // For Spring Boot apps, the trace ID injection libraries will not be visible on classpath until after startup,
        // so we must try to lazy load them as early as possible
        XRaySDKConfiguration.getInstance().lazyLoadTraceIdInjection(getGlobalRecorder());

        // HttpEvents are seen as servlet invocations, so in every request, we mark that we are serving an Http request
        // In X-Ray's context, this means that if we receive a activity event, to start generating a segment.
        XRayTransactionState transactionState = getTransactionState();
        addRequestDataToTransactionState(requestEvent, transactionState);
        boolean ipForwarded = addClientIPToTransactionState(requestEvent, transactionState);

        // TODO Fix request event bug so that getHeaderData is lower cased. This needs to be case insensitive
        // See: https://github.com/awslabs/disco/issues/14
        String headerData = requestEvent.getHeaderData(HEADER_KEY.toLowerCase());
        if (headerData == null) {
            headerData = requestEvent.getHeaderData(HEADER_KEY);
        }
        transactionState.withTraceheaderString(headerData);

        TraceHeader traceHeader = TraceHeader.fromString(transactionState.getTraceHeader());
        Segment segment = beginSegment(XRayTransactionState.getServiceName(), traceHeader);

        // Obtain sampling decision
        boolean shouldSample = getSamplingDecision(transactionState);
        segment.setSampled(shouldSample);

        // Add HTTP Information
        Map<String, Object> requestAttributes = new HashMap<>();
        requestAttributes.put(URL_KEY, transactionState.getURL());
        requestAttributes.put(USER_AGENT_KEY, transactionState.getUserAgent());
        requestAttributes.put(METHOD_KEY, transactionState.getMethod());
        requestAttributes.put(CLIENT_IP_KEY, transactionState.getClientIP());
        if (ipForwarded) requestAttributes.put(FORWARDED_FOR_ATTRIB, true);
        segment.putHttp(HTTP_REQUEST_KEY, requestAttributes);
    }