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); } }
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); } }
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))); }
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); }
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); } }
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(); }
/// <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; } }