From c1894196b4d0d5f22e2506d77a3a1c6258afc7b9 Mon Sep 17 00:00:00 2001 From: Stuart Cam Date: Fri, 13 Dec 2019 14:19:48 +1100 Subject: [PATCH] Implement Get SLM Stats API (#4264) Implement Get SLM Stats API and add XPack usage API response items. (cherry picked from commit 48cdd63f454ee627d0c2fbc7266af06a640ea6a2) --- .../Configuration/CodeConfiguration.cs | 1 - ...tParameters.SnapshotLifecycleManagement.cs | 6 ++ ...LevelClient.SnapshotLifecycleManagement.cs | 9 +++ ...Descriptors.SnapshotLifecycleManagement.cs | 8 +++ ...asticClient.SnapshotLifecycleManagement.cs | 24 ++++++++ .../Requests.SnapshotLifecycleManagement.cs | 14 +++++ .../XPack/Info/XPackInfo/XPackInfoResponse.cs | 4 ++ .../Info/XPackUsage/XPackUsageResponse.cs | 46 ++++++++++++++++ .../GetSnapshotLifecycleStatsRequest.cs | 9 +++ .../GetSnapshotLifecycleStatsResponse.cs | 55 +++++++++++++++++++ .../_Generated/ApiUrlsLookup.generated.cs | 1 + src/Tests/Tests/XPack/Slm/SlmApiTests.cs | 19 ++++++- 12 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsRequest.cs create mode 100644 src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsResponse.cs diff --git a/src/CodeGeneration/ApiGenerator/Configuration/CodeConfiguration.cs b/src/CodeGeneration/ApiGenerator/Configuration/CodeConfiguration.cs index c0b345a3334..2fd41845d7f 100644 --- a/src/CodeGeneration/ApiGenerator/Configuration/CodeConfiguration.cs +++ b/src/CodeGeneration/ApiGenerator/Configuration/CodeConfiguration.cs @@ -63,7 +63,6 @@ public static class CodeConfiguration "enrich.put_policy.json", "enrich.stats.json", "slm.execute_retention.json", - "slm.get_stats.json", "transform.delete_transform.json", "transform.get_transform.json", "transform.get_transform_stats.json", diff --git a/src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs b/src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs index f3560eddc95..b22174208bf 100644 --- a/src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs +++ b/src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs @@ -45,6 +45,12 @@ public class GetSnapshotLifecycleRequestParameters : RequestParameters false; } + ///Request options for GetSnapshotLifecycleStats https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + public class GetSnapshotLifecycleStatsRequestParameters : RequestParameters + { + public override HttpMethod DefaultHttpMethod => HttpMethod.GET; + } + ///Request options for PutSnapshotLifecycle https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html public class PutSnapshotLifecycleRequestParameters : RequestParameters { diff --git a/src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs b/src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs index 189ec0a3a3a..aafbf0c8822 100644 --- a/src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs +++ b/src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs @@ -85,6 +85,15 @@ public TResponse GetSnapshotLifecycle(GetSnapshotLifecycleRequestPara [MapsApi("slm.get_lifecycle", "")] public Task GetSnapshotLifecycleAsync(GetSnapshotLifecycleRequestParameters requestParameters = null, CancellationToken ctx = default) where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync(GET, "_slm/policy", ctx, null, RequestParams(requestParameters)); + ///GET on /_slm/stats https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + ///Request specific configuration such as querystring parameters & request specific connection settings. + public TResponse GetSnapshotLifecycleStats(GetSnapshotLifecycleStatsRequestParameters requestParameters = null) + where TResponse : class, IElasticsearchResponse, new() => DoRequest(GET, "_slm/stats", null, RequestParams(requestParameters)); + ///GET on /_slm/stats https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + ///Request specific configuration such as querystring parameters & request specific connection settings. + [MapsApi("slm.get_stats", "")] + public Task GetSnapshotLifecycleStatsAsync(GetSnapshotLifecycleStatsRequestParameters requestParameters = null, CancellationToken ctx = default) + where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync(GET, "_slm/stats", ctx, null, RequestParams(requestParameters)); ///PUT on /_slm/policy/{policy_id} https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html ///The id of the snapshot lifecycle policy ///The snapshot lifecycle policy definition to register diff --git a/src/Nest/Descriptors.SnapshotLifecycleManagement.cs b/src/Nest/Descriptors.SnapshotLifecycleManagement.cs index caca936b5f4..f97c7ec0302 100644 --- a/src/Nest/Descriptors.SnapshotLifecycleManagement.cs +++ b/src/Nest/Descriptors.SnapshotLifecycleManagement.cs @@ -94,6 +94,14 @@ public GetSnapshotLifecycleDescriptor(): base() // Request parameters } + ///Descriptor for GetSnapshotLifecycleStats https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + public partial class GetSnapshotLifecycleStatsDescriptor : RequestDescriptorBase, IGetSnapshotLifecycleStatsRequest + { + internal override ApiUrls ApiUrls => ApiUrlsLookups.SnapshotLifecycleManagementGetSnapshotLifecycleStats; + // values part of the url path + // Request parameters + } + ///Descriptor for PutSnapshotLifecycle https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html public partial class PutSnapshotLifecycleDescriptor : RequestDescriptorBase, IPutSnapshotLifecycleRequest { diff --git a/src/Nest/ElasticClient.SnapshotLifecycleManagement.cs b/src/Nest/ElasticClient.SnapshotLifecycleManagement.cs index e391a06c790..00def066f1d 100644 --- a/src/Nest/ElasticClient.SnapshotLifecycleManagement.cs +++ b/src/Nest/ElasticClient.SnapshotLifecycleManagement.cs @@ -109,6 +109,30 @@ internal SnapshotLifecycleManagementNamespace(ElasticClient client): base(client /// public Task GetSnapshotLifecycleAsync(IGetSnapshotLifecycleRequest request, CancellationToken ct = default) => DoRequestAsync(request, request.RequestParameters, ct); /// + /// GET request to the slm.get_stats API, read more about this API online: + /// + /// https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + /// + public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(Func selector = null) => GetSnapshotLifecycleStats(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor())); + /// + /// GET request to the slm.get_stats API, read more about this API online: + /// + /// https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + /// + public Task GetSnapshotLifecycleStatsAsync(Func selector = null, CancellationToken ct = default) => GetSnapshotLifecycleStatsAsync(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor()), ct); + /// + /// GET request to the slm.get_stats API, read more about this API online: + /// + /// https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + /// + public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(IGetSnapshotLifecycleStatsRequest request) => DoRequest(request, request.RequestParameters); + /// + /// GET request to the slm.get_stats API, read more about this API online: + /// + /// https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + /// + public Task GetSnapshotLifecycleStatsAsync(IGetSnapshotLifecycleStatsRequest request, CancellationToken ct = default) => DoRequestAsync(request, request.RequestParameters, ct); + /// /// PUT request to the slm.put_lifecycle API, read more about this API online: /// /// https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html diff --git a/src/Nest/Requests.SnapshotLifecycleManagement.cs b/src/Nest/Requests.SnapshotLifecycleManagement.cs index 852d287b34a..b103c20773e 100644 --- a/src/Nest/Requests.SnapshotLifecycleManagement.cs +++ b/src/Nest/Requests.SnapshotLifecycleManagement.cs @@ -129,6 +129,20 @@ public GetSnapshotLifecycleRequest(): base() // Request parameters } + [InterfaceDataContract] + public partial interface IGetSnapshotLifecycleStatsRequest : IRequest + { + } + + ///Request for GetSnapshotLifecycleStats https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html + public partial class GetSnapshotLifecycleStatsRequest : PlainRequestBase, IGetSnapshotLifecycleStatsRequest + { + protected IGetSnapshotLifecycleStatsRequest Self => this; + internal override ApiUrls ApiUrls => ApiUrlsLookups.SnapshotLifecycleManagementGetSnapshotLifecycleStats; + // values part of the url path + // Request parameters + } + [InterfaceDataContract] public partial interface IPutSnapshotLifecycleRequest : IRequest { diff --git a/src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs b/src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs index 05908f5e007..cae00a5a98c 100644 --- a/src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs +++ b/src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs @@ -59,6 +59,7 @@ public class XPackFeatures [DataMember(Name = "graph")] public XPackFeature Graph { get; internal set; } + // TODO! Expand to fullname in 8.0? [DataMember(Name = "ilm")] public XPackFeature Ilm { get; internal set; } @@ -85,6 +86,9 @@ public class XPackFeatures [DataMember(Name = "watcher")] public XPackFeature Watcher { get; internal set; } + + [DataMember(Name = "slm")] + public XPackFeature SnapshotLifecycleManagement { get; internal set; } } public class XPackFeature diff --git a/src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs b/src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs index bf23f5e29be..b0fa6b0eee1 100644 --- a/src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs +++ b/src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs @@ -37,6 +37,7 @@ public class SqlUsage : XPackUsage [DataMember(Name = "queries")] public IReadOnlyDictionary Queries { get; set; } = EmptyReadOnly.Dictionary; } + public class XPackUsageResponse : ResponseBase { [DataMember(Name = "sql")] @@ -83,6 +84,51 @@ public class XPackUsageResponse : ResponseBase [DataMember(Name = "voting_only")] public XPackUsage VotingOnly { get; internal set; } + + [DataMember(Name = "slm")] + public SlmUsage SnapshotLifecycleManagement { get; internal set; } + } + + public class SlmUsage : XPackUsage + { + [DataMember(Name = "policy_count")] + public int PolicyCount { get; internal set; } + + [DataMember(Name = "policy_stats")] + public SnapshotLifecycleStats PolicyStats { get; internal set; } + } + + public class SnapshotLifecycleStats + { + [DataMember(Name = "retention_runs")] + public long RetentionRuns { get; internal set; } + + [DataMember(Name = "retention_failed")] + public long RetentionFailed { get; internal set; } + + [DataMember(Name = "retention_timed_out")] + public long RetentionTimedOut { get; internal set; } + + [DataMember(Name = "retention_deletion_time")] + public string RetentionDeletionTime { get; internal set; } + + [DataMember(Name = "retention_deletion_time_millis")] + public long RetentionDeletionTimeMilliseconds { get; internal set; } + + [DataMember(Name = "total_snapshots_taken")] + public long TotalSnapshotsTaken { get; internal set; } + + [DataMember(Name = "total_snapshots_failed")] + public long TotalSnapshotsFailed { get; internal set; } + + [DataMember(Name = "total_snapshots_deleted")] + public long TotalSnapshotsDeleted { get; internal set; } + + [DataMember(Name = "total_snapshot_deletion_failures")] + public long TotalSnapshotsDeletionFailures { get; internal set; } + + //[DataMember(Name = "policy_stats")] + //public IDictionary PolicyStats { get; internal set; } } public class XPackUsage diff --git a/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsRequest.cs b/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsRequest.cs new file mode 100644 index 00000000000..aa34a367db0 --- /dev/null +++ b/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsRequest.cs @@ -0,0 +1,9 @@ +namespace Nest +{ + [MapsApi("slm.get_stats")] + public partial interface IGetSnapshotLifecycleStatsRequest { } + + public partial class GetSnapshotLifecycleStatsRequest { } + + public partial class GetSnapshotLifecycleStatsDescriptor { } +} diff --git a/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsResponse.cs b/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsResponse.cs new file mode 100644 index 00000000000..1eede5fe252 --- /dev/null +++ b/src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsResponse.cs @@ -0,0 +1,55 @@ +using System.Runtime.Serialization; + +namespace Nest +{ + public class GetSnapshotLifecycleStatsResponse : ResponseBase + { + [DataMember(Name = "retention_runs")] + public long RetentionRuns { get; internal set; } + + [DataMember(Name = "retention_failed")] + public long RetentionFailed { get; internal set; } + + [DataMember(Name = "retention_timed_out")] + public long RetentionTimedOut { get; internal set; } + + [DataMember(Name = "retention_deletion_time")] + public string RetentionDeletionTime { get; internal set; } + + [DataMember(Name = "retention_deletion_time_millis")] + public long RetentionDeletionTimeMilliseconds { get; internal set; } + + [DataMember(Name = "total_snapshots_taken")] + public long TotalSnapshotsTaken { get; internal set; } + + [DataMember(Name = "total_snapshots_failed")] + public long TotalSnapshotsFailed { get; internal set; } + + [DataMember(Name = "total_snapshots_deleted")] + public long TotalSnapshotsDeleted { get; internal set; } + + [DataMember(Name = "total_snapshot_deletion_failures")] + public long TotalSnapshotsDeletionFailures { get; internal set; } + + //[DataMember(Name = "policy_stats")] + //public IDictionary PolicyStats { get; internal set; } + } + + public class SnapshotPolicyStats + { + [DataMember(Name = "policy")] + public string PolicyId { get; internal set; } + + [DataMember(Name = "snapshots_taken")] + public long SnapshotsTaken { get; internal set; } + + [DataMember(Name = "snapshots_failed")] + public long SnapshotsFailed { get; internal set; } + + [DataMember(Name = "snapshots_deleted")] + public long SnapshotsDeleted { get; internal set; } + + [DataMember(Name = "snapshot_deletion_failures")] + public long SnapshotsDeletionFailures { get; internal set; } + } +} diff --git a/src/Nest/_Generated/ApiUrlsLookup.generated.cs b/src/Nest/_Generated/ApiUrlsLookup.generated.cs index 4086985710e..9bf7b3470d3 100644 --- a/src/Nest/_Generated/ApiUrlsLookup.generated.cs +++ b/src/Nest/_Generated/ApiUrlsLookup.generated.cs @@ -235,6 +235,7 @@ internal static class ApiUrlsLookups internal static ApiUrls SnapshotLifecycleManagementDeleteSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}"}); internal static ApiUrls SnapshotLifecycleManagementExecuteSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}/_execute"}); internal static ApiUrls SnapshotLifecycleManagementGetSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}", "_slm/policy"}); + internal static ApiUrls SnapshotLifecycleManagementGetSnapshotLifecycleStats = new ApiUrls(new[]{"_slm/stats"}); internal static ApiUrls SnapshotLifecycleManagementPutSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}"}); internal static ApiUrls SnapshotCleanupRepository = new ApiUrls(new[]{"_snapshot/{repository}/_cleanup"}); internal static ApiUrls SnapshotSnapshot = new ApiUrls(new[]{"_snapshot/{repository}/{snapshot}"}); diff --git a/src/Tests/Tests/XPack/Slm/SlmApiTests.cs b/src/Tests/Tests/XPack/Slm/SlmApiTests.cs index 095ad1d6b55..2881a4e36d9 100644 --- a/src/Tests/Tests/XPack/Slm/SlmApiTests.cs +++ b/src/Tests/Tests/XPack/Slm/SlmApiTests.cs @@ -21,7 +21,7 @@ public class SlmApiTests : CoordinatedIntegrationTestBase private const string GetSnapshotLifecycleStep = nameof(GetSnapshotLifecycleStep); private const string GetSnapshotLifecycleAfterExecuteStep = nameof(GetSnapshotLifecycleAfterExecuteStep); private const string PutSnapshotLifecycleStep = nameof(PutSnapshotLifecycleStep); - + private const string GetSnapshotLifecycleStats = nameof(GetSnapshotLifecycleStats); public SlmApiTests(XPackCluster cluster, EndpointUsage usage) : base(new CoordinatedUsage(cluster, usage) { @@ -116,6 +116,17 @@ public SlmApiTests(XPackCluster cluster, EndpointUsage usage) : base(new Coordin (v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleAsync(r) ) }, + { + GetSnapshotLifecycleStats, u => + u.Calls( + v => new GetSnapshotLifecycleStatsRequest(), + (v, d) => d, + (v, c, f) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStats(f), + (v, c, f) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStatsAsync(f), + (v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStats(r), + (v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStatsAsync(r) + ) + }, { DeleteSnapshotLifecycleStep, u => u.Calls await Assert await Assert(GetSnapshotLifecycleStats, + (v, r) => + { + r.IsValid.Should().BeTrue(); + }); } }