public void ZPagesExporter_ZPagesProcessor()
        {
            const string          ActivitySourceName = "zpages.test";
            Guid                  requestId          = Guid.NewGuid();
            ZPagesExporterOptions options            = new ZPagesExporterOptions
            {
                RetentionTime = 100_000,
                Url           = "http://localhost:7284/rpcz/",
            };
            ZPagesExporter exporter        = new ZPagesExporter(options);
            var            zpagesProcessor = new ZPagesProcessor(exporter);

            using var openTelemetrySdk = Sdk.CreateTracerProviderBuilder()
                                         .AddSource(ActivitySourceName)
                                         .AddProcessor(zpagesProcessor)
                                         .AddZPagesExporter()
                                         .Build();

            var source    = new ActivitySource(ActivitySourceName);
            var activity0 = source.StartActivity("Test Zipkin Activity");

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(1, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(1, ZPagesActivityTracker.TotalCount.First().Value);
            Assert.Single(ZPagesActivityTracker.TotalEndedCount);
            Assert.Single(ZPagesActivityTracker.TotalErrorCount);
            Assert.Single(ZPagesActivityTracker.TotalLatency);

            var activity1 = source.StartActivity("Test Zipkin Activity");

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(2, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(2, ZPagesActivityTracker.TotalCount.First().Value);
            Assert.Single(ZPagesActivityTracker.TotalEndedCount);
            Assert.Single(ZPagesActivityTracker.TotalErrorCount);
            Assert.Single(ZPagesActivityTracker.TotalLatency);

            var activity2 = source.StartActivity("Test Zipkin Activity 2");

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(2, ZPagesActivityTracker.ProcessingList.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalEndedCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalErrorCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalLatency.Count);

            activity0?.Stop();
            activity1?.Stop();
            activity2?.Stop();

            // checking if activities were processed
            Assert.Equal(0, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(0, ZPagesActivityTracker.ProcessingList.Last().Value);
            Assert.Empty(ZPagesActivityTracker.ZQueue);
        }
Esempio n. 2
0
        internal static object Run()
        {
            var zpagesOptions = new ZPagesExporterOptions()
            {
                Url = "http://localhost:7284/rpcz/", RetentionTime = 3600000
            };
            var zpagesExporter  = new ZPagesExporter(zpagesOptions);
            var zpagesProcessor = new ZPagesProcessor(zpagesExporter);
            var httpServer      = new ZPagesExporterStatsHttpServer(zpagesExporter);

            // Start the server
            httpServer.Start();

            using var openTelemetry = Sdk.CreateTracerProvider(
                      builder => builder
                      .AddActivitySource("zpages-test")
                      .UseZPagesExporter(
                          processorConfigure: processor => processor
                          .AddProcessor((next) => zpagesProcessor)));

            ActivitySource activitySource = new ActivitySource("zpages-test");

            while (true)
            {
                // Create a scoped activity. It will end automatically when using statement ends
                using (activitySource.StartActivity("Main"))
                {
                    System.Console.WriteLine("About to do a busy work in Main");
                }

                Thread.Sleep(3000);

                // Create a scoped activity. It will end automatically when using statement ends
                using (activitySource.StartActivity("Test"))
                {
                    System.Console.WriteLine("About to do a busy work in Test");
                }

                Thread.Sleep(5000);
            }
        }
Esempio n. 3
0
        public async Task CheckingZPagesProcessor()
        {
            const string          ActivitySourceName = "zpages.test";
            ZPagesExporterOptions options            = new ZPagesExporterOptions
            {
                RetentionTime = 100_000,
                Url           = "http://localhost:7284/rpcz/",
            };
            ZPagesExporter exporter        = new ZPagesExporter(options);
            var            zpagesProcessor = new ZPagesProcessor(exporter);

            var source    = new ActivitySource(ActivitySourceName);
            var activity0 = source.StartActivity("Test Zipkin Activity 1");

            zpagesProcessor.OnStart(activity0);

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(1, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(1, ZPagesActivityTracker.TotalCount.First().Value);
            Assert.Single(ZPagesActivityTracker.TotalEndedCount);
            Assert.Single(ZPagesActivityTracker.TotalErrorCount);
            Assert.Single(ZPagesActivityTracker.TotalLatency);

            var activity1 = source.StartActivity("Test Zipkin Activity 1");

            zpagesProcessor.OnStart(activity1);

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(2, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(2, ZPagesActivityTracker.TotalCount.First().Value);
            Assert.Single(ZPagesActivityTracker.TotalEndedCount);
            Assert.Single(ZPagesActivityTracker.TotalErrorCount);
            Assert.Single(ZPagesActivityTracker.TotalLatency);

            var activity2 = source.StartActivity("Test Zipkin Activity 2");

            zpagesProcessor.OnStart(activity2);

            // checking size of dictionaries from ZPagesActivityTracker
            Assert.Equal(2, ZPagesActivityTracker.ProcessingList.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalEndedCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalErrorCount.Count);
            Assert.Equal(2, ZPagesActivityTracker.TotalLatency.Count);

            activity0?.Stop();
            activity1?.Stop();
            activity2?.Stop();
            zpagesProcessor.OnEnd(activity0);
            zpagesProcessor.OnEnd(activity1);
            zpagesProcessor.OnEnd(activity2);

            // checking if activities were processed
            Assert.Equal(0, ZPagesActivityTracker.ProcessingList.First().Value);
            Assert.Equal(0, ZPagesActivityTracker.ProcessingList.Last().Value);
            Assert.Empty(ZPagesActivityTracker.ZQueue);

            var zpagesServer = new ZPagesExporterStatsHttpServer(exporter);

            zpagesServer.Start();

            using var httpResponseMessage = await HttpClient.GetAsync("http://localhost:7284/rpcz/");

            Assert.True(httpResponseMessage.IsSuccessStatusCode);

            var content = await httpResponseMessage.Content.ReadAsStringAsync();

            Assert.Contains($"<td>Test Zipkin Activity 1</td>", content);
            Assert.Contains($"<td>Test Zipkin Activity 2</td>", content);

            zpagesProcessor.Dispose();
            zpagesServer.Stop();
            zpagesServer.Dispose();
            exporter.Dispose();
        }