use of com.amazonaws.xray.entities.TraceID in project aws-xray-sdk-java by aws.
the class EntityTest method testSegmentWithSubsegment.
@Test
public void testSegmentWithSubsegment() throws JSONException {
TraceID traceId = new TraceID();
Segment segment = new SegmentImpl(AWSXRay.getGlobalRecorder(), "test", traceId);
Subsegment subsegment = new SubsegmentImpl(AWSXRay.getGlobalRecorder(), "test", segment);
segment.addSubsegment(subsegment);
segment.setStartTime(1.0);
subsegment.setStartTime(1.0);
subsegment.end();
segment.end();
String expected = expectedCompletedSegmentWithSubsegment(traceId, segment.getId(), subsegment.getId(), 1.0, subsegment.getEndTime(), segment.getEndTime()).toString();
JSONAssert.assertEquals(expected, segment.serialize(), JSONCompareMode.NON_EXTENSIBLE);
}
use of com.amazonaws.xray.entities.TraceID in project aws-xray-sdk-java by aws.
the class AWSXRayServletAsyncListener method preFilter.
public Segment preFilter(ServletRequest request, ServletResponse response) {
Segment created = null;
HttpServletRequest httpServletRequest = castServletRequest(request);
if (null == httpServletRequest) {
logger.warn("Null value for incoming HttpServletRequest. Beginning DummySegment.");
return recorder.beginDummySegment(new TraceID());
}
Optional<TraceHeader> incomingHeader = getTraceHeader(httpServletRequest);
SamplingStrategy samplingStrategy = recorder.getSamplingStrategy();
if (logger.isDebugEnabled() && incomingHeader.isPresent()) {
logger.debug("Incoming trace header received: " + incomingHeader.get().toString());
}
SampleDecision sampleDecision = incomingHeader.isPresent() ? incomingHeader.get().getSampled() : fromSamplingStrategy(httpServletRequest);
if (SampleDecision.REQUESTED.equals(sampleDecision) || SampleDecision.UNKNOWN.equals(sampleDecision)) {
sampleDecision = fromSamplingStrategy(httpServletRequest);
}
TraceID traceId = incomingHeader.isPresent() ? incomingHeader.get().getRootTraceId() : null;
if (null == traceId) {
traceId = new TraceID();
}
String parentId = incomingHeader.isPresent() ? incomingHeader.get().getParentId() : null;
if (SampleDecision.SAMPLED.equals(sampleDecision)) {
created = recorder.beginSegment(getSegmentName(httpServletRequest), traceId, parentId);
} else {
// NOT_SAMPLED
if (samplingStrategy.isForcedSamplingSupported()) {
created = recorder.beginSegment(getSegmentName(httpServletRequest), traceId, parentId);
created.setSampled(false);
} else {
created = recorder.beginDummySegment(traceId);
}
}
Map<String, Object> requestAttributes = new HashMap<String, Object>();
requestAttributes.put("url", httpServletRequest.getRequestURL().toString());
requestAttributes.put("method", httpServletRequest.getMethod());
Optional<String> userAgent = getUserAgent(httpServletRequest);
if (userAgent.isPresent()) {
requestAttributes.put("user_agent", userAgent.get());
}
Optional<String> xForwardedFor = getXForwardedFor(httpServletRequest);
if (xForwardedFor.isPresent()) {
requestAttributes.put("client_ip", xForwardedFor.get());
requestAttributes.put("x_forwarded_for", true);
} else {
Optional<String> clientIp = getClientIp(httpServletRequest);
if (clientIp.isPresent()) {
requestAttributes.put("client_ip", clientIp.get());
}
}
created.putHttp("request", requestAttributes);
HttpServletResponse httpServletResponse = castServletResponse(response);
if (null == response) {
return created;
}
TraceHeader responseHeader = null;
if (incomingHeader.isPresent()) {
// create a new header, and use the incoming header so we know what to do in regards to sending back the sampling decision.
responseHeader = new TraceHeader(created.getTraceId());
if (SampleDecision.REQUESTED == incomingHeader.get().getSampled()) {
responseHeader.setSampled(created.isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED);
}
} else {
// Create a new header, we're the tracing root. We wont return the sampling decision.
responseHeader = new TraceHeader(created.getTraceId());
}
httpServletResponse.addHeader(TraceHeader.HEADER_KEY, responseHeader.toString());
return created;
}
use of com.amazonaws.xray.entities.TraceID in project aws-xray-sdk-java by aws.
the class EntityTest method testInProgressSegment.
@Test
public void testInProgressSegment() throws JSONException {
String segmentId = Entity.generateId();
TraceID traceId = new TraceID();
Segment segment = new SegmentImpl(AWSXRay.getGlobalRecorder(), "test", traceId);
segment.setId(segmentId);
segment.setStartTime(1.0);
String expected = expectedInProgressSegment(traceId, segmentId, segment.getStartTime()).toString();
JSONAssert.assertEquals(expected, segment.serialize(), JSONCompareMode.NON_EXTENSIBLE);
}
use of com.amazonaws.xray.entities.TraceID in project aws-xray-sdk-java by aws.
the class EntityTest method testModifyingSegmentAfterEndingThrowsAlreadyEmittedException.
@SuppressWarnings("resource")
@Test(expected = AlreadyEmittedException.class)
public void testModifyingSegmentAfterEndingThrowsAlreadyEmittedException() {
TraceID traceId = new TraceID();
Segment segment = new SegmentImpl(AWSXRay.getGlobalRecorder(), "test", traceId);
segment.end();
segment.setStartTime(1.0);
}
use of com.amazonaws.xray.entities.TraceID 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);
}
if (null == getTraceEntity()) {
// First subsgment of a subsegment branch.
Segment parentSegment = null;
if (LambdaSegmentContext.isInitializing(LambdaSegmentContext.getTraceHeaderFromEnvironment())) {
logger.warn(LAMBDA_TRACE_HEADER_KEY + " is missing a trace ID, parent ID, or sampling decision. Subsegment " + name + " discarded.");
parentSegment = new FacadeSegment(recorder, new TraceID(), "", SampleDecision.NOT_SAMPLED);
} else {
parentSegment = LambdaSegmentContext.newFacadeSegment(recorder);
}
Subsegment subsegment = new SubsegmentImpl(recorder, name, parentSegment);
subsegment.setParent(parentSegment);
setTraceEntity(subsegment);
return subsegment;
} else {
// Continuation of a subsegment branch.
Subsegment parentSubsegment = (Subsegment) getTraceEntity();
// Ensure customers have not leaked subsegments across invocations
TraceID environmentRootTraceId = LambdaSegmentContext.getTraceHeaderFromEnvironment().getRootTraceId();
if (null != environmentRootTraceId && !environmentRootTraceId.equals(parentSubsegment.getParentSegment().getTraceId())) {
clearTraceEntity();
return beginSubsegment(recorder, name);
}
Subsegment subsegment = new SubsegmentImpl(recorder, name, parentSubsegment.getParentSegment());
subsegment.setParent(parentSubsegment);
parentSubsegment.addSubsegment(subsegment);
setTraceEntity(subsegment);
return subsegment;
}
}
Aggregations