Search in sources :

Example 71 with Subsegment

use of com.amazonaws.xray.entities.Subsegment in project aws-xray-sdk-java by aws.

the class DefaultStreamingStrategyTest method testStreamSomeChildrenRemovedFromParent.

// test to see if the correct actions are being taken in streamSome (children get removed from parent)
@Test
public void testStreamSomeChildrenRemovedFromParent() {
    TraceID traceId = new TraceID();
    DefaultStreamingStrategy defaultStreamingStrategy = new DefaultStreamingStrategy(1);
    Segment bigSegment = new SegmentImpl(AWSXRay.getGlobalRecorder(), "big", traceId);
    bigSegment.setStartTime(1.0);
    for (int i = 0; i < 5; i++) {
        Subsegment subsegment = new SubsegmentImpl(AWSXRay.getGlobalRecorder(), "child" + i, bigSegment);
        subsegment.setStartTime(1.0);
        bigSegment.addSubsegment(subsegment);
        subsegment.end();
    }
    Assert.assertTrue(defaultStreamingStrategy.requiresStreaming(bigSegment));
    defaultStreamingStrategy.streamSome(bigSegment, AWSXRay.getGlobalRecorder().getEmitter());
    Assert.assertTrue(bigSegment.getTotalSize().intValue() == 0);
}
Also used : TraceID(com.amazonaws.xray.entities.TraceID) SubsegmentImpl(com.amazonaws.xray.entities.SubsegmentImpl) SegmentImpl(com.amazonaws.xray.entities.SegmentImpl) Subsegment(com.amazonaws.xray.entities.Subsegment) FacadeSegment(com.amazonaws.xray.entities.FacadeSegment) Segment(com.amazonaws.xray.entities.Segment) Test(org.junit.Test)

Example 72 with Subsegment

use of com.amazonaws.xray.entities.Subsegment in project aws-xray-sdk-java by aws.

the class TracingInterceptorTest method testAsyncLambdaInvokeSubsegmentContainsFunctionName.

@Test
public void testAsyncLambdaInvokeSubsegmentContainsFunctionName() {
    SdkAsyncHttpClient mockClient = mockSdkAsyncHttpClient(generateLambdaInvokeResponse(200));
    LambdaAsyncClient client = LambdaAsyncClient.builder().httpClient(mockClient).endpointOverride(URI.create("http://example.com")).region(Region.of("us-west-42")).credentialsProvider(StaticCredentialsProvider.create(AwsSessionCredentials.create("key", "secret", "session"))).overrideConfiguration(ClientOverrideConfiguration.builder().addExecutionInterceptor(new TracingInterceptor()).build()).build();
    Segment segment = AWSXRay.getCurrentSegment();
    client.invoke(InvokeRequest.builder().functionName("testFunctionName").build()).join();
    Assert.assertEquals(1, segment.getSubsegments().size());
    Subsegment subsegment = segment.getSubsegments().get(0);
    Map<String, Object> awsStats = subsegment.getAws();
    @SuppressWarnings("unchecked") Map<String, Object> httpResponseStats = (Map<String, Object>) subsegment.getHttp().get("response");
    Assert.assertEquals("Invoke", awsStats.get("operation"));
    Assert.assertEquals("testFunctionName", awsStats.get("function_name"));
    Assert.assertEquals("1111-2222-3333-4444", awsStats.get("request_id"));
    Assert.assertEquals("extended", awsStats.get("id_2"));
    Assert.assertEquals("Failure", awsStats.get("function_error"));
    Assert.assertEquals("us-west-42", awsStats.get("region"));
    Assert.assertEquals(0, awsStats.get("retries"));
    Assert.assertEquals(2L, httpResponseStats.get("content_length"));
    Assert.assertEquals(200, httpResponseStats.get("status"));
    Assert.assertEquals(false, subsegment.isInProgress());
}
Also used : SdkAsyncHttpClient(software.amazon.awssdk.http.async.SdkAsyncHttpClient) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Subsegment(com.amazonaws.xray.entities.Subsegment) Map(java.util.Map) LambdaAsyncClient(software.amazon.awssdk.services.lambda.LambdaAsyncClient) Segment(com.amazonaws.xray.entities.Segment) Test(org.junit.Test)

Example 73 with Subsegment

use of com.amazonaws.xray.entities.Subsegment in project aws-xray-sdk-java by aws.

the class LambdaSegmentContext method beginSubsegment.

@Override
public Subsegment beginSubsegment(AWSXRayRecorder recorder, String name) {
    if (logger.isDebugEnabled()) {
        logger.debug("Beginning subsegment named: " + name);
    }
    Entity entity = getTraceEntity();
    if (entity == null) {
        // First subsgment of a subsegment branch.
        Segment parentSegment = newFacadeSegment(recorder, name);
        Subsegment subsegment = parentSegment.isRecording() ? new SubsegmentImpl(recorder, name, parentSegment) : Subsegment.noOp(parentSegment, recorder);
        subsegment.setParent(parentSegment);
        // Enable FacadeSegment to keep track of its subsegments for subtree streaming
        parentSegment.addSubsegment(subsegment);
        setTraceEntity(subsegment);
        return subsegment;
    } else {
        // Continuation of a subsegment branch.
        Subsegment parentSubsegment = (Subsegment) entity;
        // Ensure customers have not leaked subsegments across invocations
        TraceID environmentRootTraceId = LambdaSegmentContext.getTraceHeaderFromEnvironment().getRootTraceId();
        if (environmentRootTraceId != null && !environmentRootTraceId.equals(parentSubsegment.getParentSegment().getTraceId())) {
            clearTraceEntity();
            return beginSubsegment(recorder, name);
        }
        Segment parentSegment = parentSubsegment.getParentSegment();
        Subsegment subsegment = parentSegment.isRecording() ? new SubsegmentImpl(recorder, name, parentSegment) : Subsegment.noOp(parentSegment, recorder);
        subsegment.setParent(parentSubsegment);
        parentSubsegment.addSubsegment(subsegment);
        setTraceEntity(subsegment);
        List<SegmentListener> segmentListeners = recorder.getSegmentListeners();
        segmentListeners.stream().filter(Objects::nonNull).forEach(listener -> listener.onBeginSubsegment(subsegment));
        return subsegment;
    }
}
Also used : Entity(com.amazonaws.xray.entities.Entity) SegmentListener(com.amazonaws.xray.listeners.SegmentListener) SubsegmentImpl(com.amazonaws.xray.entities.SubsegmentImpl) TraceID(com.amazonaws.xray.entities.TraceID) Subsegment(com.amazonaws.xray.entities.Subsegment) FacadeSegment(com.amazonaws.xray.entities.FacadeSegment) Segment(com.amazonaws.xray.entities.Segment)

Example 74 with Subsegment

use of com.amazonaws.xray.entities.Subsegment in project aws-xray-sdk-java by aws.

the class TracingInterceptorTest method testLambdaInvokeSubsegmentContainsFunctionName.

@Test
public void testLambdaInvokeSubsegmentContainsFunctionName() throws Exception {
    SdkHttpClient mockClient = mockSdkHttpClient(generateLambdaInvokeResponse(200));
    LambdaClient client = LambdaClient.builder().httpClient(mockClient).endpointOverride(URI.create("http://example.com")).region(Region.of("us-west-42")).credentialsProvider(StaticCredentialsProvider.create(AwsSessionCredentials.create("key", "secret", "session"))).overrideConfiguration(ClientOverrideConfiguration.builder().addExecutionInterceptor(new TracingInterceptor()).build()).build();
    Segment segment = AWSXRay.getCurrentSegment();
    client.invoke(InvokeRequest.builder().functionName("testFunctionName").build());
    Assert.assertEquals(1, segment.getSubsegments().size());
    Subsegment subsegment = segment.getSubsegments().get(0);
    Map<String, Object> awsStats = subsegment.getAws();
    @SuppressWarnings("unchecked") Map<String, Object> httpResponseStats = (Map<String, Object>) subsegment.getHttp().get("response");
    Assert.assertEquals("Invoke", awsStats.get("operation"));
    Assert.assertEquals("testFunctionName", awsStats.get("function_name"));
    Assert.assertEquals("1111-2222-3333-4444", awsStats.get("request_id"));
    Assert.assertEquals("extended", awsStats.get("id_2"));
    Assert.assertEquals("Failure", awsStats.get("function_error"));
    Assert.assertEquals("us-west-42", awsStats.get("region"));
    Assert.assertEquals(0, awsStats.get("retries"));
    Assert.assertEquals(2L, httpResponseStats.get("content_length"));
    Assert.assertEquals(200, httpResponseStats.get("status"));
    Assert.assertEquals(false, subsegment.isInProgress());
}
Also used : LambdaClient(software.amazon.awssdk.services.lambda.LambdaClient) SdkHttpClient(software.amazon.awssdk.http.SdkHttpClient) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Subsegment(com.amazonaws.xray.entities.Subsegment) Map(java.util.Map) Segment(com.amazonaws.xray.entities.Segment) Test(org.junit.Test)

Example 75 with Subsegment

use of com.amazonaws.xray.entities.Subsegment in project aws-xray-sdk-java by aws.

the class TracingInterceptorTest method testNoHeaderAddedWhenPropagationOff.

@Test
public void testNoHeaderAddedWhenPropagationOff() {
    Subsegment subsegment = Subsegment.noOp(AWSXRay.getGlobalRecorder(), false);
    TracingInterceptor interceptor = new TracingInterceptor();
    Context.ModifyHttpRequest context = Mockito.mock(Context.ModifyHttpRequest.class);
    SdkHttpRequest mockRequest = Mockito.mock(SdkHttpRequest.class);
    SdkHttpRequest.Builder mockRequestBuilder = Mockito.mock(SdkHttpRequest.Builder.class);
    when(context.httpRequest()).thenReturn(mockRequest);
    Mockito.lenient().when(context.httpRequest().toBuilder()).thenReturn(mockRequestBuilder);
    ExecutionAttributes attributes = new ExecutionAttributes();
    attributes.putAttribute(TracingInterceptor.entityKey, subsegment);
    interceptor.modifyHttpRequest(context, attributes);
    verify(mockRequest.toBuilder(), never()).appendHeader(anyString(), anyString());
}
Also used : Context(software.amazon.awssdk.core.interceptor.Context) SdkHttpRequest(software.amazon.awssdk.http.SdkHttpRequest) ExecutionAttributes(software.amazon.awssdk.core.interceptor.ExecutionAttributes) Subsegment(com.amazonaws.xray.entities.Subsegment) Test(org.junit.Test)

Aggregations

Subsegment (com.amazonaws.xray.entities.Subsegment)81 Test (org.junit.Test)35 Segment (com.amazonaws.xray.entities.Segment)31 SubsegmentImpl (com.amazonaws.xray.entities.SubsegmentImpl)14 Test (org.junit.jupiter.api.Test)13 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)13 FacadeSegment (com.amazonaws.xray.entities.FacadeSegment)10 SegmentImpl (com.amazonaws.xray.entities.SegmentImpl)10 TraceID (com.amazonaws.xray.entities.TraceID)10 Map (java.util.Map)10 Entity (com.amazonaws.xray.entities.Entity)9 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)9 CloseableHttpResponse (org.apache.http.client.methods.CloseableHttpResponse)7 Cause (com.amazonaws.xray.entities.Cause)6 TraceHeader (com.amazonaws.xray.entities.TraceHeader)5 SdkHttpClient (software.amazon.awssdk.http.SdkHttpClient)5 Emitter (com.amazonaws.xray.emitters.Emitter)4 SegmentListener (com.amazonaws.xray.listeners.SegmentListener)4 SdkAsyncHttpClient (software.amazon.awssdk.http.async.SdkAsyncHttpClient)4 LambdaAsyncClient (software.amazon.awssdk.services.lambda.LambdaAsyncClient)4