Esempio n. 1
0
        public void Timestamp(DateTime value, PrecisionResolutionStrategy resolutionStrategy)
        {
            if (value != null && value.Kind != DateTimeKind.Utc)
            {
                throw new ArgumentException("Timestamps must be specified as UTC", nameof(value));
            }

            Timestamp(value - UnixEpoch, resolutionStrategy);
        }
Esempio n. 2
0
        public void Timestamp(long nanoseconds, PrecisionResolutionStrategy resolutionStrategy)
        {
            var nanosecondsAbovePrecision = nanoseconds % (long)Precision;

            if (nanosecondsAbovePrecision != 0)
            {
                switch (resolutionStrategy)
                {
                case PrecisionResolutionStrategy.Error:
                    throw new ArgumentOutOfRangeException(nameof(nanoseconds));

                case PrecisionResolutionStrategy.Floor:
                    nanoseconds -= nanosecondsAbovePrecision;
                    break;

                case PrecisionResolutionStrategy.Ceiling:
                    nanoseconds += (long)Precision - nanosecondsAbovePrecision;
                    break;

                case PrecisionResolutionStrategy.Round:
                    if (nanosecondsAbovePrecision < (long)Precision / 2)
                    {
                        Timestamp(nanoseconds, PrecisionResolutionStrategy.Floor);
                    }
                    else
                    {
                        Timestamp(nanoseconds, PrecisionResolutionStrategy.Ceiling);
                    }
                    return;

                default:
                    throw new ArgumentOutOfRangeException(nameof(resolutionStrategy));
                }
            }

            switch (position)
            {
            case LinePosition.FieldWritten:
                textWriter.Write(" ");
                break;

            case LinePosition.NothingWritten:
                throw InvalidPositionException("Cannot write timestamp as no measurement name written.");

            default:
                throw InvalidPositionException("Cannot write timestamp as no field written for current measurement.");
            }

            var timestamp = nanoseconds / (long)Precision;

            textWriter.Write(timestamp.ToString(CultureInfo.InvariantCulture));

            position = LinePosition.TimestampWritten;
        }
Esempio n. 3
0
        public LineProtocolWriter(Precision precision, PrecisionResolutionStrategy defaultResolutionStrategy = PrecisionResolutionStrategy.Error)
        {
            if (!Enum.IsDefined(typeof(Precision), precision))
            {
                throw new ArgumentOutOfRangeException(nameof(precision));
            }

            if (!Enum.IsDefined(typeof(PrecisionResolutionStrategy), defaultResolutionStrategy))
            {
                throw new ArgumentOutOfRangeException(nameof(defaultResolutionStrategy));
            }

            this.Precision = precision;
            this.defaultResolutionStrategy = defaultResolutionStrategy;
            this.textWriter = new StringWriter();
        }
Esempio n. 4
0
 public void Timestamp(DateTimeOffset value, PrecisionResolutionStrategy resolutionStrategy)
 {
     Timestamp(value.UtcDateTime, resolutionStrategy);
 }
Esempio n. 5
0
 public void Timestamp(TimeSpan value, PrecisionResolutionStrategy resolutionStrategy)
 {
     Timestamp(value.Ticks * 100, resolutionStrategy);
 }