Example #1
0
 public void SpanContext_ToString()
 {
     Assert.Contains(TraceId.FromBytes(firstTraceIdBytes).ToString(), first.ToString());
     Assert.Contains(SpanId.FromBytes(firstSpanIdBytes).ToString(), first.ToString());
     Assert.Contains(TraceOptions.DEFAULT.ToString(), first.ToString());
     Assert.Contains(TraceId.FromBytes(secondTraceIdBytes).ToString(), second.ToString());
     Assert.Contains(SpanId.FromBytes(secondSpanIdBytes).ToString(), second.ToString());
     Assert.Contains(TraceOptions.Builder().SetIsSampled(true).Build().ToString(), second.ToString());
 }
Example #2
0
        public void SpanData_ToString()
        {
            string spanDataString =
                SpanData.Create(
                    spanContext,
                    parentSpanId,
                    false,
                    SPAN_NAME,
                    StartTimestamp,
                    attributes,
                    annotations,
                    messageEvents,
                    links,
                    CHILD_SPAN_COUNT,
                    Status,
                    EndTimestamp)
                .ToString();

            Assert.Contains(spanContext.ToString(), spanDataString);
            Assert.Contains(parentSpanId.ToString(), spanDataString);
            Assert.Contains(SPAN_NAME, spanDataString);
            Assert.Contains(StartTimestamp.ToString(), spanDataString);
            Assert.Contains(attributes.ToString(), spanDataString);
            Assert.Contains(annotations.ToString(), spanDataString);
            Assert.Contains(messageEvents.ToString(), spanDataString);
            Assert.Contains(links.ToString(), spanDataString);
            Assert.Contains(Status.ToString(), spanDataString);
            Assert.Contains(EndTimestamp.ToString(), spanDataString);
        }
Example #3
0
        public void SpanData_ToString()
        {
            string spanDataString =
                SpanData.Create(
                    spanContext,
                    parentSpanId,
                    false,
                    SPAN_NAME,
                    startTimestamp,
                    attributes,
                    events,
                    links,
                    CHILD_SPAN_COUNT,
                    status,
                    kind,
                    endTimestamp)
                .ToString();

            Assert.Contains(spanContext.ToString(), spanDataString);
            Assert.Contains(parentSpanId.ToString(), spanDataString);
            Assert.Contains(SPAN_NAME, spanDataString);
            Assert.Contains(startTimestamp.ToString(), spanDataString);
            Assert.Contains(attributes.ToString(), spanDataString);
            Assert.Contains(events.ToString(), spanDataString);
            Assert.Contains(links.ToString(), spanDataString);
            Assert.Contains(status.ToString(), spanDataString);
            Assert.Contains(endTimestamp.ToString(), spanDataString);
        }
Example #4
0
        public void Inject(ISpanContext spanContext, ITextMap carrier)
        {
            carrier.Set(_spanContextKey, spanContext.ToString());

            foreach (var baggage in spanContext.GetBaggageItems())
            {
                carrier.Set(baggage.Key, baggage.Value);
            }
        }
Example #5
0
        public void Broadcast_Context()
        {
            Tracer tracer  = new Tracer();
            string address = "127.0.0.1";
            string port    = "8080";

            tracer.Configure(address, port);

            Tracer tracer2 = new Tracer();

            tracer2.Configure(address, port);

            BinaryCarrier carrier_beginning = new BinaryCarrier();
            var           scope             = tracer.BuildSpan("kek").StartActive();

            tracer.Inject(scope.Span.Context, BuiltinFormats.Binary, carrier_beginning);

            tracer.registry.SendAsync(carrier_beginning.Get().ToArray(), WebSocketMessageType.Binary, true, CancellationToken.None);


            var                    buffer      = new byte[4096 * 20];
            BinaryCarrier          carrier_end = new BinaryCarrier();
            WebSocketReceiveResult result      = tracer2.registry.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None).Result;

            if (result.Count != 0 || result.CloseStatus == WebSocketCloseStatus.Empty)
            {
                carrier_end.Set(new MemoryStream(buffer));
                ISpanContext context = tracer2.Extract(BuiltinFormats.Binary, carrier_end);
                Console.WriteLine(context.ToString());
            }

            /*
             * byte[] array2 = Encoding.UTF8.GetBytes("context2");
             * tracer2.registry.SendAsync(array2, WebSocketMessageType.Binary, true, CancellationToken.None);
             *
             *
             * var buffer2 = new byte[4096 * 20];
             *
             * WebSocketReceiveResult result2 = tracer.registry.ReceiveAsync(new ArraySegment<byte>(buffer2), CancellationToken.None).Result;
             * if (result2.Count != 0 || result2.CloseStatus == WebSocketCloseStatus.Empty)
             * {
             *  string message = Encoding.UTF8.GetString(buffer2, 0, result2.Count);
             *  Console.WriteLine(message);
             * }
             *
             * var buffer3 = new byte[4096 * 20];
             * WebSocketReceiveResult result3 = tracer.registry.ReceiveAsync(new ArraySegment<byte>(buffer3), CancellationToken.None).Result;
             * if (result3.Count != 0 || result3.CloseStatus == WebSocketCloseStatus.Empty)
             * {
             *  string message = Encoding.UTF8.GetString(buffer3, 0, result3.Count);
             *  Console.WriteLine(message);
             * }
             */
            tracer.Dispose();
            tracer2.Dispose();
        }
Example #6
0
        public void broadcast_context_via_Registry()
        {
            Tracer        tracer1  = new Tracer();
            Tracer        tracer2  = new Tracer();
            ASCIIEncoding encoding = new ASCIIEncoding();
            BinaryCarrier carrier  = new BinaryCarrier();
            var           scope    = tracer1.BuildSpan("kek").StartActive();

            tracer1.Inject(scope.Span.Context, BuiltinFormats.Binary, carrier);
            ISpanContext context = tracer2.Extract(BuiltinFormats.Binary, carrier);

            Assert.AreEqual(context.ToString(), scope.Span.Context.ToString());
        }
Example #7
0
        public void Inject <TCarrier>(ISpanContext spanContext, TCarrier carrier)
        {
            if (carrier is ITextMap map)
            {
                map.Set(_headersConfig.TraceContextHeaderName, _encodeValue(spanContext.ToString()));

                foreach (var baggage in spanContext.GetBaggageItems())
                {
                    map.Set($"{_headersConfig.TraceBaggageHeaderPrefix}-{baggage.Key}", _encodeValue(baggage.Value));
                }
                return;
            }
            throw new ArgumentException($"{nameof(carrier)} is not ITextMap");
        }
Example #8
0
        public void ReceiveAndSendContext_viaRegistry()
        {
            string address = "127.0.0.1";
            string port    = "8080";
            Tracer tracer1 = new Tracer();
            Tracer tracer2 = new Tracer();

            tracer1.Configure(address, port);
            tracer2.Configure(address, port);

            var scope = tracer1.BuildSpan("kek").StartActive();

            tracer1.SendContext(scope.Span).GetAwaiter().GetResult();
            ISpanContext ctx = tracer2.ReceiveContext().GetAwaiter().GetResult();

            Assert.AreEqual(ctx.ToString(), scope.Span.Context.ToString());
        }
        protected internal void HandleStartEvent(HttpContext context)
        {
            if (ShouldIgnoreRequest(context.Request.Path))
            {
                Logger?.LogDebug("HandleStartEvent: Ignoring path: {path}", context.Request.Path.ToString());
                return;
            }

            if (active.Value != null)
            {
                Logger?.LogDebug("HandleStartEvent: Continuing existing span!");
                return;
            }

            ISpanContext traceContext = ExtractTraceContext(context);
            string       spanName     = ExtractSpanName(context);

            ISpan  span;
            IScope scope;

            if (traceContext != null)
            {
                Logger?.LogDebug("HandleStartEvent: Found parent span {parent}", traceContext.ToString());
                scope = Tracer.SpanBuilderWithRemoteParent(spanName, traceContext)
                        .StartScopedSpan(out span);
            }
            else
            {
                scope = Tracer.SpanBuilder(spanName)
                        .StartScopedSpan(out span);
            }

            span.PutServerSpanKindAttribute()
            .PutHttpRawUrlAttribute(context.Request.GetDisplayUrl())
            .PutHttpMethodAttribute(context.Request.Method.ToString())
            .PutHttpPathAttribute(context.Request.Path.ToString())
            .PutHttpHostAttribute(context.Request.Host.Host, context.Request.Host.Port ?? 80);

            if (context.Request.Headers != null)
            {
                span.PutHttpRequestHeadersAttribute(AsList(context.Request.Headers));
            }

            active.Value = new SpanContext(span, scope);
        }
Example #10
0
        public override string ToString()
        {
            string dateTimeFormat = "MM/dd/yyyy hh:mm:ss.ffff tt";
            string result         = operationName + ";" + startTimeStamp.ToString(dateTimeFormat) + ";" + spanContext.ToString();

            if (!endTimeStamp.Equals(DateTime.MinValue))
            {
                result += ";" + endTimeStamp.ToString(dateTimeFormat);
            }

            if (references.Count != 0)
            {
                result += "{";
                foreach (var entry in references)
                {
                    result += entry.SpanId + ":" + entry.Referencetyp;
                }
                result += "}";
            }
            return(result);
        }