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); }
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; }
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(); }
public void Timestamp(DateTimeOffset value, PrecisionResolutionStrategy resolutionStrategy) { Timestamp(value.UtcDateTime, resolutionStrategy); }
public void Timestamp(TimeSpan value, PrecisionResolutionStrategy resolutionStrategy) { Timestamp(value.Ticks * 100, resolutionStrategy); }