public ICarrier Extract(ICarrierHeaderCollection headerCollection) { ICarrier carrier = NullableCarrier.Instance; if (headerCollection == null) { return(carrier); } foreach (var formatter in _carrierFormatters.OrderByDescending(x => x.Key)) { if (!formatter.Enable) { continue; } foreach (var header in headerCollection) { if (formatter.Key == header.Key) { carrier = formatter.Decode(header.Value); if (carrier.HasValue) { if (formatter.Key.EndsWith("sw3") && carrier is Carrier c) { c.Sampled = true; } return(carrier); } } } } return(carrier); }
public SegmentContext CreateEntrySegmentContext(string operationName, ICarrierHeaderCollection carrierHeader) { if (operationName == null) { throw new ArgumentNullException(nameof(operationName)); } var carrier = _carrierPropagator.Extract(carrierHeader); return(_segmentContextFactory.CreateEntrySegment(operationName, carrier)); }
/// <summary> /// 创建请求 /// </summary> /// <param name="operationName"></param> /// <param name="carrierHeader"></param> /// <returns></returns> public PartialContext CreateEntryPartialContext(string operationName, ICarrierHeaderCollection carrierHeader) { if (operationName.IsNullOrEmpty()) { throw new ArgumentNullException(nameof(operationName)); } PartialContext Partial = new PartialContext(GetTraceId(), carrierHeader.CurrentSpan, ChannelType.Entry, operationName); EntryAccessor.Context = Partial; return(Partial); }
public SegmentContext CreateExitSegmentContext(string operationName, string networkAddress, ICarrierHeaderCollection carrierHeader = default(ICarrierHeaderCollection)) { var segmentContext = _segmentContextFactory.CreateExitSegment(operationName, new StringOrIntValue(networkAddress)); if (carrierHeader != null) { _carrierPropagator.Inject(segmentContext, carrierHeader); } return(segmentContext); }
public ICarrier Extract(ICarrierHeaderCollection headerCollection) { ICarrier carrier = NullableCarrier.Instance; if (headerCollection == null) { return(carrier); } foreach (var formatter in _carrierFormatters.OrderByDescending(x => x.Key)) { if (!formatter.Enable) { continue; } string headerValue = null; if (headerCollection is ICarrierHeaderDictionary headerDictionary) { headerValue = headerDictionary.Get(formatter.Key); } else { headerValue = headerCollection.FirstOrDefault(header => header.Key == formatter.Key).Value; } if (headerValue == null) { continue; } carrier = formatter.Decode(headerValue); if (carrier.HasValue) { if (formatter.Key.EndsWith("sw3") && carrier is Carrier c) { c.Sampled = true; } return(carrier); } } return(carrier); }
public void Inject(SegmentContext segmentContext, ICarrierHeaderCollection headerCollection) { var reference = segmentContext.References.FirstOrDefault(); var carrier = new Carrier(segmentContext.TraceId, segmentContext.SegmentId, segmentContext.Span.SpanId, segmentContext.ServiceInstanceId, reference?.EntryServiceInstanceId ?? segmentContext.ServiceInstanceId) { NetworkAddress = segmentContext.Span.Peer, EntryEndpoint = reference?.EntryEndpoint ?? segmentContext.Span.OperationName, ParentEndpoint = segmentContext.Span.OperationName, Sampled = segmentContext.Sampled }; foreach (var formatter in _carrierFormatters) { if (formatter.Enable) { headerCollection.Add(formatter.Key, formatter.Encode(carrier)); } } }