Add producer and consumer SpanKind (#8), change Unspecified to Internal (#31), default to SpanKind.Internal (#15) (#36)
This commit is contained in:
parent
a068d5326f
commit
3b4d7c22e2
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue