diff --git a/InfluxData.Net.Common/Constants/TimeUnit.cs b/InfluxData.Net.Common/Constants/TimeUnit.cs
index e6a00fa..71835d1 100644
--- a/InfluxData.Net.Common/Constants/TimeUnit.cs
+++ b/InfluxData.Net.Common/Constants/TimeUnit.cs
@@ -3,20 +3,61 @@ namespace InfluxData.Net.Common.Constants
///
/// Time unit used in writing data points or parsing series.
///
- public static class TimeUnit
+ ///
+
+ public enum TimeUnit
+ {
+ Nanoseconds = 0,
+ Ticks = 1,
+ Microseconds = 2,
+ Milliseconds = 3,
+ Seconds = 4,
+ Minutes = 5,
+ Hours = 6
+ }
+
+ public static class TimeUnitExtensions
{
- // NOTE: currently not supported
- //public const string Nanoseconds = "n";
+ public static string ToEpochFormat(this TimeUnit tu)
+ {
+ switch (tu)
+ {
+ case TimeUnit.Nanoseconds:
+ return "ns";
+ case TimeUnit.Ticks:
+ return "ns";
+ case TimeUnit.Microseconds:
+ return "u";
+ case TimeUnit.Milliseconds:
+ return "ms";
+ case TimeUnit.Seconds:
+ return "s";
+ case TimeUnit.Minutes:
+ return "h";
+ case TimeUnit.Hours:
+ return "h";
+ default:
+ return "ns";
+ }
+ }
+ }
- // NOTE: currently not supported
- //public const string Microseconds = "u";
+ //public static class TimeUnit
+ //{
+ // // NOTE: currently not supported
+ // //public const string Nanoseconds = "n";
- public const string Milliseconds = "ms";
+ // // NOTE: currently not supported
+ // //public const string Microseconds = "u";
- public const string Seconds = "s";
+ // public const string Ticks = "ticks";
- public const string Minutes = "m";
+ // public const string Milliseconds = "ms";
- public const string Hours = "h";
- }
+ // public const string Seconds = "s";
+
+ // public const string Minutes = "m";
+
+ // public const string Hours = "h";
+ //}
}
\ No newline at end of file
diff --git a/InfluxData.Net.Common/Helpers/ObjectExtensions.cs b/InfluxData.Net.Common/Helpers/ObjectExtensions.cs
index 214ee25..1915a82 100644
--- a/InfluxData.Net.Common/Helpers/ObjectExtensions.cs
+++ b/InfluxData.Net.Common/Helpers/ObjectExtensions.cs
@@ -28,13 +28,22 @@ public static string ToJson(this object @object)
/// DateTime to convert.
/// Precision (optional, defaults to milliseconds)
/// Unix-style timestamp in milliseconds.
- public static long ToUnixTime(this DateTime date, string precision = TimeUnit.Milliseconds)
+ public static long ToUnixTime(this DateTime date, TimeUnit precision = TimeUnit.Ticks)
{
var span = date - _epoch;
double fractionalSpan;
switch (precision)
{
+ case TimeUnit.Nanoseconds:
+ fractionalSpan = span.Ticks * 100;
+ break;
+ case TimeUnit.Ticks:
+ fractionalSpan = span.Ticks * 100;
+ break;
+ case TimeUnit.Microseconds:
+ fractionalSpan = span.Ticks / 10;
+ break;
case TimeUnit.Milliseconds:
fractionalSpan = span.TotalMilliseconds;
break;
@@ -61,10 +70,12 @@ public static long ToUnixTime(this DateTime date, string precision = TimeUnit.Mi
/// The unix time (expects milliseconds by default).
/// Precision (optional, defaults to milliseconds)
/// DateTime object.
- public static DateTime FromUnixTime(this long unixTime, string precision = TimeUnit.Milliseconds)
+ public static DateTime FromUnixTime(this long unixTime, TimeUnit precision = TimeUnit.Ticks)
{
switch (precision)
{
+ case TimeUnit.Ticks:
+ return _epoch.AddTicks(unixTime);
case TimeUnit.Milliseconds:
return _epoch.AddMilliseconds(unixTime);
case TimeUnit.Seconds:
diff --git a/InfluxData.Net.InfluxDb/ClientModules/BasicClientModule.cs b/InfluxData.Net.InfluxDb/ClientModules/BasicClientModule.cs
index 7221ac3..dc1634f 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/BasicClientModule.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/BasicClientModule.cs
@@ -51,14 +51,14 @@ public BasicClientModule(IInfluxDbRequestClient requestClient, IBasicResponsePar
_basicResponseParser = basicResponseParser;
}
- public virtual async Task WriteAsync(Point point, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds)
+ public virtual async Task WriteAsync(Point point, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
var response = await WriteAsync(new [] { point }, dbName, retentionPolicy, precision).ConfigureAwait(false);
return response;
}
- public virtual async Task WriteAsync(IEnumerable points, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds)
+ public virtual async Task WriteAsync(IEnumerable points, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
var request = new WriteRequest(base.RequestClient.GetPointFormatter())
{
diff --git a/InfluxData.Net.InfluxDb/ClientModules/IBasicClientModule.cs b/InfluxData.Net.InfluxDb/ClientModules/IBasicClientModule.cs
index 87af5da..abc122a 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/IBasicClientModule.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/IBasicClientModule.cs
@@ -63,7 +63,7 @@ public interface IBasicClientModule
/// The retention policy.
/// InfluxDb time precision to use (defaults to 'ms')
///
- Task WriteAsync(Point point, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds);
+ Task WriteAsync(Point point, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
///
/// Writes multiple serie points to the database.
@@ -73,6 +73,6 @@ public interface IBasicClientModule
/// The retention policy.
/// InfluxDb time precision to use (defaults to 'ms')
///
- Task WriteAsync(IEnumerable points, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds);
+ Task WriteAsync(IEnumerable points, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
\ No newline at end of file
diff --git a/InfluxData.Net.InfluxDb/ClientModules/ISerieClientModule.cs b/InfluxData.Net.InfluxDb/ClientModules/ISerieClientModule.cs
index baac28b..b6b3c85 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/ISerieClientModule.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/ISerieClientModule.cs
@@ -90,6 +90,6 @@ public interface ISerieClientModule
/// Retention policy.
/// Precision.
/// BatchWriter instance.
- IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds);
+ IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
\ No newline at end of file
diff --git a/InfluxData.Net.InfluxDb/ClientModules/SerieClientModule.cs b/InfluxData.Net.InfluxDb/ClientModules/SerieClientModule.cs
index ba15e21..315a15b 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/SerieClientModule.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/SerieClientModule.cs
@@ -90,7 +90,7 @@ public virtual async Task> GetFieldKeysAsync(string dbName
return fieldKeys;
}
- public IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds)
+ public IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
return ((IBatchWriterFactory)_batchWriter).CreateBatchWriter(dbName, retenionPolicy, precision);
}
diff --git a/InfluxData.Net.InfluxDb/ClientModules/SubModules/BatchWriter.cs b/InfluxData.Net.InfluxDb/ClientModules/SubModules/BatchWriter.cs
index 7d5ce67..c90dc38 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/SubModules/BatchWriter.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/SubModules/BatchWriter.cs
@@ -13,7 +13,7 @@ public class BatchWriter : IBatchWriterFactory
private readonly IBasicClientModule _basicClientModule;
private string _dbName;
private string _retentionPolicy;
- private string _precision;
+ private TimeUnit _precision;
private int _interval;
private bool _continueOnError;
private bool _isRunning;
@@ -42,7 +42,7 @@ internal BatchWriter(IBasicClientModule basicClientModule)
/// Constructor used by BatchWriter to create new instances of BatchWriter (through the CreateBatchWriter() method) with
/// IBasicClientModule from InfluxDbClient. This instance BatchWriter instance is served to the end users.
///
- private BatchWriter(IBasicClientModule basicClientModule, string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds)
+ private BatchWriter(IBasicClientModule basicClientModule, string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
_basicClientModule = basicClientModule;
_dbName = dbName;
@@ -51,7 +51,7 @@ private BatchWriter(IBasicClientModule basicClientModule, string dbName, string
_pointCollection = new BlockingCollection();
}
- public virtual IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds)
+ public virtual IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
return new BatchWriter(_basicClientModule, dbName, retenionPolicy, precision);
}
diff --git a/InfluxData.Net.InfluxDb/ClientModules/SubModules/IBatchWriter.cs b/InfluxData.Net.InfluxDb/ClientModules/SubModules/IBatchWriter.cs
index ac87adb..c5e6a98 100644
--- a/InfluxData.Net.InfluxDb/ClientModules/SubModules/IBatchWriter.cs
+++ b/InfluxData.Net.InfluxDb/ClientModules/SubModules/IBatchWriter.cs
@@ -71,6 +71,6 @@ internal interface IBatchWriterFactory : IBatchWriter
/// Retention policy.
/// Precision.
/// BatchWriter instance.
- IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds);
+ IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
\ No newline at end of file
diff --git a/InfluxData.Net.InfluxDb/Formatters/IPointFormatter.cs b/InfluxData.Net.InfluxDb/Formatters/IPointFormatter.cs
index ebc4c3e..65b54b4 100644
--- a/InfluxData.Net.InfluxDb/Formatters/IPointFormatter.cs
+++ b/InfluxData.Net.InfluxDb/Formatters/IPointFormatter.cs
@@ -6,7 +6,7 @@ namespace InfluxData.Net.InfluxDb.Formatters
{
public interface IPointFormatter
{
- string PointToString(Point point, string precision = TimeUnit.Milliseconds);
+ string PointToString(Point point, TimeUnit precision = TimeUnit.Ticks);
Serie PointToSerie(Point point);
}
diff --git a/InfluxData.Net.InfluxDb/Formatters/PointFormatter.cs b/InfluxData.Net.InfluxDb/Formatters/PointFormatter.cs
index e71929c..c257c5a 100644
--- a/InfluxData.Net.InfluxDb/Formatters/PointFormatter.cs
+++ b/InfluxData.Net.InfluxDb/Formatters/PointFormatter.cs
@@ -15,7 +15,7 @@ public class PointFormatter : IPointFormatter
/// Returns a point represented in line protocol format for writing to the InfluxDb API endpoint
///
/// A string that represents this instance.
- public virtual string PointToString(Point point, string precision = TimeUnit.Milliseconds)
+ public virtual string PointToString(Point point, TimeUnit precision = TimeUnit.Ticks)
{
Validate.IsNotNullOrEmpty(point.Name, "measurement");
Validate.IsNotNull(point.Tags, "tags");
@@ -139,7 +139,7 @@ protected virtual string FormatPointField(string key, object value)
return $"{EscapeTagOrKeyValue(key)}={result}";
}
- protected virtual string FormatPointTimestamp(Point point, string precision = TimeUnit.Milliseconds)
+ protected virtual string FormatPointTimestamp(Point point, TimeUnit precision = TimeUnit.Ticks)
{
return point.Timestamp.HasValue ? point.Timestamp.Value.ToUnixTime(precision).ToString() : string.Empty;
}
diff --git a/InfluxData.Net.InfluxDb/Models/WriteRequest.cs b/InfluxData.Net.InfluxDb/Models/WriteRequest.cs
index f42baaa..15d0bee 100644
--- a/InfluxData.Net.InfluxDb/Models/WriteRequest.cs
+++ b/InfluxData.Net.InfluxDb/Models/WriteRequest.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using InfluxData.Net.Common.Constants;
using InfluxData.Net.InfluxDb.Formatters;
namespace InfluxData.Net.InfluxDb.Models
@@ -30,7 +31,7 @@ public WriteRequest(IPointFormatter formatter)
///
/// Point data time precision.
///
- public string Precision { get; set; }
+ public TimeUnit Precision { get; set; }
///
/// Data retention policy.
diff --git a/InfluxData.Net.InfluxDb/RequestClients/InfluxDbRequestClient.cs b/InfluxData.Net.InfluxDb/RequestClients/InfluxDbRequestClient.cs
index 7861cd2..57564da 100644
--- a/InfluxData.Net.InfluxDb/RequestClients/InfluxDbRequestClient.cs
+++ b/InfluxData.Net.InfluxDb/RequestClients/InfluxDbRequestClient.cs
@@ -9,6 +9,7 @@
using InfluxData.Net.InfluxDb.Models;
using InfluxData.Net.Common.Helpers;
using InfluxData.Net.Common.Enums;
+using InfluxData.Net.Common.Constants;
namespace InfluxData.Net.InfluxDb.RequestClients
{
@@ -36,7 +37,7 @@ public virtual async Task PostAsync(WriteRequest writeRe
{
var requestParams = RequestParamsBuilder.BuildRequestParams(
writeRequest.DbName,
- QueryParams.Precision, writeRequest.Precision,
+ QueryParams.Precision, writeRequest.Precision.ToEpochFormat(),
QueryParams.RetentionPolicy, writeRequest.RetentionPolicy
);
var httpContent = new StringContent(writeRequest.GetLines(), Encoding.UTF8, "text/plain");