@Override public TraceContextOrSamplingFlags extract(C carrier) { if (carrier == null) throw new NullPointerException("carrier == null"); String b3 = getter.get(carrier, b3Key); if (b3 == null) return TraceContextOrSamplingFlags.EMPTY; TraceContextOrSamplingFlags extracted = B3SingleFormat.parseB3SingleFormat(b3); // if null, the trace context is malformed so return empty if (extracted == null) return TraceContextOrSamplingFlags.EMPTY; return extracted; } }
@Override public TraceContextOrSamplingFlags extract(C carrier) { TraceContextOrSamplingFlags result = delegate.extract(carrier); // always allocate in case fields are added late Extra fields = propagation.factory.extraFactory.create(); for (int i = 0, length = propagation.keys.size(); i < length; i++) { String maybeValue = getter.get(carrier, propagation.keys.get(i)); if (maybeValue == null) continue; fields.put(propagation.factory.keyToField[i], maybeValue); } return result.toBuilder().addExtra(fields).build(); } }
/** Parses the parent id from the input string. Returns true if the ID was missing or valid. */ final <C, K> boolean parseParentId(Propagation.Getter<C, K> getter, C carrier, K key) { String parentIdString = getter.get(carrier, key); if (parentIdString == null) return true; // absent parent is ok int length = parentIdString.length(); if (invalidIdLength(key, length, 16)) return false; parentId = lenientLowerHexToUnsignedLong(parentIdString, 0, length); if (parentId != 0) return true; maybeLogNotLowerHex(parentIdString); return false; }
@Override public TraceContextOrSamplingFlags extract(C carrier) { if (carrier == null) throw new NullPointerException("carrier == null"); String traceIdString = getter.get(carrier, propagation.traceIdKey); if (traceIdString == null) return EMPTY;
String xCloudTraceContext = getter.get(carrier, propagation.getTraceIdKey());
@Override public TraceContextOrSamplingFlags extract(C carrier) { if (carrier == null) throw new NullPointerException("carrier == null"); // try to extract single-header format TraceContextOrSamplingFlags extracted = singleExtractor.extract(carrier); if (!extracted.equals(TraceContextOrSamplingFlags.EMPTY)) return extracted; // Start by looking at the sampled state as this is used regardless // Official sampled value is 1, though some old instrumentation send true String sampled = getter.get(carrier, propagation.sampledKey); Boolean sampledV = sampled != null ? sampled.equals("1") || sampled.equalsIgnoreCase("true") : null; boolean debug = "1".equals(getter.get(carrier, propagation.debugKey)); String traceIdString = getter.get(carrier, propagation.traceIdKey); // It is ok to go without a trace ID, if sampling or debug is set if (traceIdString == null) return TraceContextOrSamplingFlags.create(sampledV, debug); // Try to parse the trace IDs into the context TraceContext.Builder result = TraceContext.newBuilder(); if (result.parseTraceId(traceIdString, propagation.traceIdKey) && result.parseSpanId(getter, carrier, propagation.spanIdKey) && result.parseParentId(getter, carrier, propagation.parentSpanIdKey)) { if (sampledV != null) result.sampled(sampledV.booleanValue()); if (debug) result.debug(true); return TraceContextOrSamplingFlags.create(result.build()); } return TraceContextOrSamplingFlags.EMPTY; // trace context is malformed so return empty } }
/** Parses the span id from the input string. Returns true if the ID is valid. */ final <C, K> boolean parseSpanId(Propagation.Getter<C, K> getter, C carrier, K key) { String spanIdString = getter.get(carrier, key); if (isNull(key, spanIdString)) return false; int length = spanIdString.length(); if (invalidIdLength(key, length, 16)) return false; spanId = lenientLowerHexToUnsignedLong(spanIdString, 0, length); if (spanId == 0) { maybeLogNotLowerHex(spanIdString); return false; } return true; }
@Override public TraceContextOrSamplingFlags extract(C carrier) { TraceContextOrSamplingFlags result = delegate.extract(carrier); // always allocate in case fields are added late Extra fields = propagation.factory.extraFactory.create(); for (int i = 0, length = propagation.keys.size(); i < length; i++) { String maybeValue = getter.get(carrier, propagation.keys.get(i)); if (maybeValue == null) continue; fields.put(propagation.factory.keyToField[i], maybeValue); } return result.toBuilder().addExtra(fields).build(); } }
/** Parses the parent id from the input string. Returns true if the ID was missing or valid. */ final <C, K> boolean parseParentId(Propagation.Getter<C, K> getter, C carrier, K key) { String parentIdString = getter.get(carrier, key); if (parentIdString == null) return true; // absent parent is ok int length = parentIdString.length(); if (invalidIdLength(key, length, 16)) return false; parentId = lenientLowerHexToUnsignedLong(parentIdString, 0, length); if (parentId != 0) return true; maybeLogNotLowerHex(parentIdString); return false; }
@Override public TraceContextOrSamplingFlags extract(C carrier) { if (carrier == null) throw new NullPointerException("carrier == null"); String b3 = getter.get(carrier, b3Key); if (b3 == null) return TraceContextOrSamplingFlags.EMPTY; TraceContextOrSamplingFlags extracted = B3SingleFormat.parseB3SingleFormat(b3); // if null, the trace context is malformed so return empty if (extracted == null) return TraceContextOrSamplingFlags.EMPTY; return extracted; } }
@Override public TraceContextOrSamplingFlags extract(C carrier) { if (carrier == null) throw new NullPointerException("carrier == null"); // try to extract single-header format TraceContextOrSamplingFlags extracted = singleExtractor.extract(carrier); if (!extracted.equals(TraceContextOrSamplingFlags.EMPTY)) return extracted; // Start by looking at the sampled state as this is used regardless // Official sampled value is 1, though some old instrumentation send true String sampled = getter.get(carrier, propagation.sampledKey); Boolean sampledV = sampled != null ? sampled.equals("1") || sampled.equalsIgnoreCase("true") : null; boolean debug = "1".equals(getter.get(carrier, propagation.debugKey)); String traceIdString = getter.get(carrier, propagation.traceIdKey); // It is ok to go without a trace ID, if sampling or debug is set if (traceIdString == null) return TraceContextOrSamplingFlags.create(sampledV, debug); // Try to parse the trace IDs into the context TraceContext.Builder result = TraceContext.newBuilder(); if (result.parseTraceId(traceIdString, propagation.traceIdKey) && result.parseSpanId(getter, carrier, propagation.spanIdKey) && result.parseParentId(getter, carrier, propagation.parentSpanIdKey)) { if (sampledV != null) result.sampled(sampledV.booleanValue()); if (debug) result.debug(true); return TraceContextOrSamplingFlags.create(result.build()); } return TraceContextOrSamplingFlags.EMPTY; // trace context is malformed so return empty } }
/** Parses the span id from the input string. Returns true if the ID is valid. */ final <C, K> boolean parseSpanId(Propagation.Getter<C, K> getter, C carrier, K key) { String spanIdString = getter.get(carrier, key); if (isNull(key, spanIdString)) return false; int length = spanIdString.length(); if (invalidIdLength(key, length, 16)) return false; spanId = lenientLowerHexToUnsignedLong(spanIdString, 0, length); if (spanId == 0) { maybeLogNotLowerHex(spanIdString); return false; } return true; }