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/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..390db33d67d 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. 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..c357154cd1b --- /dev/null +++ b/src/Nest/Indices/Monitoring/IndicesRecovery/RecoveryVerifyIndex.cs @@ -0,0 +1,13 @@ +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; } + } +} diff --git a/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs b/src/Nest/Indices/Monitoring/IndicesRecovery/ShardRecovery.cs index 3950878de3c..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 { @@ -20,13 +21,17 @@ public class ShardRecovery [DataMember(Name ="stage")] public string Stage { get; internal set; } - [DataMember(Name ="start")] + [Obsolete("Deprecated. Will be removed in 8.0")] public RecoveryStartStatus Start { get; internal set; } - [DataMember(Name ="start_time")] + // TODO Rename property in 8.0 + [JsonFormatter(typeof(NullableDateTimeEpochMillisecondsFormatter))] + [DataMember(Name ="start_time_in_millis")] public DateTime? StartTime { get; internal set; } - [DataMember(Name ="stop_time")] + // TODO Rename property in 8.0 + [JsonFormatter(typeof(NullableDateTimeEpochMillisecondsFormatter))] + [DataMember(Name ="stop_time_in_millis")] public DateTime? StopTime { get; internal set; } [DataMember(Name ="target")] @@ -40,5 +45,8 @@ public class ShardRecovery [DataMember(Name ="type")] public string Type { get; internal set; } + + [DataMember(Name ="verify_index")] + public RecoveryVerifyIndex VerifyIndex { get; internal set; } } }