예제 #1
0
        public static void InjectTraceContextIntoHttpRequest(Trace currentTrace, System.Net.Http.HttpRequestMessage httpRequestMsg)
        {
            //Instantiate ZipkinTraceInjector which helps to transport trace context to WCF Service by injecting trace information into http Headers.
            ZipkinHttpTraceInjector zkTraceInjector = new ZipkinHttpTraceInjector();

            //Inject trace context into Http headers before calling WCF service.
            zkTraceInjector.Inject(currentTrace, httpRequestMsg.Headers, (c, key, value) => c.Add(key, value));
        }
예제 #2
0
        private static void CheckSetHeadersThenGetTrace_NVC(long?parentSpanId)
        {
            var spanState     = new SpanState(2, 1, parentSpanId, 2, isSampled: null, isDebug: false);
            var originalTrace = Trace.CreateFromId(spanState);

            var headers = new NameValueCollection();
            var zipkinHttpTraceInjector = new ZipkinHttpTraceInjector();

            zipkinHttpTraceInjector.Inject(originalTrace, headers);

            Trace deserializedTrace;
            var   extractor = new ZipkinHttpTraceExtractor();

            Assert.True(extractor.TryExtract(headers, out deserializedTrace));

            Assert.AreEqual(originalTrace, deserializedTrace);
        }
예제 #3
0
        private static void CheckSetHeadersThenGetTrace_Dict(long?parentSpanId)
        {
            var spanState     = new SpanState(2, 1, parentSpanId, 2, SpanFlags.None);
            var originalTrace = Trace.CreateFromId(spanState);

            var headers = new Dictionary <string, string>();
            var zipkinHttpTraceInjector = new ZipkinHttpTraceInjector();

            zipkinHttpTraceInjector.Inject(originalTrace, headers);

            Trace deserializedTrace;
            var   extractor = new ZipkinHttpTraceExtractor();

            Assert.True(extractor.TryExtract(headers, out deserializedTrace));

            Assert.AreEqual(originalTrace, deserializedTrace);
        }
예제 #4
0
        public void GetTraceThenSetHeadersEqualsOriginal(string encodedTraceId, string encodedSpanId, string encodedParentSpanId, string flagsStr, string sampledStr, int expectedHeadersCount)
        {
            Trace parsedTrace;

            Assert.True(ZipkinHttpTraceExtractor.TryParseTrace(encodedTraceId, encodedSpanId, encodedParentSpanId, sampledStr, flagsStr, out parsedTrace));

            var recreatedHeaders = new NameValueCollection();
            var injector         = new ZipkinHttpTraceInjector();

            injector.Inject(parsedTrace, recreatedHeaders);

            Assert.AreEqual(expectedHeadersCount, recreatedHeaders.Count);

            Assert.AreEqual(encodedTraceId, recreatedHeaders[ZipkinHttpHeaders.TraceId]);
            Assert.AreEqual(encodedParentSpanId, recreatedHeaders[ZipkinHttpHeaders.ParentSpanId]);
            Assert.AreEqual(encodedSpanId, recreatedHeaders[ZipkinHttpHeaders.SpanId]);
            Assert.AreEqual(flagsStr, recreatedHeaders[ZipkinHttpHeaders.Flags]);
        }
예제 #5
0
        /// <summary>
        /// 附加跟踪参数
        /// </summary>
        /// <typeparam name="TE">需要附加的类型</typeparam>
        /// <param name="carrier">载体</param>
        /// <param name="action">附加的方式</param>
        public void Apply <TE>(TE carrier, Action <TE, string, string> action)
        {
            var injector = new ZipkinHttpTraceInjector();

            injector.Inject(this.Trace, carrier, action);
        }