コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: TracingContext.cs プロジェクト: shanyipeng/KissU
        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));
        }
コード例 #3
0
ファイル: TracingContext.cs プロジェクト: EmilyEdna/XExten
        /// <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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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));
                }
            }
        }