/** * Sends a subsegment to the emitter if the subsegment's parent segment is marked as sampled. * * @param subsegment * the subsegment to send * @return * true if the subsegment was emitted succesfully. */ public boolean sendSubsegment(Subsegment subsegment) { if (subsegment.getParentSegment().isSampled()) { return emitter.sendSubsegment(subsegment); } return false; }
/** * Sends a subsegment to the emitter if the subsegment's parent segment is marked as sampled. * * @param subsegment * the subsegment to send * @return * true if the subsegment was emitted succesfully. */ public boolean sendSubsegment(Subsegment subsegment) { if (subsegment.getParentSegment().isSampled()) { return emitter.sendSubsegment(subsegment); } return false; }
/** * Ends the provided subsegment. This method doesn't touch context storage. * * @param subsegment * the subsegment to close. */ public void endSubsegment(Subsegment subsegment) { if(subsegment == null) { logger.debug("No input subsegment to end. No-op."); return; } boolean rootReady = subsegment.end(); // First handling the special case where its direct parent is a facade segment if(subsegment.getParent() instanceof FacadeSegment) { if(((FacadeSegment) subsegment.getParent()).isSampled()) { getEmitter().sendSubsegment(subsegment); } return; } // Otherwise we check the happy case where the entire segment is ready if (rootReady && !(subsegment.getParentSegment() instanceof FacadeSegment)) { sendSegment(subsegment.getParentSegment()); return; } // If not we try to stream closed subsegments regardless the root segment is facade or real if (this.getStreamingStrategy().requiresStreaming(subsegment.getParentSegment())) { this.getStreamingStrategy().streamSome(subsegment.getParentSegment(), this.getEmitter()); } }
/** * Ends the provided subsegment. This method doesn't touch context storage. * * @param subsegment * the subsegment to close. */ public void endSubsegment(Subsegment subsegment) { if(subsegment == null) { logger.debug("No input subsegment to end. No-op."); return; } boolean rootReady = subsegment.end(); // First handling the special case where its direct parent is a facade segment if(subsegment.getParent() instanceof FacadeSegment) { if(((FacadeSegment) subsegment.getParent()).isSampled()) { getEmitter().sendSubsegment(subsegment); } return; } // Otherwise we check the happy case where the entire segment is ready if (rootReady && !(subsegment.getParentSegment() instanceof FacadeSegment)) { sendSegment(subsegment.getParentSegment()); return; } // If not we try to stream closed subsegments regardless the root segment is facade or real if (this.getStreamingStrategy().requiresStreaming(subsegment.getParentSegment())) { this.getStreamingStrategy().streamSome(subsegment.getParentSegment(), this.getEmitter()); } }
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); }
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); }
@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; if (currentSubsegment.end()) { recorder.sendSegment(currentSubsegment.getParentSegment()); } else { if (recorder.getStreamingStrategy().requiresStreaming(currentSubsegment.getParentSegment())) { recorder.getStreamingStrategy().streamSome(currentSubsegment.getParentSegment(), recorder.getEmitter()); } setTraceEntity(current.getParent()); } } else { recorder.getContextMissingStrategy().contextMissing("Failed to end subsegment: subsegment cannot be found.", SubsegmentNotFoundException.class); } } }
@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; if (currentSubsegment.end()) { recorder.sendSegment(currentSubsegment.getParentSegment()); } else { if (recorder.getStreamingStrategy().requiresStreaming(currentSubsegment.getParentSegment())) { recorder.getStreamingStrategy().streamSome(currentSubsegment.getParentSegment(), recorder.getEmitter()); } setTraceEntity(current.getParent()); } } else { recorder.getContextMissingStrategy().contextMissing("Failed to end subsegment: subsegment cannot be found.", SubsegmentNotFoundException.class); } } }
@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(); }
@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(); }
@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."); } } }
@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."); } } }
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);
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);