/** * Creates a TraceHeader object from a String. Note that this will silently ignore any "Self=" trace ids injected from ALB. * * @param string * the string from an incoming trace-id header * @return the TraceHeader object */ public static TraceHeader fromString(String string) { TraceHeader traceHeader = new TraceHeader(); if (null != string) { String[] parts = string.split(";"); for(String part : parts) { String trimmedPart = part.trim(); String value = valueFromKeyEqualsValue(trimmedPart); if (trimmedPart.startsWith(ROOT_PREFIX)) { traceHeader.setRootTraceId(TraceID.fromString(value)); } else if (trimmedPart.startsWith(PARENT_PREFIX)) { traceHeader.setParentId(value); } else if (trimmedPart.startsWith(SAMPLED_PREFIX)) { traceHeader.setSampled(SampleDecision.fromString(trimmedPart)); } else if (!trimmedPart.startsWith(SELF_PREFIX)) { String key = keyFromKeyEqualsValue(trimmedPart); if (null != key && null != value) { traceHeader.putAdditionalParam(key, value); } } } } return traceHeader; }
private static TraceHeader getTraceHeaderFromEnvironment() { return TraceHeader.fromString(System.getenv(LAMBDA_TRACE_HEADER_KEY)); }
private static boolean isInitializing(TraceHeader traceHeader) { return null == traceHeader.getRootTraceId() || null == traceHeader.getSampled() || null == traceHeader.getParentId(); }
public static void addRequestInformation(Subsegment subsegment, HttpRequest request, String url) { subsegment.setNamespace(Namespace.REMOTE.toString()); Segment parentSegment = subsegment.getParentSegment(); TraceHeader header = new TraceHeader(parentSegment.getTraceId(), parentSegment.isSampled() ? subsegment.getId() : null, parentSegment.isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED); request.addHeader(TraceHeader.HEADER_KEY, header.toString()); Map<String, Object> requestInformation = new HashMap<>(); requestInformation.put("url", url); requestInformation.put("method", request.getRequestLine().getMethod()); subsegment.putHttp("request", requestInformation); }
logger.debug("Incoming trace header received: " + incomingHeader.get().toString()); SampleDecision sampleDecision = incomingHeader.isPresent() ? incomingHeader.get().getSampled() : getSampleDecision(samplingResponse); if (SampleDecision.REQUESTED.equals(sampleDecision) || SampleDecision.UNKNOWN.equals(sampleDecision)) { sampleDecision = getSampleDecision(samplingResponse); TraceID traceId = incomingHeader.isPresent() ? incomingHeader.get().getRootTraceId() : null; if (null == traceId) { traceId = new TraceID(); String parentId = incomingHeader.isPresent() ? incomingHeader.get().getParentId() : null; if (incomingHeader.isPresent()) { responseHeader = new TraceHeader(created.getTraceId()); if (SampleDecision.REQUESTED == incomingHeader.get().getSampled()) { responseHeader.setSampled(created.isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED); responseHeader = new TraceHeader(created.getTraceId()); httpServletResponse.addHeader(TraceHeader.HEADER_KEY, responseHeader.toString());
Subsegment parentSubsegment = (Subsegment) getTraceEntity(); TraceID environmentRootTraceId = LambdaSegmentContext.getTraceHeaderFromEnvironment().getRootTraceId(); if (null != environmentRootTraceId && !environmentRootTraceId.equals(parentSubsegment.getParentSegment().getTraceId())) { clearTraceEntity();
public static void addRequestInformation(Subsegment subsegment, HttpRequest request, String url) { subsegment.setNamespace(Namespace.REMOTE.toString()); Segment parentSegment = subsegment.getParentSegment(); TraceHeader header = new TraceHeader(parentSegment.getTraceId(), parentSegment.isSampled() ? subsegment.getId() : null, parentSegment.isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED); request.addHeader(TraceHeader.HEADER_KEY, header.toString()); Map<String, Object> requestInformation = new HashMap<>(); requestInformation.put("url", url); requestInformation.put("method", request.getRequestLine().getMethod()); subsegment.putHttp("request", requestInformation); }
logger.debug("Incoming trace header received: " + incomingHeader.get().toString()); SampleDecision sampleDecision = incomingHeader.isPresent() ? incomingHeader.get().getSampled() : getSampleDecision(samplingResponse); if (SampleDecision.REQUESTED.equals(sampleDecision) || SampleDecision.UNKNOWN.equals(sampleDecision)) { sampleDecision = getSampleDecision(samplingResponse); TraceID traceId = incomingHeader.isPresent() ? incomingHeader.get().getRootTraceId() : null; if (null == traceId) { traceId = new TraceID(); String parentId = incomingHeader.isPresent() ? incomingHeader.get().getParentId() : null; if (incomingHeader.isPresent()) { responseHeader = new TraceHeader(created.getTraceId()); if (SampleDecision.REQUESTED == incomingHeader.get().getSampled()) { responseHeader.setSampled(created.isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED); responseHeader = new TraceHeader(created.getTraceId()); httpServletResponse.addHeader(TraceHeader.HEADER_KEY, responseHeader.toString());
Subsegment parentSubsegment = (Subsegment) getTraceEntity(); TraceID environmentRootTraceId = LambdaSegmentContext.getTraceHeaderFromEnvironment().getRootTraceId(); if (null != environmentRootTraceId && !environmentRootTraceId.equals(parentSubsegment.getParentSegment().getTraceId())) { clearTraceEntity();
@Override public SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { SdkHttpRequest httpRequest = context.httpRequest(); Subsegment subsegment = executionAttributes.getAttribute(entityKey); if (subsegment == null) { return httpRequest; } boolean isSampled = subsegment.getParentSegment().isSampled(); TraceHeader header = new TraceHeader( subsegment.getParentSegment().getTraceId(), isSampled ? subsegment.getId() : null, isSampled ? TraceHeader.SampleDecision.SAMPLED : TraceHeader.SampleDecision.NOT_SAMPLED ); return httpRequest.toBuilder().appendHeader(TraceHeader.HEADER_KEY, header.toString()).build(); }
/** * Creates a TraceHeader object from a String. Note that this will silently ignore any "Self=" trace ids injected from ALB. * * @param string * the string from an incoming trace-id header * @return the TraceHeader object */ public static TraceHeader fromString(String string) { TraceHeader traceHeader = new TraceHeader(); if (null != string) { String[] parts = string.split(";"); for(String part : parts) { String trimmedPart = part.trim(); String value = valueFromKeyEqualsValue(trimmedPart); if (trimmedPart.startsWith(ROOT_PREFIX)) { traceHeader.setRootTraceId(TraceID.fromString(value)); } else if (trimmedPart.startsWith(PARENT_PREFIX)) { traceHeader.setParentId(value); } else if (trimmedPart.startsWith(SAMPLED_PREFIX)) { traceHeader.setSampled(SampleDecision.fromString(trimmedPart)); } else if (!trimmedPart.startsWith(SELF_PREFIX)) { String key = keyFromKeyEqualsValue(trimmedPart); if (null != key && null != value) { traceHeader.putAdditionalParam(key, value); } } } } return traceHeader; }
private static boolean isInitializing(TraceHeader traceHeader) { return null == traceHeader.getRootTraceId() || null == traceHeader.getSampled() || null == traceHeader.getParentId(); }
private static TraceHeader getTraceHeaderFromEnvironment() { return TraceHeader.fromString(System.getenv(LAMBDA_TRACE_HEADER_KEY)); }
@Override public SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { SdkHttpRequest httpRequest = context.httpRequest(); Subsegment subsegment = executionAttributes.getAttribute(entityKey); if (subsegment == null) { return httpRequest; } boolean isSampled = subsegment.getParentSegment().isSampled(); TraceHeader header = new TraceHeader( subsegment.getParentSegment().getTraceId(), isSampled ? subsegment.getId() : null, isSampled ? TraceHeader.SampleDecision.SAMPLED : TraceHeader.SampleDecision.NOT_SAMPLED ); return httpRequest.toBuilder().appendHeader(TraceHeader.HEADER_KEY, header.toString()).build(); }
private static FacadeSegment newFacadeSegment(AWSXRayRecorder recorder) { TraceHeader traceHeader = getTraceHeaderFromEnvironment(); return new FacadeSegment(recorder, traceHeader.getRootTraceId(), traceHeader.getParentId(), traceHeader.getSampled()); }
private Optional<TraceHeader> getTraceHeader(HttpServletRequest request) { String traceHeaderString = request.getHeader(TraceHeader.HEADER_KEY); if (null != traceHeaderString) { return Optional.of(TraceHeader.fromString(traceHeaderString)); } return Optional.empty(); }
TraceHeader header = new TraceHeader(recorder.getCurrentSegment().getTraceId(), recorder.getCurrentSegment().isSampled() ? currentSubsegment.getId() : null, recorder.getCurrentSegment().isSampled() ? SampleDecision.SAMPLED : SampleDecision.NOT_SAMPLED); request.addHeader(TraceHeader.HEADER_KEY, header.toString());
private static FacadeSegment newFacadeSegment(AWSXRayRecorder recorder) { TraceHeader traceHeader = getTraceHeaderFromEnvironment(); return new FacadeSegment(recorder, traceHeader.getRootTraceId(), traceHeader.getParentId(), traceHeader.getSampled()); }
private Optional<TraceHeader> getTraceHeader(HttpServletRequest request) { String traceHeaderString = request.getHeader(TraceHeader.HEADER_KEY); if (null != traceHeaderString) { return Optional.of(TraceHeader.fromString(traceHeaderString)); } return Optional.empty(); }