示例#1
0
        public void status_ViaEndSpanOptions()
        {
            var span =
                (Span)Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    SpanKind.Internal,
                    parentSpanId,
                    TraceParams.Default,
                    startEndHandler,
                    timestampConverter);

            interval = TimeSpan.FromMilliseconds(100);
            Assert.Equal(Status.Ok, span.Status);
            ((Span)span).Status = Status.Cancelled;
            Assert.Equal(Status.Cancelled, span.Status);
            span.End(EndSpanOptions.Builder().SetStatus(Status.Aborted).Build());
            Assert.Equal(Status.Aborted, span.Status);

            var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler);
            var spanBase     = span as SpanBase;

            startEndMock.Verify(s => s.OnStart(spanBase), Times.Once);
        }
        public void SetSampleToLocalSpanStore()
        {
            EndSpanOptions endSpanOptions =
                EndSpanOptions.Builder().SetSampleToLocalSpanStore(true).Build();

            Assert.True(endSpanOptions.SampleToLocalSpanStore);
        }
示例#3
0
        public void status_ViaEndSpanOptions()
        {
            ISpan span =
                Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    parentSpanId,
                    false,
                    TraceParams.DEFAULT,
                    startEndHandler,
                    timestampConverter,
                    testClock);

            testClock.AdvanceTime(Duration.Create(0, 100));
            Assert.Equal(Status.OK, span.Status);
            ((Span)span).Status = Status.CANCELLED;
            Assert.Equal(Status.CANCELLED, span.Status);
            span.End(EndSpanOptions.Builder().SetStatus(Status.ABORTED).Build());
            Assert.Equal(Status.ABORTED, span.Status);

            var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler);
            var spanBase     = span as SpanBase;

            startEndMock.Verify(s => s.OnStart(spanBase), Times.Once);
        }
示例#4
0
        public void GoSpanData_EndedSpan()
        {
            var span =
                (Span)Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    SpanKind.Internal,
                    parentSpanId,
                    TraceParams.Default,
                    startEndHandler,
                    timestampConverter);

            span.SetAttribute(
                "MySingleStringAttributeKey",
                AttributeValue.StringAttributeValue("MySingleStringAttributeValue"));
            foreach (var attribute in attributes)
            {
                span.SetAttribute(attribute.Key, attribute.Value);
            }

            interval = TimeSpan.FromMilliseconds(100);
            span.AddEvent(Event.Create(EVENT_DESCRIPTION));
            interval = TimeSpan.FromMilliseconds(200);
            span.AddEvent(EVENT_DESCRIPTION, attributes);
            interval = TimeSpan.FromMilliseconds(300);
            ILink link = Link.FromSpanContext(spanContext);

            span.AddLink(link);
            interval = TimeSpan.FromMilliseconds(400);
            span.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());

            SpanData spanData = ((Span)span).ToSpanData();

            Assert.Equal(spanContext, spanData.Context);
            Assert.Equal(SPAN_NAME, spanData.Name);
            Assert.Equal(parentSpanId, spanData.ParentSpanId);
            Assert.Equal(0, spanData.Attributes.DroppedAttributesCount);
            Assert.Equal(expectedAttributes, spanData.Attributes.AttributeMap);
            Assert.Equal(0, spanData.Events.DroppedEventsCount);
            Assert.Equal(2, spanData.Events.Events.Count());
            Assert.Equal(timestamp.AddDuration(Duration.Create(TimeSpan.FromMilliseconds(100))), spanData.Events.Events.ToList()[0].Timestamp);
            Assert.Equal(Event.Create(EVENT_DESCRIPTION), spanData.Events.Events.ToList()[0].Event);
            Assert.Equal(timestamp.AddDuration(Duration.Create(TimeSpan.FromMilliseconds(200))), spanData.Events.Events.ToList()[1].Timestamp);
            Assert.Equal(Event.Create(EVENT_DESCRIPTION, attributes), spanData.Events.Events.ToList()[1].Event);
            Assert.Equal(0, spanData.Links.DroppedLinksCount);
            Assert.Single(spanData.Links.Links);
            Assert.Equal(link, spanData.Links.Links.First());
            Assert.Equal(timestamp, spanData.StartTimestamp);
            Assert.Equal(Status.Cancelled, spanData.Status);
            Assert.Equal(timestamp.AddDuration(Duration.Create(TimeSpan.FromMilliseconds(400))), spanData.EndTimestamp);

            var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler);
            var spanBase     = span as SpanBase;

            startEndMock.Verify(s => s.OnStart(spanBase), Times.Once);
            startEndMock.Verify(s => s.OnEnd(spanBase), Times.Once);
        }
        public void SetStatus_Error()
        {
            EndSpanOptions endSpanOptions =
                EndSpanOptions.Builder()
                .SetStatus(Status.Cancelled.WithDescription("ThisIsAnError"))
                .Build();

            Assert.Equal(Status.Cancelled.WithDescription("ThisIsAnError"), endSpanOptions.Status);
        }
        public void EndSpanOptions_ToString()
        {
            EndSpanOptions endSpanOptions =
                EndSpanOptions.Builder()
                .SetStatus(Status.Cancelled.WithDescription("ThisIsAnError"))
                .Build();

            Assert.Contains("ThisIsAnError", endSpanOptions.ToString());
        }
示例#7
0
        public void RegisterSpanNamesViaSpanBuilderOption()
        {
            Assert.Contains(REGISTERED_SPAN_NAME, sampleStore.RegisteredSpanNamesForCollection);
            Assert.Equal(1, sampleStore.RegisteredSpanNamesForCollection.Count);

            CreateSampledSpan(NOT_REGISTERED_SPAN_NAME).End(EndSpanOptions.Builder().SetSampleToLocalSpanStore(true).Build());

            Assert.Contains(REGISTERED_SPAN_NAME, sampleStore.RegisteredSpanNamesForCollection);
            Assert.Contains(NOT_REGISTERED_SPAN_NAME, sampleStore.RegisteredSpanNamesForCollection);
            Assert.Equal(2, sampleStore.RegisteredSpanNamesForCollection.Count);
        }
示例#8
0
        public void GetErrorSampledSpans()
        {
            var span = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(
                    SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, CanonicalCode.Cancelled, 0));

            Assert.Single(samples);
            Assert.Contains(span.ToSpanData(), samples);
        }
示例#9
0
        public void GetErrorSampledSpans()
        {
            Span span = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(
                    SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, CanonicalCode.Cancelled, 0));

            Assert.Single(samples);
            Assert.Contains(span.ToSpanData(), samples);
        }
        public void GetErrorSampledSpans()
        {
            Span span = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span.End(EndSpanOptions.Builder().SetStatus(Status.CANCELLED).Build());
            IList <ISpanData> samples =
                sampleStore.GetErrorSampledSpans(
                    SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, CanonicalCode.CANCELLED, 0));

            Assert.Equal(1, samples.Count);
            Assert.True(samples.Contains(span.ToSpanData()));
        }
示例#11
0
 private void AddSpanNameToAllErrorBuckets(String spanName)
 {
     foreach (var code in Enum.GetValues(typeof(CanonicalCode)).Cast <CanonicalCode>())
     {
         if (code != CanonicalCode.Ok)
         {
             var sampledSpan    = CreateSampledSpan(spanName);
             var notSampledSpan = CreateNotSampledSpan(spanName);
             interval += TimeSpan.FromTicks(10);
             sampledSpan.End(EndSpanOptions.Builder().SetStatus(code.ToStatus()).Build());
             notSampledSpan.End(EndSpanOptions.Builder().SetStatus(code.ToStatus()).Build());
         }
     }
 }
示例#12
0
 private void AddSpanNameToAllErrorBuckets(String spanName)
 {
     foreach (CanonicalCode code in Enum.GetValues(typeof(CanonicalCode)).Cast <CanonicalCode>())
     {
         if (code != CanonicalCode.Ok)
         {
             ISpan sampledSpan    = CreateSampledSpan(spanName);
             ISpan notSampledSpan = CreateNotSampledSpan(spanName);
             testClock.AdvanceTime(Duration.Create(0, 1000));
             sampledSpan.End(EndSpanOptions.Builder().SetStatus(code.ToStatus()).Build());
             notSampledSpan.End(EndSpanOptions.Builder().SetStatus(code.ToStatus()).Build());
         }
     }
 }
        public void GetErrorSampledSpans_NullCode_MaxSpansToReturn()
        {
            Span span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span1.End(EndSpanOptions.Builder().SetStatus(Status.CANCELLED).Build());
            Span span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span2.End(EndSpanOptions.Builder().SetStatus(Status.UNKNOWN).Build());
            IList <ISpanData> samples =
                sampleStore.GetErrorSampledSpans(SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, null, 1));

            Assert.Equal(1, samples.Count);
            Assert.True(samples.Contains(span1.ToSpanData()) || samples.Contains(span2.ToSpanData()));
        }
示例#14
0
        public void GetErrorSampledSpans_NullCode_MaxSpansToReturn()
        {
            var span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span1.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            var span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span2.End(EndSpanOptions.Builder().SetStatus(Status.Unknown).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, null, 1));

            Assert.Single(samples);
            Assert.True(samples.Contains(span1.ToSpanData()) || samples.Contains(span2.ToSpanData()));
        }
示例#15
0
        public void GetErrorSampledSpans_NullCode_MaxSpansToReturn()
        {
            Span span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span1.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            Span span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span2.End(EndSpanOptions.Builder().SetStatus(Status.Unknown).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, null, 1));

            Assert.Single(samples);
            Assert.True(samples.Contains(span1.ToSpanData()) || samples.Contains(span2.ToSpanData()));
        }
        public void GetErrorSampledSpans_NullCode()
        {
            Span span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span1.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            Span span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span2.End(EndSpanOptions.Builder().SetStatus(Status.Unknown).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, null, 0));

            Assert.Equal(2, samples.Count());
            Assert.Contains(span1.ToSpanData(), samples);
            Assert.Contains(span2.ToSpanData(), samples);
        }
示例#17
0
        public void GetErrorSampledSpans_MaxSpansToReturn()
        {
            var span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span1.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            // Advance time to allow other spans to be sampled.
            interval += TimeSpan.FromSeconds(5);
            var span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            interval += TimeSpan.FromTicks(10);
            span2.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(
                    SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, CanonicalCode.Cancelled, 1));

            Assert.Single(samples);
            // No order guaranteed so one of the spans should be in the list.
            Assert.True(samples.Contains(span1.ToSpanData()) || samples.Contains(span2.ToSpanData()));
        }
示例#18
0
        public void GetErrorSampledSpans_MaxSpansToReturn()
        {
            Span span1 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span1.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            // Advance time to allow other spans to be sampled.
            testClock.AdvanceTime(Duration.Create(5, 0));
            Span span2 = CreateSampledSpan(REGISTERED_SPAN_NAME) as Span;

            testClock.AdvanceTime(Duration.Create(0, 1000));
            span2.End(EndSpanOptions.Builder().SetStatus(Status.Cancelled).Build());
            var samples =
                sampleStore.GetErrorSampledSpans(
                    SampledSpanStoreErrorFilter.Create(REGISTERED_SPAN_NAME, CanonicalCode.Cancelled, 1));

            Assert.Single(samples);
            // No order guaranteed so one of the spans should be in the list.
            Assert.True(samples.Contains(span1.ToSpanData()) || samples.Contains(span2.ToSpanData()));
        }
示例#19
0
        public void SampleToLocalSpanStore()
        {
            ISpan span =
                Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    parentSpanId,
                    false,
                    TraceParams.DEFAULT,
                    startEndHandler,
                    timestampConverter,
                    testClock);

            span.End(EndSpanOptions.Builder().SetSampleToLocalSpanStore(true).Build());

            Assert.True(((Span)span).IsSampleToLocalSpanStore);
            ISpan span2 =
                Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    parentSpanId,
                    false,
                    TraceParams.DEFAULT,
                    startEndHandler,
                    timestampConverter,
                    testClock);

            span2.End();

            Assert.False(((Span)span2).IsSampleToLocalSpanStore);

            var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler);
            var spanBase     = span as SpanBase;

            startEndMock.Verify(s => s.OnEnd(spanBase), Times.Exactly(1));
            var spanBase2 = span2 as SpanBase;

            startEndMock.Verify(s => s.OnEnd(spanBase2), Times.Exactly(1));
        }
        public void SetStatus_Ok()
        {
            EndSpanOptions endSpanOptions = EndSpanOptions.Builder().SetStatus(Status.Ok).Build();

            Assert.Equal(Status.Ok, endSpanOptions.Status);
        }
示例#21
0
 public override void End(EndSpanOptions options)
 {
 }
示例#22
0
        public void GoSpanData_EndedSpan()
        {
            ISpan span =
                Span.StartSpan(
                    spanContext,
                    recordSpanOptions,
                    SPAN_NAME,
                    parentSpanId,
                    false,
                    TraceParams.DEFAULT,
                    startEndHandler,
                    timestampConverter,
                    testClock);

            span.PutAttribute(
                "MySingleStringAttributeKey",
                AttributeValue.StringAttributeValue("MySingleStringAttributeValue"));
            span.PutAttributes(attributes);
            testClock.AdvanceTime(Duration.Create(0, 100));
            span.AddAnnotation(Annotation.FromDescription(ANNOTATION_DESCRIPTION));
            testClock.AdvanceTime(Duration.Create(0, 100));
            span.AddAnnotation(ANNOTATION_DESCRIPTION, attributes);
            testClock.AdvanceTime(Duration.Create(0, 100));
            IMessageEvent networkEvent =
                MessageEvent.Builder(MessageEventType.RECEIVED, 1).SetUncompressedMessageSize(3).Build();

            span.AddMessageEvent(networkEvent);
            ILink link = Link.FromSpanContext(spanContext, LinkType.CHILD_LINKED_SPAN);

            span.AddLink(link);
            testClock.AdvanceTime(Duration.Create(0, 100));
            span.End(EndSpanOptions.Builder().SetStatus(Status.CANCELLED).Build());

            ISpanData spanData = ((Span)span).ToSpanData();

            Assert.Equal(spanContext, spanData.Context);
            Assert.Equal(SPAN_NAME, spanData.Name);
            Assert.Equal(parentSpanId, spanData.ParentSpanId);
            Assert.False(spanData.HasRemoteParent);
            Assert.Equal(0, spanData.Attributes.DroppedAttributesCount);
            Assert.Equal(expectedAttributes, spanData.Attributes.AttributeMap);
            Assert.Equal(0, spanData.Annotations.DroppedEventsCount);
            Assert.Equal(2, spanData.Annotations.Events.Count);
            Assert.Equal(timestamp.AddNanos(100), spanData.Annotations.Events[0].Timestamp);
            Assert.Equal(Annotation.FromDescription(ANNOTATION_DESCRIPTION), spanData.Annotations.Events[0].Event);
            Assert.Equal(timestamp.AddNanos(200), spanData.Annotations.Events[1].Timestamp);
            Assert.Equal(Annotation.FromDescriptionAndAttributes(ANNOTATION_DESCRIPTION, attributes), spanData.Annotations.Events[1].Event);
            Assert.Equal(0, spanData.MessageEvents.DroppedEventsCount);
            Assert.Equal(1, spanData.MessageEvents.Events.Count);
            Assert.Equal(timestamp.AddNanos(300), spanData.MessageEvents.Events[0].Timestamp);
            Assert.Equal(networkEvent, spanData.MessageEvents.Events[0].Event);
            Assert.Equal(0, spanData.Links.DroppedLinksCount);
            Assert.Equal(1, spanData.Links.Links.Count);
            Assert.Equal(link, spanData.Links.Links[0]);
            Assert.Equal(timestamp, spanData.StartTimestamp);
            Assert.Equal(Status.CANCELLED, spanData.Status);
            Assert.Equal(timestamp.AddNanos(400), spanData.EndTimestamp);

            var startEndMock = Mock.Get <IStartEndHandler>(startEndHandler);
            var spanBase     = span as SpanBase;

            startEndMock.Verify(s => s.OnStart(spanBase), Times.Once);
            startEndMock.Verify(s => s.OnEnd(spanBase), Times.Once);
        }