Add producer and consumer SpanKind (#8), change Unspecified to Internal (#31), default to SpanKind.Internal (#15) (#36)

This commit is contained in:
Tim Wegner 2019-05-15 13:42:35 -07:00 committed by Sergey Kanzhelev
parent a068d5326f
commit 3b4d7c22e2
13 changed files with 192 additions and 67 deletions

View File

@ -41,7 +41,7 @@ namespace OpenTelemetry.Trace
/// <param name="spanName">Span name.</param>
/// <param name="spanKind">Span kind.</param>
/// <returns>Span builder for the span with the given name.</returns>
ISpanBuilder SpanBuilder(string spanName, SpanKind spanKind = SpanKind.Unspecified);
ISpanBuilder SpanBuilder(string spanName, SpanKind spanKind = SpanKind.Internal);
/// <summary>
/// Gets the span builder for the span with the given name and parent.
@ -50,7 +50,7 @@ namespace OpenTelemetry.Trace
/// <param name="spanKind">Span kind.</param>
/// <param name="parent">Parent of the span.</param>
/// <returns>Span builder for the span with the given name and specified parent.</returns>
ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpan parent = null);
ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpan parent = null);
/// <summary>
/// Gets the span builder for the span with the give name and remote parent context.
@ -59,6 +59,6 @@ namespace OpenTelemetry.Trace
/// <param name="spanKind">Span kind.</param>
/// <param name="remoteParentSpanContext">Remote parent context extracted from the wire.</param>
/// <returns>Span builder for the span with the given name and specified parent span context.</returns>
ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpanContext remoteParentSpanContext = null);
ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpanContext remoteParentSpanContext = null);
}
}

View File

@ -24,7 +24,7 @@ namespace OpenTelemetry.Trace
/// <summary>
/// Span kind was not specified.
/// </summary>
Unspecified = 0,
Internal = 0,
/// <summary>
/// Server span represents request incoming from external component.
@ -35,5 +35,19 @@ namespace OpenTelemetry.Trace
/// Client span represents outgoing request to the external component.
/// </summary>
Client = 2,
/// <summary>
/// Producer span represents output provided to external components. Unlike client and
/// server, there is no direct critical path latency relationship between producer and consumer
/// spans.
/// </summary>
Producer = 3,
/// <summary>
/// Consumer span represents output received from an external component. Unlike client and
/// server, there is no direct critical path latency relationship between producer and consumer
/// spans.
/// </summary>
Consumer = 4,
}
}

View File

@ -214,7 +214,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Implementation
// BUILDING resulting telemetry
OperationTelemetry result;
if (resultKind == SpanKind.Client)
if (resultKind == SpanKind.Client || resultKind == SpanKind.Producer)
{
var resultD = new DependencyTelemetry();
resultD.ResultCode = resultCode;
@ -288,7 +288,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Implementation
resultKind = span.Kind;
// TODO: Should this be a part of generic logic?
if (resultKind == SpanKind.Unspecified)
if (resultKind == SpanKind.Internal)
{
if (span.HasRemoteParent.HasValue && span.HasRemoteParent.Value)
{
@ -341,13 +341,23 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Implementation
{
var kind = spanKindAttr.Match((s) => s, null, null, null, null);
if (kind == "server")
switch (kind.ToLower(CultureInfo.InvariantCulture))
{
resultKind = SpanKind.Server;
}
else
{
resultKind = SpanKind.Client;
case "server":
resultKind = SpanKind.Server;
break;
case "client":
resultKind = SpanKind.Client;
break;
case "producer":
resultKind = SpanKind.Producer;
break;
case "consumer":
resultKind = SpanKind.Consumer;
break;
default:
resultKind = SpanKind.Internal;
break;
}
}
}

View File

@ -36,7 +36,10 @@ namespace OpenTelemetry.Exporter.Ocagent.Implementation
return new Span
{
Name = new TruncatableString { Value = spanData.Name },
Kind = spanData.Kind == SpanKind.Client ? Span.Types.SpanKind.Client : Span.Types.SpanKind.Server,
// TODO: Utilize new Span.Types.SpanKind below when updated protos are incorporated
Kind = spanData.Kind == SpanKind.Client || spanData.Kind == SpanKind.Producer ? Span.Types.SpanKind.Client : Span.Types.SpanKind.Server,
TraceId = ByteString.CopyFrom(spanData.Context.TraceId.Bytes),
SpanId = ByteString.CopyFrom(spanData.Context.SpanId.Bytes),
ParentSpanId =

View File

@ -146,21 +146,43 @@ namespace OpenTelemetry.Exporter.Zipkin.Implementation
private ZipkinSpanKind ToSpanKind(ISpanData spanData)
{
if (spanData.Kind == SpanKind.Server)
{
return ZipkinSpanKind.SERVER;
}
else if (spanData.Kind == SpanKind.Client)
{
if (spanData.HasRemoteParent.HasValue && spanData.HasRemoteParent.Value)
{
return ZipkinSpanKind.SERVER;
}
var zipkinSpanKind = ZipkinSpanKind.CLIENT;
return ZipkinSpanKind.CLIENT;
switch (spanData.Kind)
{
case SpanKind.Server:
zipkinSpanKind = ZipkinSpanKind.SERVER;
break;
case SpanKind.Client:
if (spanData.HasRemoteParent.HasValue && spanData.HasRemoteParent.Value)
{
zipkinSpanKind = ZipkinSpanKind.SERVER;
}
else
{
zipkinSpanKind = ZipkinSpanKind.CLIENT;
}
break;
case SpanKind.Consumer:
zipkinSpanKind = ZipkinSpanKind.CONSUMER;
break;
case SpanKind.Producer:
if (spanData.HasRemoteParent.HasValue && spanData.HasRemoteParent.Value)
{
zipkinSpanKind = ZipkinSpanKind.CONSUMER;
}
else
{
zipkinSpanKind = ZipkinSpanKind.PRODUCER;
}
break;
default:
break;
}
return ZipkinSpanKind.CLIENT;
return zipkinSpanKind;
}
private async Task SendSpansAsync(IEnumerable<ZipkinSpan> spans)

View File

@ -22,12 +22,12 @@ namespace OpenTelemetry.Trace
{
}
public override ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpan parent = null)
public override ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpan parent = null)
{
return NoopSpanBuilder.CreateWithParent(spanName, spanKind, parent);
}
public override ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpanContext remoteParentSpanContext = null)
public override ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpanContext remoteParentSpanContext = null)
{
return NoopSpanBuilder.CreateWithRemoteParent(spanName, spanKind, remoteParentSpanContext);
}

View File

@ -428,7 +428,7 @@ namespace OpenTelemetry.Trace
linksSpanData,
null, // Not supported yet.
this.hasBeenEnded ? this.StatusWithDefault : null,
this.Kind.HasValue ? this.Kind.Value : SpanKind.Client,
this.Kind ?? SpanKind.Internal,
this.hasBeenEnded ? Timestamp.FromDateTimeOffset(this.endTime) : null);
}

View File

@ -27,12 +27,12 @@ namespace OpenTelemetry.Trace
this.spanBuilderOptions = new SpanBuilderOptions(randomGenerator, startEndHandler, traceConfig);
}
public override ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpan parent = null)
public override ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpan parent = null)
{
return Trace.SpanBuilder.CreateWithParent(spanName, spanKind, parent, this.spanBuilderOptions);
}
public override ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpanContext remoteParentSpanContext = null)
public override ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpanContext remoteParentSpanContext = null)
{
return Trace.SpanBuilder.CreateWithRemoteParent(spanName, spanKind, remoteParentSpanContext, this.spanBuilderOptions);
}

View File

@ -53,13 +53,13 @@ namespace OpenTelemetry.Trace
// public final Runnable withSpan(Span span, Runnable runnable)
// public final <C> Callable<C> withSpan(Span span, final Callable<C> callable)
public ISpanBuilder SpanBuilder(string spanName, SpanKind spanKind = SpanKind.Unspecified)
public ISpanBuilder SpanBuilder(string spanName, SpanKind spanKind = SpanKind.Internal)
{
return this.SpanBuilderWithExplicitParent(spanName, spanKind, CurrentSpanUtils.CurrentSpan);
}
public abstract ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpan parent = null);
public abstract ISpanBuilder SpanBuilderWithExplicitParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpan parent = null);
public abstract ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Unspecified, ISpanContext remoteParentSpanContext = null);
public abstract ISpanBuilder SpanBuilderWithRemoteParent(string spanName, SpanKind spanKind = SpanKind.Internal, ISpanContext remoteParentSpanContext = null);
}
}

View File

@ -254,7 +254,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksDependency()
public void OpenTelemetryTelemetryConverterTests_TracksClientDependency()
{
// ARRANGE
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
@ -287,6 +287,40 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
Assert.True(string.IsNullOrEmpty(dependency.Type));
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksProducerDependency()
{
// ARRANGE
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Producer;
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
// ACT
var sentItems = this.ConvertSpan(span);
// ASSERT
Assert.Single(sentItems);
Assert.True(sentItems.Single() is DependencyTelemetry);
var dependency = sentItems.OfType<DependencyTelemetry>().Single();
Assert.Equal("spanName", dependency.Name);
Assert.Equal(nowDateTimeOffset.Subtract(TimeSpan.FromSeconds(1)), dependency.Timestamp);
Assert.Equal(1, dependency.Duration.TotalSeconds);
Assert.Equal(TestTraceId, dependency.Context.Operation.Id);
Assert.Null(dependency.Context.Operation.ParentId);
Assert.Equal($"|{TestTraceId}.{TestSpanId}.", dependency.Id);
Assert.True(string.IsNullOrEmpty(dependency.ResultCode));
Assert.False(dependency.Success.HasValue);
// Assert.Equal("lf_unspecified-oc:0.0.0", dependency.Context.GetInternalContext().SdkVersion);
Assert.True(string.IsNullOrEmpty(dependency.Type));
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksDependencyWithTracestate()
{
@ -493,7 +527,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnSpanKindAttribute()
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnServerSpanKindAttribute()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Client;
@ -506,6 +540,48 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
Assert.True(sentItems.Single() is RequestTelemetry);
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnClientSpanKindAttribute()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Client;
attributes = Attributes.Create(new Dictionary<string, IAttributeValue>() { { "span.kind", AttributeValue.StringAttributeValue("client") } }, 0);
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);
Assert.True(sentItems.Single() is DependencyTelemetry);
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnProducerSpanKindAttribute()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Client;
attributes = Attributes.Create(new Dictionary<string, IAttributeValue>() { { "span.kind", AttributeValue.StringAttributeValue("producer") } }, 0);
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);
Assert.True(sentItems.Single() is DependencyTelemetry);
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnConsumerSpanKindAttribute()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Client;
attributes = Attributes.Create(new Dictionary<string, IAttributeValue>() { { "span.kind", AttributeValue.StringAttributeValue("consumer") } }, 0);
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);
Assert.True(sentItems.Single() is RequestTelemetry);
}
[Fact]
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnSpanKindProperty()
{
@ -537,7 +613,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
public void OpenTelemetryTelemetryConverterTests_TracksDependenciesBasedOnSpanKindAttribute()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Unspecified;
kind = SpanKind.Internal;
attributes = Attributes.Create(new Dictionary<string, IAttributeValue>() { { "span.kind", AttributeValue.StringAttributeValue("client") } }, 0);
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
@ -550,7 +626,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
public void OpenTelemetryTelemetryConverterTests_TracksRequestBasedOnSameProcessAsParentFlag()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Unspecified;
kind = SpanKind.Internal;
hasRemoteParent = true;
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);
@ -562,7 +638,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
public void OpenTelemetryTelemetryConverterTests_TracksDepednencyBasedOnSameProcessAsParentFlag()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Unspecified;
kind = SpanKind.Internal;
hasRemoteParent = false;
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);
@ -574,7 +650,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
public void OpenTelemetryTelemetryConverterTests_TracksDepednencyBasedOnSameProcessAsParentFlagNotSet()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Unspecified;
kind = SpanKind.Internal;
hasRemoteParent = null;
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
@ -600,7 +676,7 @@ namespace OpenTelemetry.Exporter.ApplicationInsights.Tests
public void OpenTelemetryTelemetryConverterTests_TracksDependencyWithoutKind()
{
this.GetDefaults(out var context, out var parentSpanId, out var hasRemoteParent, out var name, out var startTimestamp, out var attributes, out var annotations, out var messageOrNetworkEvents, out var links, out var childSpanCount, out var status, out var kind, out var endTimestamp);
kind = SpanKind.Unspecified;
kind = SpanKind.Internal;
var span = SpanData.Create(context, parentSpanId, hasRemoteParent, name, startTimestamp, attributes, annotations, messageOrNetworkEvents, links, childSpanCount, status, kind, endTimestamp);
var sentItems = this.ConvertSpan(span);

View File

@ -24,7 +24,7 @@ namespace OpenTelemetry.Trace.Test
public class SpanBuilderBaseTest
{
private ITracer tracer;
private Mock<SpanBuilderBase> spanBuilder = new Mock<SpanBuilderBase>(SpanKind.Unspecified);
private Mock<SpanBuilderBase> spanBuilder = new Mock<SpanBuilderBase>(SpanKind.Internal);
private Mock<SpanBase> span = new Mock<SpanBase>();
public SpanBuilderBaseTest()

View File

@ -48,7 +48,7 @@ namespace OpenTelemetry.Trace.Test
public void StartSpanNullParent()
{
ISpan span =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions).StartSpan();
Assert.True(span.Context.IsValid);
Assert.True(span.Options.HasFlag(SpanOptions.RecordEvents));
Assert.True(span.Context.TraceOptions.IsSampled);
@ -63,7 +63,7 @@ namespace OpenTelemetry.Trace.Test
public void StartSpanNullParentWithRecordEvents()
{
ISpan span =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.SetRecordEvents(true)
.StartSpan();
@ -79,7 +79,7 @@ namespace OpenTelemetry.Trace.Test
public void StartSpanNullParentNoRecordOptions()
{
ISpan span =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(span.Context.IsValid);
@ -91,13 +91,13 @@ namespace OpenTelemetry.Trace.Test
public void StartChildSpan()
{
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions).StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.True(rootSpan.Options.HasFlag(SpanOptions.RecordEvents));
Assert.True(rootSpan.Context.TraceOptions.IsSampled);
Assert.False(((Span)rootSpan).ToSpanData().HasRemoteParent);
ISpan childSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, rootSpan, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, rootSpan, spanBuilderOptions).StartSpan();
Assert.True(childSpan.Context.IsValid);
Assert.Equal(rootSpan.Context.TraceId, childSpan.Context.TraceId);
Assert.Equal(rootSpan.Context.SpanId, ((Span)childSpan).ToSpanData().ParentSpanId);
@ -109,7 +109,7 @@ namespace OpenTelemetry.Trace.Test
public void StartRemoteSpan_NullParent()
{
ISpan span =
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions).StartSpan();
Assert.True(span.Context.IsValid);
Assert.True(span.Options.HasFlag(SpanOptions.RecordEvents));
Assert.True(span.Context.TraceOptions.IsSampled);
@ -122,7 +122,7 @@ namespace OpenTelemetry.Trace.Test
public void StartRemoteSpanInvalidParent()
{
ISpan span =
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Unspecified, SpanContext.Invalid, spanBuilderOptions)
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Internal, SpanContext.Invalid, spanBuilderOptions)
.StartSpan();
Assert.True(span.Context.IsValid);
Assert.True(span.Options.HasFlag(SpanOptions.RecordEvents));
@ -141,7 +141,7 @@ namespace OpenTelemetry.Trace.Test
SpanId.GenerateRandomId(randomHandler),
TraceOptions.Default, Tracestate.Empty);
ISpan span =
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Unspecified, spanContext, spanBuilderOptions)
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Internal, spanContext, spanBuilderOptions)
.StartSpan();
Assert.True(span.Context.IsValid);
Assert.Equal(spanContext.TraceId, span.Context.TraceId);
@ -156,7 +156,7 @@ namespace OpenTelemetry.Trace.Test
{
// Apply given sampler before default sampler for root spans.
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(rootSpan.Context.IsValid);
@ -168,7 +168,7 @@ namespace OpenTelemetry.Trace.Test
{
// Apply default sampler (always true in the tests) for root spans.
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions).StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.True(rootSpan.Context.TraceOptions.IsSampled);
}
@ -177,14 +177,14 @@ namespace OpenTelemetry.Trace.Test
public void StartRemoteChildSpan_WithSpecifiedSampler()
{
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.AlwaysSample)
.StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.True(rootSpan.Context.TraceOptions.IsSampled);
// Apply given sampler before default sampler for spans with remote parent.
ISpan childSpan =
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Unspecified, rootSpan.Context, spanBuilderOptions)
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Internal, rootSpan.Context, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(childSpan.Context.IsValid);
@ -196,14 +196,14 @@ namespace OpenTelemetry.Trace.Test
public void StartRemoteChildSpan_WithoutSpecifiedSampler()
{
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.False(rootSpan.Context.TraceOptions.IsSampled);
// Apply default sampler (always true in the tests) for spans with remote parent.
ISpan childSpan =
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Unspecified, rootSpan.Context, spanBuilderOptions)
SpanBuilder.CreateWithRemoteParent(SPAN_NAME, SpanKind.Internal, rootSpan.Context, spanBuilderOptions)
.StartSpan();
Assert.True(childSpan.Context.IsValid);
Assert.Equal(rootSpan.Context.TraceId, childSpan.Context.TraceId);
@ -214,14 +214,14 @@ namespace OpenTelemetry.Trace.Test
public void StartChildSpan_WithSpecifiedSampler()
{
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.AlwaysSample)
.StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.True(rootSpan.Context.TraceOptions.IsSampled);
// Apply the given sampler for child spans.
ISpan childSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, rootSpan, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, rootSpan, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(childSpan.Context.IsValid);
@ -233,14 +233,14 @@ namespace OpenTelemetry.Trace.Test
public void StartChildSpan_WithoutSpecifiedSampler()
{
ISpan rootSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.True(rootSpan.Context.IsValid);
Assert.False(rootSpan.Context.TraceOptions.IsSampled);
// Don't apply the default sampler (always true) for child spans.
ISpan childSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, rootSpan, spanBuilderOptions).StartSpan();
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, rootSpan, spanBuilderOptions).StartSpan();
Assert.True(childSpan.Context.IsValid);
Assert.Equal(rootSpan.Context.TraceId, childSpan.Context.TraceId);
Assert.False(childSpan.Context.TraceOptions.IsSampled);
@ -250,18 +250,18 @@ namespace OpenTelemetry.Trace.Test
public void StartChildSpan_SampledLinkedParent()
{
ISpan rootSpanUnsampled =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.NeverSample)
.StartSpan();
Assert.False(rootSpanUnsampled.Context.TraceOptions.IsSampled);
ISpan rootSpanSampled =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, null, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, null, spanBuilderOptions)
.SetSampler(Samplers.AlwaysSample)
.StartSpan();
Assert.True(rootSpanSampled.Context.TraceOptions.IsSampled);
// Sampled because the linked parent is sampled.
ISpan childSpan =
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Unspecified, rootSpanUnsampled, spanBuilderOptions)
SpanBuilder.CreateWithParent(SPAN_NAME, SpanKind.Internal, rootSpanUnsampled, spanBuilderOptions)
.SetParentLinks(new List<ISpan>() { rootSpanSampled })
.StartSpan();
Assert.True(childSpan.Context.IsValid);
@ -301,7 +301,7 @@ namespace OpenTelemetry.Trace.Test
ISpan childSpan =
SpanBuilder.CreateWithRemoteParent(
SPAN_NAME,
SpanKind.Unspecified,
SpanKind.Internal,
SpanContext.Create(
traceId,
SpanId.GenerateRandomId(randomHandler),
@ -319,7 +319,7 @@ namespace OpenTelemetry.Trace.Test
childSpan =
SpanBuilder.CreateWithRemoteParent(
SPAN_NAME,
SpanKind.Unspecified,
SpanKind.Internal,
SpanContext.Create(
traceId,
SpanId.GenerateRandomId(randomHandler),

View File

@ -27,7 +27,7 @@ namespace OpenTelemetry.Trace.Test
private static readonly ITracer noopTracer = TracerBase.NoopTracer;
private static readonly string SPAN_NAME = "MySpanName";
private TracerBase tracer = Mock.Of<TracerBase>();
private SpanBuilderBase spanBuilder = new Mock<SpanBuilderBase>(SpanKind.Unspecified).Object;
private SpanBuilderBase spanBuilder = new Mock<SpanBuilderBase>(SpanKind.Internal).Object;
private SpanBase span = Mock.Of<SpanBase>();
public TracerBaseTest()
@ -155,7 +155,7 @@ namespace OpenTelemetry.Trace.Test
try
{
Assert.Same(span, tracer.CurrentSpan);
Mock.Get(tracer).Setup((tracer) => tracer.SpanBuilderWithExplicitParent(SPAN_NAME, SpanKind.Unspecified, span)).Returns(spanBuilder);
Mock.Get(tracer).Setup((tracer) => tracer.SpanBuilderWithExplicitParent(SPAN_NAME, SpanKind.Internal, span)).Returns(spanBuilder);
Assert.Same(spanBuilder, tracer.SpanBuilder(SPAN_NAME));
}
finally
@ -171,7 +171,7 @@ namespace OpenTelemetry.Trace.Test
try
{
Assert.Same(BlankSpan.Instance, tracer.CurrentSpan);
Mock.Get(tracer).Setup((t) => t.SpanBuilderWithExplicitParent(SPAN_NAME, SpanKind.Unspecified, BlankSpan.Instance)).Returns(spanBuilder);
Mock.Get(tracer).Setup((t) => t.SpanBuilderWithExplicitParent(SPAN_NAME, SpanKind.Internal, BlankSpan.Instance)).Returns(spanBuilder);
Assert.Same(spanBuilder, tracer.SpanBuilder(SPAN_NAME));
}
finally