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()));
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #5
0
        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]);
            }
        }
예제 #7
0
 public ProvisionAzure AddTag(string name, string value)
 {
     CommonTags.Add(name, value);
     return(this);
 }
예제 #8
0
 public ProvisionAzure WithDefaults()
 {
     Location = "East US";
     CommonTags.Add("environment", "development");
     return(this);
 }