public void GetTag_GetMetric_ReturnUpdatedValues() { var tags = new CommonTags(); var span = new Span(new SpanContext(42, 41), DateTimeOffset.UtcNow, tags); tags.Environment = "Test"; tags.SamplingLimitDecision = 0.5; // Override the properties span.SetTag(Tags.Env, "Overridden Environment"); span.SetMetric(Metrics.SamplingLimitDecision, 0.75); for (int i = 0; i < 15; i++) { span.SetTag(i.ToString(), i.ToString()); } for (int i = 0; i < 15; i++) { span.SetMetric(i.ToString(), i); } Assert.Equal("Overridden Environment", span.GetTag(Tags.Env)); Assert.Equal(0.75, span.GetMetric(Metrics.SamplingLimitDecision)); for (int i = 0; i < 15; i++) { Assert.Equal(i.ToString(), span.GetTag(i.ToString())); Assert.Equal((double)i, span.GetMetric(i.ToString())); } }
public void GetAll() { // Should be any actual implementation var tags = new CommonTags(); var values = new[] { "v1.0", "Test", "value 1", "value 2" }; tags.Version = values[0]; tags.Environment = values[1]; tags.SetTag("sample.1", values[2]); tags.SetTag("sample.2", values[3]); ValidateTags(tags.GetAllTags(), values); }
public void Serialization() { var tags = new CommonTags(); var span = new Span(new SpanContext(42, 41), DateTimeOffset.UtcNow, tags); // The span has 1 "common" tag and 15 additional tags (and same number of metrics) // Those numbers are picked to test the variable-size header of MessagePack // The header is resized when there are 16 or more elements in the collection // Neither common or additional tags have enough elements, but put together they will cause to use a bigger header tags.Environment = "Test"; tags.SamplingLimitDecision = 0.5; for (int i = 0; i < 15; i++) { span.SetTag(i.ToString(), i.ToString()); } for (int i = 0; i < 15; i++) { span.SetMetric(i.ToString(), i); } var buffer = new byte[0]; var resolver = new FormatterResolverWrapper(SpanFormatterResolver.Instance); MessagePackSerializer.Serialize(ref buffer, 0, span, resolver); var deserializedSpan = MessagePack.MessagePackSerializer.Deserialize <FakeSpan>(buffer); Assert.Equal(16, deserializedSpan.Tags.Count); Assert.Equal(16, deserializedSpan.Metrics.Count); Assert.Equal("Test", deserializedSpan.Tags[Tags.Env]); Assert.Equal(0.5, deserializedSpan.Metrics[Metrics.SamplingLimitDecision]); for (int i = 0; i < 15; i++) { Assert.Equal(i.ToString(), deserializedSpan.Tags[i.ToString()]); Assert.Equal((double)i, deserializedSpan.Metrics[i.ToString()]); } }
public static Span CreateSpan(ISpanContext parentContext) { var spanContext = new SpanContext(parentContext, Mock.Of <ITraceContext>(), serviceName: null); var additionalTags = new CommonTags() { Version = "v1.0", Environment = "Test" }; var start = DateTimeOffset.UtcNow.AddSeconds(-1.5); var span = new Span(spanContext, start, additionalTags); span.ServiceName = "TestService"; span.OperationName = "TestOperation"; span.SetTag("k0", "v0"); span.SetTag("k1", "v1"); span.Finish(TimeSpan.FromSeconds(1.5)); return(span); }
public void SetTag_WillNotCauseDuplicates() { // Initialize common tags var tags = new CommonTags() { Version = "v1.0", Environment = "Test" }; // Initialize custom tags tags.SetTag("sample.1", "Temp 1"); tags.SetTag("sample.2", "Temp 2"); // Try set existing tag tags.SetTag(Tags.Version, "v2.0"); tags.SetTag("sample.2", "Temp 3"); var all = tags.GetAllTags(); var distinctKeys = all.Select(x => x.Key).Distinct().Count(); Assert.Equal(all.Count, distinctKeys); Assert.Single(all, x => x.Key == Tags.Version && x.Value == "v2.0"); Assert.Single(all, x => x.Key == "sample.2" && x.Value == "Temp 3"); }
public void Serialization(bool topLevelSpan) { var tags = new CommonTags(); Span span; if (topLevelSpan) { span = new Span(new SpanContext(42, 41), DateTimeOffset.UtcNow, tags); } else { // Assign a parent to prevent the span from being considered as top-level var traceContext = new TraceContext(Mock.Of <IDatadogTracer>()); var parent = new SpanContext(42, 41); span = new Span(new SpanContext(parent, traceContext, null), DateTimeOffset.UtcNow, tags); } // The span has 1 "common" tag and 15 additional tags (and same number of metrics) // Those numbers are picked to test the variable-size header of MessagePack // The header is resized when there are 16 or more elements in the collection // Neither common or additional tags have enough elements, but put together they will cause to use a bigger header tags.Environment = "Test"; tags.SamplingLimitDecision = 0.5; // Override the properties span.SetTag(Tags.Env, "Overridden Environment"); span.SetMetric(Metrics.SamplingLimitDecision, 0.75); for (int i = 0; i < 15; i++) { span.SetTag(i.ToString(), i.ToString()); } for (int i = 0; i < 15; i++) { span.SetMetric(i.ToString(), i); } var buffer = new byte[0]; // use vendored MessagePack to serialize var resolver = SpanFormatterResolver.Instance; Vendors.MessagePack.MessagePackSerializer.Serialize(ref buffer, 0, span, resolver); // use nuget MessagePack to deserialize var deserializedSpan = global::MessagePack.MessagePackSerializer.Deserialize <MockSpan>(buffer); // For top-level spans, there is one tag added during serialization Assert.Equal(topLevelSpan ? 17 : 16, deserializedSpan.Tags.Count); // For top-level spans, there is one metric added during serialization Assert.Equal(topLevelSpan ? 17 : 16, deserializedSpan.Metrics.Count); Assert.Equal("Overridden Environment", deserializedSpan.Tags[Tags.Env]); Assert.Equal(0.75, deserializedSpan.Metrics[Metrics.SamplingLimitDecision]); for (int i = 0; i < 15; i++) { Assert.Equal(i.ToString(), deserializedSpan.Tags[i.ToString()]); Assert.Equal((double)i, deserializedSpan.Metrics[i.ToString()]); } if (topLevelSpan) { Assert.Equal(Tracer.RuntimeId, deserializedSpan.Tags[Tags.RuntimeId]); Assert.Equal(1.0, deserializedSpan.Metrics[Metrics.TopLevelSpan]); } }
public ProvisionAzure AddTag(string name, string value) { CommonTags.Add(name, value); return(this); }
public ProvisionAzure WithDefaults() { Location = "East US"; CommonTags.Add("environment", "development"); return(this); }