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"); }
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); }; }
public void CTOR_WithNullCollector_create_default_collector() { var zipkinConfigStub = CreateZipkinConfigWithDefaultValues(sampleRate: 1); var client = new ZipkinClient(zipkinConfigStub, owinContext, null); Assert.IsNotNull(client.spanCollector); }
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); }
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); }
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); }
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); }
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)); }
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")); }
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); }
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); }
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")); }
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); }
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); }
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)); }
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); }