Exemplo n.º 1
0
        public async Task RecordBinary_WithoutTraceId_NotCallRecordOnSpanTracer()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            await zipkinClient.RecordBinary <object>(null, null, null);

            await zipkinClient.RecordBinary <object>(null, "value", null);

            await zipkinClient.RecordBinary <object>(null, "value", new object());

            await zipkinClient.RecordBinary <object>(null, null, new object());

            await zipkinClient.RecordBinary <object>(null, null, new object());

            await zipkinClient.RecordBinary <object>(new Span("span", null), null, null);

            await zipkinClient.RecordBinary <object>(new Span("span", null), null, new object());

            await zipkinClient.RecordBinary <object>(new Span("span", null), "value", null);

            await zipkinClient.RecordBinary <object>(new Span("span", null), "value", new object());

            await spanTracer.DidNotReceiveWithAnyArgs().RecordBinary(null, null, null);
        }
        // GET api/demo
        public async Task <string> Get()
        {
            var context = Request.GetOwinContext();
            var config  = new ZipkinConfig // you can use Dependency Injection to get the same config across your app.
            {
                Domain        = ctx => new Uri("http://Service1"),
                ZipkinBaseUri = new Uri("http://localhost:9411"),
                SampleRate    = 1
            };

            var zipkinClient = new ZipkinClient(config, context);
            var url          = "http://localhost:8081";
            var requestUri   = "/api/demo";

            using (var client = new HttpClient((new ZipkinMessageHandler(zipkinClient))))
            {
                client.BaseAddress = new Uri(url);

                var response = await client.GetAsync(requestUri);

                if (response.IsSuccessStatusCode)
                {
                    var content = await response.Content.ReadAsStringAsync();
                }
            }

            return("Helo World");
        }
Exemplo n.º 3
0
        public void Init(HttpApplication context)
        {
            context.BeginRequest += (sender, args) =>
            {
                string url = HttpContext.Current.Request.Path;

                var zipkinConfig = new ZipkinConfig();

                var traceProvider = new TraceProvider(new System.Web.HttpContextWrapper(HttpContext.Current), zipkinConfig.DontSampleListCsv, zipkinConfig.ZipkinSampleRate);
                var logger        = new MDLogger(LogManager.GetLogger(this.GetType()), traceProvider, new AssemblyInformation());

                ITracerClient zipkinClient = new ZipkinClient(traceProvider, url, logger);

                zipkinClient.StartServerTrace();

                HttpContext.Current.Items["zipkinClient"] = zipkinClient;

                var stopwatch = new Stopwatch();
                HttpContext.Current.Items["zipkinStopwatch"] = stopwatch;
                stopwatch.Start();
            };

            context.EndRequest += (sender, args) =>
            {
                var stopwatch = (Stopwatch)HttpContext.Current.Items["zipkinStopwatch"];
                stopwatch.Stop();

                var zipkinClient = (ITracerClient)HttpContext.Current.Items["zipkinClient"];

                zipkinClient.EndServerTrace(stopwatch.Elapsed.Milliseconds * 1000);
            };
        }
Exemplo n.º 4
0
        public void CTOR_WithNullCollector_create_default_collector()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues(sampleRate: 1);

            var client = new ZipkinClient(zipkinConfigStub, owinContext, null);

            Assert.IsNotNull(client.spanCollector);
        }
Exemplo n.º 5
0
        public void multiple_Client_WithNullCTORCollector_share_same_collector()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues(sampleRate: 1);

            var client1 = new ZipkinClient(zipkinConfigStub, owinContext, null);
            var client2 = new ZipkinClient(zipkinConfigStub, owinContext, null);

            Assert.IsNotNull(client1.spanCollector);
            Assert.ReferenceEquals(client1.spanCollector, client2.spanCollector);
        }
        public void CTOR_WithNullLogger()
        {
            var zipkinConfigStub = CreateZipkinConfigWithValues(fixture.Create<string>(), "123", "123", fixture.Create<string>(), "goo,bar", "0.5");

            spanCollectorStub = MockRepository.GenerateStub<SpanCollector>(MockRepository.GenerateStub<IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg<string>.Is.Anything, Arg<int>.Is.Anything, Arg<int>.Is.Anything)).Return(spanCollectorStub);

            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger, zipkinConfigStub, spanCollectorBuilder);
            Assert.IsFalse(zipkinClient.isTraceOn);
        }
        public void CTOR_WithNullTraceProvider()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(MockRepository.GenerateStub <IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg <string> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(null, requestName, logger, zipkinConfigStub, spanCollectorBuilder);

            Assert.IsFalse(zipkinClient.isTraceOn);
            logger.AssertWasCalled(x => x.Error(Arg <string> .Is.Anything));
        }
        public void CTOR_WithNullLogger()
        {
            var zipkinConfigStub = CreateZipkinConfigWithValues(fixture.Create <string>(), "123", "123", fixture.Create <string>(), "goo,bar", "0.5");

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(MockRepository.GenerateStub <IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg <string> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything)).Return(spanCollectorStub);

            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger, zipkinConfigStub, spanCollectorBuilder);

            Assert.IsFalse(zipkinClient.isTraceOn);
        }
Exemplo n.º 9
0
        public void CTOR_WithTraceIdNullOrEmpty()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            AddTraceId(string.Empty);
            AddSampled(false);

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(new Uri("http://localhost"), (uint)0);
            var zipkinClient = new ZipkinClient(zipkinConfigStub, owinContext, spanCollectorStub);

            Assert.IsFalse(zipkinClient.IsTraceOn);
        }
        public void CTOR_WithIsSampledFalse()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            AddTraceId(fixture.Create <string>());
            AddSampled(false);

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(new Uri("http://localhost"), (uint)0, logger);
            var zipkinClient = new ZipkinClient(logger, zipkinConfigStub, owinContext, spanCollectorStub);

            Assert.IsFalse(zipkinClient.IsTraceOn);
        }
        public void CTOR_WithIsSampledFalse()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            traceProvider.Expect(x => x.TraceId).Return(fixture.Create <string>());
            traceProvider.Expect(x => x.IsSampled).Return(false);

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(MockRepository.GenerateStub <IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg <string> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger, zipkinConfigStub, spanCollectorBuilder);

            Assert.IsFalse(zipkinClient.isTraceOn);
        }
Exemplo n.º 12
0
        public async Task StartClientTrace_WithoutMethodName_ReceiveNullSpan()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            traceInfoAccessor.TraceInfo.Returns(ci => new TraceInfo("traceId", string.Empty, true, false, null, null, string.Empty));

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            Assert.IsNull(await zipkinClient.StartClientTrace(new Uri("http://localhost"), null));
        }
        public void CTOR_WithNullWhiteListCsv()
        {
            traceProvider.Expect(x => x.TraceId).Return(fixture.Create <string>());
            traceProvider.Expect(x => x.IsSampled).Return(true);

            var zipkinConfigStub = CreateZipkinConfigWithValues(fixture.Create <string>(), "123", "123", fixture.Create <string>(), null, "0.5");

            spanCollectorStub = MockRepository.GenerateStub <SpanCollector>(MockRepository.GenerateStub <IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg <string> .Is.Anything, Arg <int> .Is.Anything, Arg <int> .Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger, zipkinConfigStub, spanCollectorBuilder);

            Assert.IsTrue(zipkinClient.isTraceOn);
        }
Exemplo n.º 14
0
        public void EndClientTrace_ForNullSpan_NotCallReceiveClientSpan()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            zipkinClient.EndClientTrace(null, 0);

            spanTracer.DidNotReceiveWithAnyArgs().ReceiveClientSpan(null, 0);
        }
        public override async Task Invoke(IOwinContext context)
        {
            if (_config.Bypass != null && _config.Bypass(context.Request))
            {
                await Next.Invoke(context);

                return;
            }

            var zipkin = new ZipkinClient(_config, context);
            var span   = zipkin.StartServerTrace(context.Request.Uri, context.Request.Method);
            await Next.Invoke(context);

            zipkin.EndServerTrace(span);
        }
Exemplo n.º 16
0
        public async Task StartServerTrace_IsNotSampled_ReturnNullSpan()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var traceInfo = new TraceInfo(string.Empty, string.Empty, false, false, null, null, string.Empty);

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            Assert.IsNull(await zipkinClient.StartServerTrace(null, null, traceInfo));
            Assert.IsNull(await zipkinClient.StartServerTrace(new Uri("http://localhost"), null, traceInfo));
            Assert.IsNull(await zipkinClient.StartServerTrace(new Uri("http://localhost"), "POST", traceInfo));
        }
Exemplo n.º 17
0
        public void StartClientTrace_WithSpanTracerException_DoesntThrow()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            traceInfoAccessor.TraceInfo.Returns(ci => new TraceInfo("traceId", string.Empty, true, false, null, null, string.Empty));

            spanTracer.WhenForAnyArgs(x => x.SendClientSpan(null, null, null)).Throw <Exception>();

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            Assert.DoesNotThrowAsync(() => zipkinClient.StartClientTrace(new Uri("http://localhost"), "POST"));
        }
Exemplo n.º 18
0
        public void EndServerTrace_ForNullSpan_NotCallSendServerSpan()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            traceInfoAccessor.TraceInfo.Returns(ci => new TraceInfo("traceId", string.Empty, false, false, null, null, string.Empty));

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            zipkinClient.EndServerTrace(null, 200);

            spanTracer.DidNotReceiveWithAnyArgs().SendServerSpan(null, 200);
        }
Exemplo n.º 19
0
        public async Task StartServerTrace_WithTraceOn_ReceiveSpan()
        {
            var traceInfo         = new TraceInfo(string.Empty, string.Empty, true, false, new Uri("http://localhost"), null);
            var span              = new Span("span", traceInfo);
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var traceInfoServer = new TraceInfo("traceId", string.Empty, true, false, null, null, string.Empty);

            spanTracer.ReceiveServerSpan(null, null, null).ReturnsForAnyArgs(span);

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            Assert.AreSame(await zipkinClient.StartServerTrace(new Uri("http://localhost"), "POST", traceInfoServer), span);
        }
Exemplo n.º 20
0
        public CustomerDto Get(int customerId)
        {
            var context      = System.Web.HttpContext.Current.GetOwinContext();
            var zipkinClient = new ZipkinClient(ZipkinStartup.ZipkinConfig, context);

            using (var httpClient = new HttpClient(new ZipkinMessageHandler(zipkinClient)))
            {
                var sharedResponse = httpClient.GetAsync($"http://shared.ZipkinLab.localmachine.altsrc.net/api/shared/3").Result;

                if (sharedResponse.IsSuccessStatusCode)
                {
                    var sharedContent = sharedResponse.Content.ReadAsStringAsync().Result;
                }
            }

            return(new CustomerDto("Steve", "Austin"));
        }
Exemplo n.º 21
0
        public async Task RecordLocalComponent_WithoutTraceId_NotCallRecordOnSpanTracer()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);
            var traceInfo    = new TraceInfo("traceId", string.Empty, true, false, null, null, string.Empty);

            await zipkinClient.RecordLocalComponent(null, null);

            await zipkinClient.RecordLocalComponent(null, "value");

            await zipkinClient.RecordLocalComponent(new Span("span", traceInfo), "value");

            await spanTracer.DidNotReceiveWithAnyArgs().Record(null, string.Empty);
        }
Exemplo n.º 22
0
        public void EndClientTrace_WithTraceOn_CallSpanTracer()
        {
            var zipkinConfig      = new ZipkinConfig(new Uri("http://localhost"));
            var traceInfoAccessor = Substitute.For <ITraceInfoAccessor>();
            var spanTracer        = Substitute.For <ISpanTracer>();
            var logger            = Substitute.For <ILogger <ZipkinClient> >();

            var traceInfo = new TraceInfo("traceId", string.Empty, true, false, null, null, string.Empty);

            traceInfoAccessor.TraceInfo.Returns(ci => traceInfo);

            var zipkinClient = new ZipkinClient(zipkinConfig, traceInfoAccessor, spanTracer, logger);

            zipkinClient.EndClientTrace(null, 0);
            zipkinClient.EndClientTrace(new Span("span", traceInfo), 0);

            spanTracer.ReceivedWithAnyArgs(1).ReceiveClientSpan(null, 0);
        }
Exemplo n.º 23
0
        public DataDto Get()
        {
            var zipkinConfig = ZipkinSetup();
            var context      = System.Web.HttpContext.Current.GetOwinContext();
            var zipkinClient = new ZipkinClient(zipkinConfig, context);

            AccountDto acct = null;

            using (var httpClient = new HttpClient(new ZipkinMessageHandler(zipkinClient)))
            {
                var response = httpClient.GetAsync("http://channel.ZipkinLab.localmachine.altsrc.net/account/9999").Result;

                if (response.IsSuccessStatusCode)
                {
                    var content = response.Content.ReadAsStringAsync().Result;
                    acct = JsonConvert.DeserializeObject <AccountDto>(content);
                }
            }

            using (var httpClient = new HttpClient(new ZipkinMessageHandler(zipkinClient)))
            {
                var sharedResponse = httpClient.GetAsync($"http://shared.ZipkinLab.localmachine.altsrc.net/api/shared/3").Result;

                if (sharedResponse.IsSuccessStatusCode)
                {
                    var sharedContent = sharedResponse.Content.ReadAsStringAsync().Result;
                }
            }



            var dataDto = new DataDto(acct.Customer.FirstName, acct.Customer.LastName, acct.AccountId);

            var span = new Span();

            //span.Id = ???
            zipkinClient.RecordBinary <object>(span, "correlationId", Guid.NewGuid().ToString("N"));

            return(dataDto);
        }
        public void CTOR_WithNullTraceProvider()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            spanCollectorStub = MockRepository.GenerateStub<SpanCollector>(MockRepository.GenerateStub<IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg<string>.Is.Anything, Arg<int>.Is.Anything, Arg<int>.Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(null, requestName, logger,zipkinConfigStub, spanCollectorBuilder);
            Assert.IsFalse(zipkinClient.isTraceOn);
            logger.AssertWasCalled(x => x.Error(Arg<string>.Is.Anything));
        }
Exemplo n.º 25
0
 public ZipkinModule(ZipkinClient client)
 {
     _client = client;
 }
        public void CTOR_WithNullWhiteListCsv()
        {
            traceProvider.Expect(x => x.TraceId).Return(fixture.Create<string>());
            traceProvider.Expect(x => x.IsSampled).Return(true);

            var zipkinConfigStub = CreateZipkinConfigWithValues(fixture.Create<string>(), "123", "123", fixture.Create<string>(), null , "0.5");

            spanCollectorStub = MockRepository.GenerateStub<SpanCollector>(MockRepository.GenerateStub<IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg<string>.Is.Anything, Arg<int>.Is.Anything, Arg<int>.Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger, zipkinConfigStub, spanCollectorBuilder);
            Assert.IsTrue(zipkinClient.isTraceOn);
        }
        public void CTOR_WithTraceIdNullOrEmpty()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            traceProvider.Expect(x => x.TraceId).Return(string.Empty);
            traceProvider.Expect(x => x.IsSampled).Return(true);

            spanCollectorStub = MockRepository.GenerateStub<SpanCollector>(MockRepository.GenerateStub<IClientProvider>(), 0);
            spanCollectorBuilder.Expect(x => x.Build(Arg<string>.Is.Anything, Arg<int>.Is.Anything, Arg<int>.Is.Anything)).Return(spanCollectorStub);
            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger,zipkinConfigStub, spanCollectorBuilder);
            Assert.IsFalse(zipkinClient.isTraceOn);
        }
        public void CTOR_Collector_Exception()
        {
            var zipkinConfigStub = CreateZipkinConfigWithDefaultValues();

            traceProvider.Expect(x => x.TraceId).Return(fixture.Create<string>());
            traceProvider.Expect(x => x.IsSampled).Return(true);

            spanCollectorStub = MockRepository.GenerateStub<SpanCollector>(MockRepository.GenerateStub<IClientProvider>(), 0);

            var expectedException = new Exception();
            spanCollectorBuilder.Expect(x => x.Build(Arg<string>.Is.Anything, Arg<int>.Is.Anything, Arg<int>.Is.Anything)).Return(spanCollectorStub);
            spanCollectorStub.Expect(x => x.Start()).Throw(expectedException); 

            var zipkinClient = new ZipkinClient(traceProvider, requestName, logger,zipkinConfigStub, spanCollectorBuilder);
            Assert.IsFalse(zipkinClient.isTraceOn);
        }