From b136db6c3189c4a01c0ca632ea801e17057f7fa1 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Mon, 2 Sep 2019 19:14:25 +1000 Subject: [PATCH 1/5] Map additonal Recovery API response properties. --- .../IndicesRecovery/RecoveryBytes.cs | 8 ++++---- .../IndicesRecovery/RecoveryIndexStatus.cs | 20 ++++++++++++++----- .../IndicesRecovery/RecoveryVerifyIndex.cs | 12 +++++++++++ .../IndicesRecovery/ShardRecovery.cs | 11 +++++++--- 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryBytes.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryBytes.cs index dae4f2c5bc8..6daea2c4678 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryBytes.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryBytes.cs @@ -4,16 +4,16 @@ namespace Nest { public class RecoveryBytes { - [DataMember(Name ="percent")] + [DataMember(Name = "percent")] public string Percent { get; internal set; } - [DataMember(Name ="recovered")] + [DataMember(Name = "recovered")] public long Recovered { get; internal set; } - [DataMember(Name ="reused")] + [DataMember(Name = "reused")] public long Reused { get; internal set; } - [DataMember(Name ="total")] + [DataMember(Name = "total")] public long Total { get; internal set; } } } diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs index b4fea31d612..023b34817d8 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs @@ -1,16 +1,26 @@ -using System.Runtime.Serialization; +using System; +using System.Runtime.Serialization; namespace Nest { public class RecoveryIndexStatus { - [DataMember(Name ="bytes")] - public RecoveryBytes Bytes { get; internal set; } + [Obsolete("Deprecated in NEST 7.3, use Size instead. Will be removed in 8.0")] + public RecoveryBytes Bytes => Size; - [DataMember(Name ="files")] + [DataMember(Name = "files")] public RecoveryFiles Files { get; internal set; } - [DataMember(Name ="total_time_in_millis")] + [DataMember(Name = "size")] + public RecoveryBytes Size { get; internal set; } + + [DataMember(Name = "source_throttle_time_in_millis")] + public long SourceThrottleTimeInMilliseconds { get; internal set; } + + [DataMember(Name = "target_throttle_time_in_millis")] + public long TargetThrottleTimeInMilliseconds { get; internal set; } + + [DataMember(Name = "total_time_in_millis")] public long TotalTimeInMilliseconds { get; internal set; } } } diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs new file mode 100644 index 00000000000..164e904027f --- /dev/null +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs @@ -0,0 +1,12 @@ +using System.Runtime.Serialization; + +namespace Nest { + public class RecoveryVerifyIndex + { + [DataMember(Name ="check_index_time_in_millis")] + public long CheckIndexTimeInMilliseconds { get; internal set; } + + [DataMember(Name ="total_time_in_millis")] + public long TotalTimeInMilliseconds { get; internal set; } + } +} \ No newline at end of file diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs index 3950878de3c..011a377e93f 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs @@ -20,13 +20,15 @@ public class ShardRecovery [DataMember(Name ="stage")] public string Stage { get; internal set; } - [DataMember(Name ="start")] + [Obsolete("Deprecated in NEST 7.3. Will be removed in 8.0")] public RecoveryStartStatus Start { get; internal set; } - [DataMember(Name ="start_time")] + // TODO Rename in 8.0 + [DataMember(Name ="start_time_in_millis")] public DateTime? StartTime { get; internal set; } - [DataMember(Name ="stop_time")] + // TODO Rename in 8.0 + [DataMember(Name ="stop_time_in_millis")] public DateTime? StopTime { get; internal set; } [DataMember(Name ="target")] @@ -40,5 +42,8 @@ public class ShardRecovery [DataMember(Name ="type")] public string Type { get; internal set; } + + [DataMember(Name ="verify_index")] + public RecoveryVerifyIndex VerifyIndex { get; internal set; } } } From d175f93c8515250ddd1d6e97a90b2bf9eb8aed49 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Tue, 3 Sep 2019 16:45:02 +1000 Subject: [PATCH 2/5] Update src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs Co-Authored-By: Russ Cam --- .../Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs index 023b34817d8..390db33d67d 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryIndexStatus.cs @@ -5,7 +5,7 @@ namespace Nest { public class RecoveryIndexStatus { - [Obsolete("Deprecated in NEST 7.3, use Size instead. Will be removed in 8.0")] + [Obsolete("Deprecated. Use Size instead. Will be removed in 8.0")] public RecoveryBytes Bytes => Size; [DataMember(Name = "files")] From d57d1dfa3005d1c7398153671e7ea70962166e2f Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Tue, 3 Sep 2019 16:45:11 +1000 Subject: [PATCH 3/5] Update src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs Co-Authored-By: Russ Cam --- src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs index 011a377e93f..6fb72162580 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs @@ -20,7 +20,7 @@ public class ShardRecovery [DataMember(Name ="stage")] public string Stage { get; internal set; } - [Obsolete("Deprecated in NEST 7.3. Will be removed in 8.0")] + [Obsolete("Deprecated. Will be removed in 8.0")] public RecoveryStartStatus Start { get; internal set; } // TODO Rename in 8.0 From dfca3d196f260ebc2c1d5aa9552365942c4d6068 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Tue, 3 Sep 2019 16:50:28 +1000 Subject: [PATCH 4/5] Formatting --- .../Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs index 164e904027f..c357154cd1b 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs @@ -1,6 +1,7 @@ using System.Runtime.Serialization; -namespace Nest { +namespace Nest +{ public class RecoveryVerifyIndex { [DataMember(Name ="check_index_time_in_millis")] @@ -9,4 +10,4 @@ public class RecoveryVerifyIndex [DataMember(Name ="total_time_in_millis")] public long TotalTimeInMilliseconds { get; internal set; } } -} \ No newline at end of file +} From f1f2e828af6e03aaebd92a4e94d08d4368465244 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Wed, 4 Sep 2019 12:49:56 +1000 Subject: [PATCH 5/5] Add a nullable Datetime formatter --- .../DateTimeEpochMillisecondsFormatter.cs | 47 +++++++++++++++++++ .../IndicesRecovery/ShardRecovery.cs | 7 ++- 2 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeEpochMillisecondsFormatter.cs diff --git a/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeEpochMillisecondsFormatter.cs b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeEpochMillisecondsFormatter.cs new file mode 100644 index 00000000000..07ff25beea6 --- /dev/null +++ b/src/Nest/CommonAbstractions/SerializationBehavior/JsonFormatters/DateTimeEpochMillisecondsFormatter.cs @@ -0,0 +1,47 @@ +using System; +using Elasticsearch.Net.Utf8Json; + +namespace Nest +{ + internal class NullableDateTimeEpochMillisecondsFormatter : IJsonFormatter + { + public DateTime? Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver) + { + var token = reader.GetCurrentJsonToken(); + + switch (token) + { + case JsonToken.String: + { + var formatter = formatterResolver.GetFormatter(); + return formatter.Deserialize(ref reader, formatterResolver); + } + case JsonToken.Null: + { + reader.ReadNext(); + return null; + } + case JsonToken.Number: + { + var millisecondsSinceEpoch = reader.ReadDouble(); + var dateTimeOffset = DateTimeUtil.Epoch.AddMilliseconds(millisecondsSinceEpoch); + return dateTimeOffset.DateTime; + } + default: + throw new Exception($"Cannot deserialize {nameof(DateTime)} from token {token}"); + } + } + + public void Serialize(ref JsonWriter writer, DateTime? value, IJsonFormatterResolver formatterResolver) + { + if (value == null) + { + writer.WriteNull(); + return; + } + + var dateTimeDifference = (value.Value - DateTimeUtil.Epoch).TotalMilliseconds; + writer.WriteInt64((long)dateTimeDifference); + } + } +} diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs index 6fb72162580..999a61772a7 100644 --- a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.Serialization; +using Elasticsearch.Net.Utf8Json; namespace Nest { @@ -23,11 +24,13 @@ public class ShardRecovery [Obsolete("Deprecated. Will be removed in 8.0")] public RecoveryStartStatus Start { get; internal set; } - // TODO Rename in 8.0 + // TODO Rename property in 8.0 + [JsonFormatter(typeof(NullableDateTimeEpochMillisecondsFormatter))] [DataMember(Name ="start_time_in_millis")] public DateTime? StartTime { get; internal set; } - // TODO Rename in 8.0 + // TODO Rename property in 8.0 + [JsonFormatter(typeof(NullableDateTimeEpochMillisecondsFormatter))] [DataMember(Name ="stop_time_in_millis")] public DateTime? StopTime { get; internal set; }