/// <inheritdoc />
        public void Write(TextWriter textWriter, GraphitePoint point, bool writeTimestamp = true)
        {
            if (textWriter == null)
            {
                throw new ArgumentNullException(nameof(textWriter));
            }

            var hasPrevious       = false;
            var measurementWriter = new StringWriter();

            measurementWriter.Write(_prefix);

            var tagsDictionary = point.Tags.ToDictionary(GraphiteSyntax.EscapeName);

            if (tagsDictionary.TryGetValue("mtype", out var metricType) && !string.IsNullOrWhiteSpace(metricType))
            {
                measurementWriter.Write(metricType);
                hasPrevious = true;
            }

            if (hasPrevious)
            {
                measurementWriter.Write(".");
            }

            measurementWriter.Write(GraphiteSyntax.EscapeName(point.Measurement, true));

            var tags = tagsDictionary.Where(tag => !ExcludeTags.Contains(tag.Key));

            foreach (var tag in tags)
            {
                measurementWriter.Write('.');
                measurementWriter.Write(GraphiteSyntax.EscapeName(tag.Key));
                measurementWriter.Write('.');
                measurementWriter.Write(tag.Value);
            }

            measurementWriter.Write('.');

            var prefix = measurementWriter.ToString();

            var utcTimestamp = point.UtcTimestamp ?? DateTime.UtcNow;

            foreach (var f in point.Fields)
            {
                textWriter.Write(prefix);
                textWriter.Write(GraphiteSyntax.EscapeName(f.Key));

                textWriter.Write(' ');
                textWriter.Write(GraphiteSyntax.FormatValue(f.Value));

                textWriter.Write(' ');
                textWriter.Write(GraphiteSyntax.FormatTimestamp(utcTimestamp));

                textWriter.Write('\n');
            }
        }
Пример #2
0
        public void Can_format_timestamp()
        {
            var dateTime = new DateTime(2017, 01, 01, 1, 1, 1, DateTimeKind.Utc);

            GraphiteSyntax.FormatTimestamp(dateTime).Should().Be("1483232461");
        }