コード例 #1
0
        internal static object Run()
        {
            var zpagesOptions = new ZPagesExporterOptions()
            {
                Url = "http://localhost:7284/rpcz/"
            };
            var zpagesExporter = new ZPagesExporter(zpagesOptions);
            var spanProcessor  = new SimpleSpanProcessor(zpagesExporter);
            var httpServer     = new ZPagesExporterStatsHttpServer(zpagesExporter, spanProcessor);

            // Start the server
            httpServer.Start();

            // Configure exporter
            using (var tracerFactory = TracerFactory.Create(builder => builder
                                                            .AddProcessorPipeline(b => b
                                                                                  .SetExporter(zpagesExporter)
                                                                                  .SetExportingProcessor(e => spanProcessor))))
            {
                var tracer = tracerFactory.GetTracer("zpages-test");

                while (true)
                {
                    // Create a scoped span. It will end automatically when using statement ends
                    using (tracer.WithSpan(tracer.StartSpan("Main")))
                    {
                        Console.WriteLine("Starting Span");
                    }

                    Thread.Sleep(500);
                }
            }
        }
コード例 #2
0
        internal static object Run()
        {
            var zpagesOptions = new ZPagesExporterOptions()
            {
                Url = "http://localhost:7284/rpcz/"
            };
            var zpagesExporter = new ZPagesExporter(zpagesOptions);
            var spanProcessor  = new ZPagesSpanProcessor(zpagesExporter);

            ZPagesSpans.RetentionTime = 3600000;
            var httpServer = new ZPagesExporterStatsHttpServer(zpagesExporter, spanProcessor);

            // Start the server
            httpServer.Start();

            // Configure exporter
            using (var tracerFactory = TracerFactory.Create(builder => builder
                                                            .AddProcessorPipeline(b => b
                                                                                  .SetExporter(zpagesExporter)
                                                                                  .SetExportingProcessor(e => spanProcessor))))
            {
                var tracer = tracerFactory.GetTracer("zpages-test");

                while (true)
                {
                    // Create a scoped span.
                    TelemetrySpan telemetrySpan = tracer.StartSpan("Main");
                    telemetrySpan.Status = Status.Unavailable;

                    using (tracer.WithSpan(telemetrySpan))
                    {
                        Console.WriteLine("Starting Span");
                    }

                    Thread.Sleep(3000);

                    telemetrySpan.End();

                    // Create a scoped span.
                    TelemetrySpan telemetrySpan2 = tracer.StartSpan("TestSpan");
                    telemetrySpan2.Status = Status.Ok;

                    using (tracer.WithSpan(telemetrySpan2))
                    {
                        Console.WriteLine("Starting Span2");
                    }

                    Thread.Sleep(5000);

                    telemetrySpan2.End();
                }
            }
        }
コード例 #3
0
        internal static object Run()
        {
            var zpagesOptions = new ZPagesExporterOptions()
            {
                Url = "http://localhost:7284/rpcz/", RetentionTime = 3600000
            };
            var zpagesExporter = new ZPagesExporter(zpagesOptions);
            var httpServer     = new ZPagesExporterStatsHttpServer(zpagesExporter);

            // Start the server
            httpServer.Start();

            using var openTelemetry = OpenTelemetrySdk.CreateTracerProviderBuilder()
                                      .AddSource("zpages-test")
                                      .AddZPagesExporter(o =>
            {
                o.Url           = zpagesOptions.Url;
                o.RetentionTime = zpagesOptions.RetentionTime;
            })
                                      .Build();

            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);
            }
        }
コード例 #4
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);
            }
        }
コード例 #5
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();
        }