Search in sources :

Example 1 with Entity

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

the class ThreadLocalSegmentContext method beginSubsegment.

@Override
public Subsegment beginSubsegment(AWSXRayRecorder recorder, String name) {
    Entity current = getTraceEntity();
    if (null == current) {
        recorder.getContextMissingStrategy().contextMissing("Failed to begin subsegment named '" + name + "': segment cannot be found.", SegmentNotFoundException.class);
        return null;
    }
    if (logger.isDebugEnabled()) {
        logger.debug("Beginning subsegment named: " + name);
    }
    Segment parentSegment = getTraceEntity().getParentSegment();
    Subsegment subsegment = new SubsegmentImpl(recorder, name, parentSegment);
    subsegment.setParent(current);
    current.addSubsegment(subsegment);
    setTraceEntity(subsegment);
    return subsegment;
}
Also used : Entity(com.amazonaws.xray.entities.Entity) SubsegmentImpl(com.amazonaws.xray.entities.SubsegmentImpl) Subsegment(com.amazonaws.xray.entities.Subsegment) Segment(com.amazonaws.xray.entities.Segment)

Example 2 with Entity

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

the class AWSXRayServletAsyncListener method processEvent.

private void processEvent(AsyncEvent event) throws IOException {
    Entity prior = recorder.getTraceEntity();
    try {
        Entity entity = (Entity) event.getSuppliedRequest().getAttribute(ENTITY_ATTRIBUTE_KEY);
        recorder.setTraceEntity(entity);
        if (null != event.getThrowable()) {
            entity.addException(event.getThrowable());
        }
        filter.postFilter(event.getSuppliedRequest(), event.getSuppliedResponse());
    } finally {
        recorder.setTraceEntity(prior);
    }
}
Also used : Entity(com.amazonaws.xray.entities.Entity)

Example 3 with Entity

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

the class EntityTest method numberOfMutatingMethodsThatThrewException.

private MutatingMethodCount numberOfMutatingMethodsThatThrewException(Entity entity, Class klass) {
    int numberOfMutatingMethods = 0;
    int numberOfMutatingMethodsThatThrewException = 0;
    for (Method m : klass.getMethods()) {
        if (mutatingMethodPrefixes.stream().anyMatch((prefix) -> {
            return m.getName().startsWith(prefix);
        })) {
            numberOfMutatingMethods++;
            try {
                List<Parameter> parameters = Arrays.asList(m.getParameters());
                List<? extends Object> arguments = parameters.stream().map((parameter) -> {
                    try {
                        Class<?> argumentClass = parameter.getType();
                        if (boolean.class.equals(argumentClass)) {
                            return false;
                        } else if (double.class.equals(argumentClass)) {
                            return 0.0d;
                        } else {
                            return argumentClass.getConstructor().newInstance();
                        }
                    } catch (NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
                    }
                    return null;
                }).collect(Collectors.toList());
                m.invoke(entity, arguments.toArray());
            } catch (InvocationTargetException ite) {
                if (ite.getCause() instanceof AlreadyEmittedException) {
                    numberOfMutatingMethodsThatThrewException++;
                }
            } catch (IllegalAccessException e) {
            }
        }
    }
    return new MutatingMethodCount(numberOfMutatingMethods, numberOfMutatingMethodsThatThrewException);
}
Also used : MethodSorters(org.junit.runners.MethodSorters) Arrays(java.util.Arrays) AlreadyEmittedException(com.amazonaws.xray.exceptions.AlreadyEmittedException) Subsegment(com.amazonaws.xray.entities.Subsegment) JSONAssert(org.skyscreamer.jsonassert.JSONAssert) Segment(com.amazonaws.xray.entities.Segment) SegmentImpl(com.amazonaws.xray.entities.SegmentImpl) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) JSONException(org.json.JSONException) Parameter(java.lang.reflect.Parameter) Emitter(com.amazonaws.xray.emitters.Emitter) Method(java.lang.reflect.Method) Before(org.junit.Before) SubsegmentImpl(com.amazonaws.xray.entities.SubsegmentImpl) TraceID(com.amazonaws.xray.entities.TraceID) Test(org.junit.Test) Collectors(java.util.stream.Collectors) InvocationTargetException(java.lang.reflect.InvocationTargetException) Mockito(org.mockito.Mockito) List(java.util.List) JSONCompareMode(org.skyscreamer.jsonassert.JSONCompareMode) JsonNodeFactory(com.fasterxml.jackson.databind.node.JsonNodeFactory) Entity(com.amazonaws.xray.entities.Entity) Assert(org.junit.Assert) FixMethodOrder(org.junit.FixMethodOrder) Parameter(java.lang.reflect.Parameter) AlreadyEmittedException(com.amazonaws.xray.exceptions.AlreadyEmittedException) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Example 4 with Entity

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

the class LambdaSegmentContext method endSubsegment.

@Override
public void endSubsegment(AWSXRayRecorder recorder) {
    Entity current = getTraceEntity();
    if (current instanceof Subsegment) {
        if (logger.isDebugEnabled()) {
            logger.debug("Ending subsegment named: " + current.getName());
        }
        Subsegment currentSubsegment = (Subsegment) current;
        currentSubsegment.end();
        if (recorder.getStreamingStrategy().requiresStreaming(currentSubsegment.getParentSegment())) {
            recorder.getStreamingStrategy().streamSome(currentSubsegment.getParentSegment(), recorder.getEmitter());
        }
        Entity parentEntity = current.getParent();
        if (parentEntity instanceof FacadeSegment) {
            if (((FacadeSegment) parentEntity).isSampled()) {
                current.getCreator().getEmitter().sendSubsegment((Subsegment) current);
            }
            clearTraceEntity();
        } else {
            setTraceEntity(current.getParent());
        }
    } else {
        throw new SubsegmentNotFoundException("Failed to end a subsegment: subsegment cannot be found.");
    }
}
Also used : Entity(com.amazonaws.xray.entities.Entity) SubsegmentNotFoundException(com.amazonaws.xray.exceptions.SubsegmentNotFoundException) Subsegment(com.amazonaws.xray.entities.Subsegment) FacadeSegment(com.amazonaws.xray.entities.FacadeSegment)

Example 5 with Entity

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

the class AWSXRayServletFilterTest method testAWSXRayServletAsyncListenerEmitsSegmentWhenProcessingEvent.

@Test
public void testAWSXRayServletAsyncListenerEmitsSegmentWhenProcessingEvent() throws IOException, ServletException {
    AWSXRayServletFilter servletFilter = new AWSXRayServletFilter("test");
    AsyncContext asyncContext = Mockito.mock(AsyncContext.class);
    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
    Mockito.when(request.getRequestURL()).thenReturn(new StringBuffer("test_url"));
    Mockito.when(request.getMethod()).thenReturn("TEST_METHOD");
    Mockito.when(request.isAsyncStarted()).thenReturn(true);
    Mockito.when(request.getAsyncContext()).thenReturn(asyncContext);
    HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
    FilterChain chain = Mockito.mock(FilterChain.class);
    AsyncEvent event = Mockito.mock(AsyncEvent.class);
    Mockito.when(event.getSuppliedRequest()).thenReturn(request);
    Mockito.when(event.getSuppliedResponse()).thenReturn(response);
    servletFilter.doFilter(request, response, chain);
    Entity currentEntity = AWSXRay.getTraceEntity();
    Mockito.when(request.getAttribute("com.amazonaws.xray.entities.Entity")).thenReturn(currentEntity);
    AWSXRayServletAsyncListener listener = (AWSXRayServletAsyncListener) Whitebox.getInternalState(servletFilter, "listener");
    listener.onComplete(event);
    Mockito.verify(AWSXRay.getGlobalRecorder().getEmitter(), Mockito.times(1)).sendSegment(Mockito.any());
}
Also used : HttpServletRequest(javax.servlet.http.HttpServletRequest) Entity(com.amazonaws.xray.entities.Entity) FilterChain(javax.servlet.FilterChain) HttpServletResponse(javax.servlet.http.HttpServletResponse) AsyncContext(javax.servlet.AsyncContext) AsyncEvent(javax.servlet.AsyncEvent) Test(org.junit.Test)

Aggregations

Entity (com.amazonaws.xray.entities.Entity)6 Subsegment (com.amazonaws.xray.entities.Subsegment)4 Segment (com.amazonaws.xray.entities.Segment)2 SubsegmentImpl (com.amazonaws.xray.entities.SubsegmentImpl)2 Test (org.junit.Test)2 Emitter (com.amazonaws.xray.emitters.Emitter)1 FacadeSegment (com.amazonaws.xray.entities.FacadeSegment)1 SegmentImpl (com.amazonaws.xray.entities.SegmentImpl)1 TraceHeader (com.amazonaws.xray.entities.TraceHeader)1 TraceID (com.amazonaws.xray.entities.TraceID)1 AlreadyEmittedException (com.amazonaws.xray.exceptions.AlreadyEmittedException)1 SubsegmentNotFoundException (com.amazonaws.xray.exceptions.SubsegmentNotFoundException)1 JsonNodeFactory (com.fasterxml.jackson.databind.node.JsonNodeFactory)1 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 Parameter (java.lang.reflect.Parameter)1 Arrays (java.util.Arrays)1 List (java.util.List)1 Collectors (java.util.stream.Collectors)1