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;
}
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);
}
}
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);
}
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.");
}
}
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());
}
Aggregations