public void TestInjectExtract()
        {
            var tracer = new WavefrontTracer
                         .Builder(new ConsoleReporter(DefaultSource), BuildApplicationTags())
                         .Build();

            var span = tracer.BuildSpan("testOp").Start();

            Assert.NotNull(span);

            span.SetBaggageItem("customer", "testCustomer");
            span.SetBaggageItem("requestType", "mobile");

            var dictionary           = new Dictionary <string, string>();
            var textMapInjectAdapter = new TextMapInjectAdapter(dictionary);

            tracer.Inject(span.Context, BuiltinFormats.TextMap, textMapInjectAdapter);

            var textMapExtractAdapter = new TextMapExtractAdapter(dictionary);
            var context =
                (WavefrontSpanContext)tracer.Extract(BuiltinFormats.TextMap, textMapExtractAdapter);

            Assert.Equal("testCustomer", context.GetBaggageItem("customer"));
            Assert.Equal("mobile", context.GetBaggageItem("requesttype"));
        }
        public static Dictionary <string, string> CreateInjectTracingSpanHeader()
        {
            var headers = new Dictionary <string, string>();
            var carrier = new TextMapInjectAdapter(headers);

            GlobalTracer.Instance.Inject(GlobalTracer.Instance.ActiveSpan.Context, BuiltinFormats.HttpHeaders, carrier);
            return(headers);
        }
        public void TestTraceIdInjectRoot()
        {
            var traceId              = Guid.Parse("00000000-0000-0000-3871-de7e09c53ae8");
            var spanId               = Guid.Parse("00000000-0000-0000-7499-dd16d98ab60e");
            var dictionary           = new Dictionary <string, string>();
            var textMapInjectAdapter = new TextMapInjectAdapter(dictionary);

            wfJaegerPropagator.Inject(new WavefrontSpanContext(traceId, spanId, null, true),
                                      textMapInjectAdapter);
            Assert.True(dictionary.ContainsKey(JaegerHeader));
            Assert.Equal("3871de7e09c53ae8:7499dd16d98ab60e:0:1", dictionary[JaegerHeader]);
        }
        private static Metadata CreateInjectMetadataFromSpan(ITracer tracer, ISpan span)
        {
            var dict          = new Dictionary <string, string>();
            var injectAdapter = new TextMapInjectAdapter(dict);

            tracer.Inject(span.Context, BuiltinFormats.HttpHeaders, injectAdapter);
            var meta = new Metadata();

            foreach (var entry in dict)
            {
                meta.Add(entry.Key, entry.Value);
            }
            return(meta);
        }
        public void Publish <T>(T @event) where T : Event
        {
            var tracer = GlobalTracer.Instance;

            using (IScope scope = GlobalTracer.Instance.BuildSpan("send")
                                  .WithTag(Tags.SpanKind.Key, Tags.SpanKindClient)
                                  .WithTag(Tags.Component.Key, "example-client")
                                  .StartActive(finishSpanOnDispose: true))
            {
                var headers = new Dictionary <string, string>();
                var adapter = new TextMapInjectAdapter(headers);

                GlobalTracer.Instance.Inject(scope.Span.Context, BuiltinFormats.TextMap, adapter);

                tracer.ActiveSpan?.Log(new Dictionary <string, object> {
                    { "event", nameof(@event) },
                    { "type", @event.GetType().ToString() },
                    { "customer_name", "teste" },
                    { "item_number", "teste" },
                    { "quantity", "teste" }
                });

                var factory = new ConnectionFactory()
                {
                    HostName = "192.168.99.100"
                };
                using (var connection = factory.CreateConnection())
                    using (var channel = connection.CreateModel())
                    {
                        var properties = channel.CreateBasicProperties();

                        properties.Headers = new Dictionary <string, object>();

                        foreach (var item in headers)
                        {
                            properties.Headers.Add(new KeyValuePair <string, object>(item.Key, item.Value));
                        }

                        var eventName = @event.GetType().Name;

                        channel.QueueDeclare(eventName, false, false, false, null);

                        var message = JsonConvert.SerializeObject(@event);
                        var body    = Encoding.UTF8.GetBytes(message);

                        channel.BasicPublish("", eventName, properties, body);
                    }
            }
        }
        public async Task <string> RequestAsync(string content, CancellationToken cancellationToken)
        {
            string responseContent;

            var request = new HttpRequestMessage
            {
                RequestUri = _uri,
                Method     = HttpMethod.Post,
                Content    = new StringContent(content, Encoding.UTF8),
            };

            var tracer = GlobalTracer.Instance;

            using (var scope = tracer.BuildSpan("Client POST " + _uri.AbsolutePath)
                               .WithTag("span.kind", "client")
                               .StartActive())
            {
                var contextPropagationHeaders = new Dictionary <string, string>();
                var contextCarrier            = new TextMapInjectAdapter(contextPropagationHeaders);
                tracer.Inject(scope.Span.Context, BuiltinFormats.TextMap, contextCarrier);
                foreach (var kvp in contextPropagationHeaders)
                {
                    request.Headers.Add(kvp.Key, kvp.Value);
                }

                using var response = await _client.SendAsync(request, cancellationToken);

                scope.Span.SetTag("http.status_code", (int)response.StatusCode);

                responseContent = await response.Content.ReadAsStringAsync();

                scope.Span.SetTag("response.content", responseContent);
                scope.Span.SetTag("response.length", responseContent.Length);

                foreach (var header in response.Headers)
                {
                    if (header.Value is IEnumerable <object> enumerable)
                    {
                        scope.Span.SetTag($"http.header.{header.Key}", string.Join(",", enumerable));
                    }
                    else
                    {
                        scope.Span.SetTag($"http.header.{header.Key}", header.Value.ToString());
                    }
                }
            }

            return(responseContent);
        }
        public void Inject_Dictionary()
        {
            var tracer = LambdaTracer.Instance as LambdaTracer;

            tracer.AccountId         = "test-accountId";
            tracer.TrustedAccountKey = "test-accountId";
            var scope    = tracer.BuildSpan("stuff").StartActive();
            var headers  = new Dictionary <string, string>();
            var injector = new TextMapInjectAdapter(headers);

            tracer.Inject(scope.Span.Context, BuiltinFormats.HttpHeaders, injector);

            Assert.That(headers.Count, Is.EqualTo(1));
            Assert.That(headers.ContainsKey(NEWRELIC_TRACE_HEADER), Is.True);
            Assert.That(headers[NEWRELIC_TRACE_HEADER], Is.Not.Null);
        }
Esempio n. 8
0
    private static async Task RunAsync()
    {
        using var client = new HttpClient();

        await HttpGet("https://www.example.com/default-handler");
        await HttpGet("http://127.0.0.1:8080/api/mongo");
        await HttpGet("http://127.0.0.1:8080/api/redis");
        await HttpGet("http://127.0.0.1:8080/api/metrics");

        const string requestUrl = "https://www.example.com/";
        var          request    = new HttpRequestMessage
        {
            RequestUri = new Uri(requestUrl),
            Method     = HttpMethod.Post,
            Content    = new StringContent(string.Empty, Encoding.UTF8),
        };

        var tracer = GlobalTracer.Instance;

        using (var scope = tracer.BuildSpan("Client POST " + request.RequestUri)
                           .WithTag("span.kind", "client")
                           .StartActive())
        {
            var contextPropagationHeaders = new Dictionary <string, string>();
            var contextCarrier            = new TextMapInjectAdapter(contextPropagationHeaders);
            tracer.Inject(scope.Span.Context, BuiltinFormats.TextMap, contextCarrier);
            foreach (var kvp in contextPropagationHeaders)
            {
                request.Headers.Add(kvp.Key, kvp.Value);
            }

            try
            {
                using var response = await client.SendAsync(request);

                await response.Content.ReadAsStringAsync();
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine($"HttpRequestException occurred while calling {requestUrl}, {e}");
            }

            scope.Span.SetTag("custom.opentracing", "manual span");
        }
    }
        public void TestTraceIdInject()
        {
            var traceId = Guid.Parse("00000000-0000-0000-3871-de7e09c53ae8");
            var spanId  = Guid.Parse("00000000-0000-0000-7499-dd16d98ab60e");
            var baggage = new Dictionary <string, string>();

            baggage[ParentIdKey] = "ef27b4b9-f6e9-46f5-ab2b-47bbb24746c5";
            var dictionary           = new Dictionary <string, string>();
            var textMapInjectAdapter = new TextMapInjectAdapter(dictionary);

            wfJaegerPropagator.Inject(new WavefrontSpanContext(traceId, spanId, baggage, true),
                                      textMapInjectAdapter);
            Assert.True(dictionary.ContainsKey(JaegerHeader));
            Assert.Equal("3871de7e09c53ae8:7499dd16d98ab60e:ef27b4b9f6e946f5ab2b47bbb24746c5:1",
                         dictionary[JaegerHeader]);
            Assert.Equal("ef27b4b9-f6e9-46f5-ab2b-47bbb24746c5",
                         dictionary[BaggagePrefix + ParentIdKey]);
        }