コード例 #1
0
        internal static object Run(string projectId)
        {
            var spanExporter = new StackdriverTraceExporter(projectId);

            using (var tracerFactory = TracerFactory.Create(builder => builder.AddProcessorPipeline(c => c.SetExporter(spanExporter))))
            {
                var tracer = tracerFactory.GetTracer("stackdriver-test");

                DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; // Enable asynclocal carrier for the context
                DistributedContext dc = DistributedContextBuilder.CreateContext(FrontendKey, "mobile-ios9.3.5");

                using (DistributedContext.SetCurrent(dc))
                {
                    using (tracer.StartActiveSpan("/getuser", out TelemetrySpan span))
                    {
                        span.AddEvent("Processing video.");
                        span.PutHttpMethodAttribute("GET");
                        span.PutHttpHostAttribute("localhost", 8080);
                        span.PutHttpPathAttribute("/resource");
                        span.PutHttpStatusCodeAttribute(200);
                        span.PutHttpUserAgentAttribute("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0");

                        Thread.Sleep(TimeSpan.FromMilliseconds(10));
                    }
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(5100));

                Console.WriteLine("Done... wait for events to arrive to backend!");
                Console.ReadLine();

                return(null);
            }
        }
コード例 #2
0
        internal static object Run(string projectId)
        {
            var spanExporter = new StackdriverTraceExporter(projectId);

            using (var tracerFactory = TracerFactory.Create(builder => builder.AddProcessorPipeline(c => c.SetExporter(spanExporter))))
            {
                var tracer = tracerFactory.GetTracer("stackdriver-test");

                DistributedContext.Carrier = AsyncLocalDistributedContextCarrier.Instance; // Enable asynclocal carrier for the context
                DistributedContext dc = new DistributedContext(FrontendKey, "mobile-ios9.3.5");

                using (DistributedContext.SetCurrent(dc))
                {
                    using (tracer.StartActiveSpan("incoming request", out var span))
                    {
                        span.AddEvent("Processing video.");
                        Thread.Sleep(TimeSpan.FromMilliseconds(10));
                    }
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(5100));

                Console.WriteLine("Done... wait for events to arrive to backend!");
                Console.ReadLine();

                return(null);
            }
        }
コード例 #3
0
        internal static object Run(string projectId)
        {
            var spanExporter = new StackdriverTraceExporter(projectId);

            using (var tracerFactory = TracerFactory.Create(builder => builder.AddProcessorPipeline(c => c.SetExporter(spanExporter))))
            {
                var tracer = tracerFactory.GetTracer("stackdriver-test");

                var tagContextBuilder = Tagger.CurrentBuilder.Put(FrontendKey, "mobile-ios9.3.5");

                using (tagContextBuilder.BuildScoped())
                {
                    using (tracer.StartActiveSpan("incoming request", out var span))
                    {
                        span.AddEvent("Processing video.");
                        Thread.Sleep(TimeSpan.FromMilliseconds(10));
                    }
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(5100));

                Console.WriteLine("Done... wait for events to arrive to backend!");
                Console.ReadLine();

                return(null);
            }
        }
        /// <summary>
        /// Registers a Stackdriver exporter that will receive <see cref="System.Diagnostics.Activity"/> instances.
        /// </summary>
        /// <param name="builder"><see cref="TracerProviderBuilder"/> builder to use.</param>
        /// <param name="projectId">Project ID to send telemetry to.</param>
        /// <returns>The instance of <see cref="TracerProviderBuilder"/> to chain the calls.</returns>
        public static TracerProviderBuilder UseStackdriverExporter(
            this TracerProviderBuilder builder,
            string projectId)
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            var activityExporter = new StackdriverTraceExporter(projectId);

            return(builder.AddProcessor(new BatchActivityExportProcessor(activityExporter)));
        }
コード例 #5
0
        internal static object Run(string projectId)
        {
            var spanExporter = new StackdriverTraceExporter(projectId);

            var metricExporter = new StackdriverMetricExporter(
                projectId,
                Stats.ViewManager);

            metricExporter.Start();

            var tracerFactory = new TracerFactory(new BatchingSpanProcessor(spanExporter));
            var tracer        = tracerFactory.GetTracer(string.Empty);

            var tagContextBuilder = Tagger.CurrentBuilder.Put(FrontendKey, TagValue.Create("mobile-ios9.3.5"));

            var spanBuilder = tracer
                              .SpanBuilder("incoming request")
                              .SetRecordEvents(true)
                              .SetSampler(Samplers.AlwaysSample);

            Stats.ViewManager.RegisterView(VideoSizeView);

            using (tagContextBuilder.BuildScoped())
            {
                using (tracer.WithSpan(spanBuilder.StartSpan()))
                {
                    tracer.CurrentSpan.AddEvent("Processing video.");
                    Thread.Sleep(TimeSpan.FromMilliseconds(10));

                    StatsRecorder.NewMeasureMap()
                    .Put(VideoSize, 25 * MiB)
                    .Record();
                }
            }

            Thread.Sleep(TimeSpan.FromMilliseconds(5100));

            var viewData = Stats.ViewManager.GetView(VideoSizeViewName);

            Console.WriteLine(viewData);

            Console.WriteLine("Done... wait for events to arrive to backend!");
            Console.ReadLine();

            spanExporter.ShutdownAsync(CancellationToken.None).GetAwaiter().GetResult();
            metricExporter.Stop();
            return(null);
        }
コード例 #6
0
        internal static object Run(string projectId)
        {
            var spanExporter = new StackdriverTraceExporter(projectId);

            var metricExporter = new StackdriverMetricExporter(
                projectId,
                Stats.ViewManager);

            metricExporter.Start();

            using (var tracerFactory = TracerFactory.Create(builder => builder.SetExporter(spanExporter)))
            {
                var tracer = tracerFactory.GetTracer("stackdriver-test");

                var tagContextBuilder = Tagger.CurrentBuilder.Put(FrontendKey, TagValue.Create("mobile-ios9.3.5"));

                Stats.ViewManager.RegisterView(VideoSizeView);

                using (tagContextBuilder.BuildScoped())
                {
                    using (tracer.WithSpan(tracer.StartSpan("incoming request")))
                    {
                        tracer.CurrentSpan.AddEvent("Processing video.");
                        Thread.Sleep(TimeSpan.FromMilliseconds(10));

                        StatsRecorder.NewMeasureMap()
                        .Put(VideoSize, 25 * MiB)
                        .Record();
                    }
                }

                Thread.Sleep(TimeSpan.FromMilliseconds(5100));

                var viewData = Stats.ViewManager.GetView(VideoSizeViewName);

                Console.WriteLine(viewData);

                Console.WriteLine("Done... wait for events to arrive to backend!");
                Console.ReadLine();

                metricExporter.Stop();
                return(null);
            }
        }
コード例 #7
0
        public void StackdriverExporter_TraceClientThrows_ExportResultFailure()
        {
            Exception    exception          = null;
            ExportResult result             = ExportResult.Success;
            const string ActivitySourceName = "stackdriver.test";
            var          source             = new ActivitySource(ActivitySourceName);
            var          traceClientMock    = new Mock <TraceServiceClient>(MockBehavior.Strict);

            traceClientMock.Setup(x =>
                                  x.BatchWriteSpans(It.IsAny <BatchWriteSpansRequest>(), It.IsAny <CallSettings>()))
            .Throws(new RpcException(Status.DefaultCancelled))
            .Verifiable($"{nameof(TraceServiceClient.BatchWriteSpans)} was never called");
            var activityExporter = new StackdriverTraceExporter("test", traceClientMock.Object);
            var testExporter     = new TestExporter <Activity>(RunTest);

            var processor = new BatchActivityExportProcessor(testExporter);

            for (int i = 0; i < 10; i++)
            {
                using Activity activity = source.StartActivity("Test Activity");
                processor.OnEnd(activity);
            }

            processor.Shutdown();

            void RunTest(Batch <Activity> batch)
            {
                exception = Record.Exception(() =>
                {
                    result = activityExporter.Export(batch);
                });
            }

            Assert.Null(exception);
            Assert.StrictEqual(ExportResult.Failure, result);
            traceClientMock.VerifyAll();
        }
コード例 #8
0
        /// <summary>
        /// Starts the exporter
        /// </summary>
        public void Start()
        {
            lock (locker)
            {
                if (isInitialized)
                {
                    return;
                }

                // Register trace exporter
                if (exportComponent != null)
                {
                    var traceExporter = new StackdriverTraceExporter(projectId);
                    exportComponent.SpanExporter.RegisterHandler(ExporterName, traceExporter);
                }

                // Register stats(metrics) exporter
                if (viewManager != null)
                {
                    GoogleCredential credential = GetGoogleCredential();

                    StackdriverStatsConfiguration statsConfig = StackdriverStatsConfiguration.Default;
                    statsConfig.GoogleCredential = credential;
                    if (statsConfig.ProjectId != projectId)
                    {
                        statsConfig.ProjectId         = projectId;
                        statsConfig.MonitoredResource = GoogleCloudResourceUtils.GetDefaultResource(projectId);
                    }

                    statsExporter = new StackdriverStatsExporter(viewManager, statsConfig);
                    statsExporter.Start();
                }

                isInitialized = true;
            }
        }