public void EscapesCommasInKeys()
        {
            var target = new byte[9];
            var tags   = new Dictionary <string, string> {
                ["f,o"] = "abc"
            };

            ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written);
            Assert.Equal(9, written);
            Assert.Equal(@",f\,o=abc", Encoding.UTF8.GetString(target));
        }
        public void WritesTwoKeyValuePairs()
        {
            var target = new byte[16];
            var tags   = new Dictionary <string, string> {
                ["foo"] = "bar", ["wib"] = "qux"
            };

            ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written);
            Assert.Equal(16, written);
            Assert.Equal(",foo=bar,wib=qux", Encoding.UTF8.GetString(target));
        }
        public void EscapesEqualSignsInValues()
        {
            var target = new byte[9];
            var tags   = new Dictionary <string, string> {
                ["foo"] = "a=b"
            };

            ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written);
            Assert.Equal(9, written);
            Assert.Equal(@",foo=a\=b", Encoding.UTF8.GetString(target));
        }
        public void WritesSimpleKeyValuePair()
        {
            var target = new byte[8];
            var tags   = new Dictionary <string, string> {
                ["foo"] = "bar"
            };

            ActivityWriter.TryWriteTags(target.AsSpan(), tags, out int written);
            Assert.Equal(8, written);
            Assert.Equal(",foo=bar", Encoding.UTF8.GetString(target));
        }
Exemplo n.º 5
0
        public bool Write(object?args, Activity?activity, Span <byte> span, out int bytesWritten)
        {
            if (span.Length == 0)
            {
                goto fail;
            }

            bytesWritten = 0;

            for (int i = 0; i < _tagCount; i++)
            {
                if (span.Length == 0)
                {
                    goto fail;
                }

                if (!_tagFormatters[i].TryWrite(args !, span, true, out int tagWritten))
                {
                    goto fail;
                }

                span          = span.Slice(tagWritten);
                bytesWritten += tagWritten;
            }

            if (activity != null)
            {
                if (!ActivityWriter.TryWriteTags(span, activity.Tags, out int tagsWritten))
                {
                    goto fail;
                }

                bytesWritten += tagsWritten;
            }

            span[0] = Space;
            span    = span.Slice(1);
            bytesWritten++;

            bool comma = false;

            for (int i = 0; i < _fieldCount; i++)
            {
                if (span.Length == 0)
                {
                    goto fail;
                }

                if (!_fieldFormatters[i].TryWrite(args !, span, comma, out int fieldWritten))
                {
                    goto fail;
                }

                span          = span.Slice(fieldWritten);
                bytesWritten += fieldWritten;
                comma         = comma || fieldWritten > 0;
            }

            if (activity != null && activity.Duration.Ticks > 0L)
            {
                if (!ActivityWriter.TryWriteDuration(span, activity.Duration, comma, out int durationWritten))
                {
                    goto fail;
                }

                bytesWritten += durationWritten;
            }

            return(true);

fail:
            bytesWritten = 0;
            return(false);
        }