Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Small changes to allow Microsecond and Tick (100 ns) resolutions #84

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 51 additions & 10 deletions InfluxData.Net.Common/Constants/TimeUnit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,61 @@ namespace InfluxData.Net.Common.Constants
/// <summary>
/// Time unit used in writing data points or parsing series.
/// </summary>
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";
//}
}
15 changes: 13 additions & 2 deletions InfluxData.Net.Common/Helpers/ObjectExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,22 @@ public static string ToJson(this object @object)
/// <param name="date">DateTime to convert.</param>
/// <param name="precision">Precision (optional, defaults to milliseconds)</param>
/// <returns>Unix-style timestamp in milliseconds.</returns>
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;
Expand All @@ -61,10 +70,12 @@ public static long ToUnixTime(this DateTime date, string precision = TimeUnit.Mi
/// <param name="unixTime">The unix time (expects milliseconds by default).</param>
/// <param name="precision">Precision (optional, defaults to milliseconds)</param>
/// <returns>DateTime object.</returns>
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:
Expand Down
4 changes: 2 additions & 2 deletions InfluxData.Net.InfluxDb/ClientModules/BasicClientModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ public BasicClientModule(IInfluxDbRequestClient requestClient, IBasicResponsePar
_basicResponseParser = basicResponseParser;
}

public virtual async Task<IInfluxDataApiResponse> WriteAsync(Point point, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds)
public virtual async Task<IInfluxDataApiResponse> 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<IInfluxDataApiResponse> WriteAsync(IEnumerable<Point> points, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds)
public virtual async Task<IInfluxDataApiResponse> WriteAsync(IEnumerable<Point> points, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks)
{
var request = new WriteRequest(base.RequestClient.GetPointFormatter())
{
Expand Down
4 changes: 2 additions & 2 deletions InfluxData.Net.InfluxDb/ClientModules/IBasicClientModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public interface IBasicClientModule
/// <param name="retentionPolicy">The retention policy.</param>
/// <param name="precision">InfluxDb time precision to use (defaults to 'ms')</param>
/// <returns></returns>
Task<IInfluxDataApiResponse> WriteAsync(Point point, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds);
Task<IInfluxDataApiResponse> WriteAsync(Point point, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks);

/// <summary>
/// Writes multiple serie points to the database.
Expand All @@ -73,6 +73,6 @@ public interface IBasicClientModule
/// <param name="retentionPolicy">The retention policy.</param>
/// <param name="precision">InfluxDb time precision to use (defaults to 'ms')</param>
/// <returns></returns>
Task<IInfluxDataApiResponse> WriteAsync(IEnumerable<Point> points, string dbName = null, string retentionPolicy = null, string precision = TimeUnit.Milliseconds);
Task<IInfluxDataApiResponse> WriteAsync(IEnumerable<Point> points, string dbName = null, string retentionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,6 @@ public interface ISerieClientModule
/// <param name="retenionPolicy">Retention policy.</param>
/// <param name="precision">Precision.</param>
/// <returns>BatchWriter instance.</returns>
IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds);
IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
2 changes: 1 addition & 1 deletion InfluxData.Net.InfluxDb/ClientModules/SerieClientModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public virtual async Task<IEnumerable<FieldKey>> 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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
/// </summary>
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;
Expand All @@ -51,7 +51,7 @@ private BatchWriter(IBasicClientModule basicClientModule, string dbName, string
_pointCollection = new BlockingCollection<Point>();
}

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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,6 @@ internal interface IBatchWriterFactory : IBatchWriter
/// <param name="retenionPolicy">Retention policy.</param>
/// <param name="precision">Precision.</param>
/// <returns>BatchWriter instance.</returns>
IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, string precision = TimeUnit.Milliseconds);
IBatchWriter CreateBatchWriter(string dbName, string retenionPolicy = null, TimeUnit precision = TimeUnit.Ticks);
}
}
2 changes: 1 addition & 1 deletion InfluxData.Net.InfluxDb/Formatters/IPointFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions InfluxData.Net.InfluxDb/Formatters/PointFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class PointFormatter : IPointFormatter
/// Returns a point represented in line protocol format for writing to the InfluxDb API endpoint
/// </summary>
/// <returns>A string that represents this instance.</returns>
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");
Expand Down Expand Up @@ -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;
}
Expand Down
3 changes: 2 additions & 1 deletion InfluxData.Net.InfluxDb/Models/WriteRequest.cs
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -30,7 +31,7 @@ public WriteRequest(IPointFormatter formatter)
/// <summary>
/// Point data time precision.
/// </summary>
public string Precision { get; set; }
public TimeUnit Precision { get; set; }

/// <summary>
/// Data retention policy.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -36,7 +37,7 @@ public virtual async Task<IInfluxDataApiResponse> 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");
Expand Down