Skip to content

Commit 48cdd63

Browse files
authored
Implement Get SLM Stats API (#4264)
Implement Get SLM Stats API and add XPack usage API response items.
1 parent 89d87e0 commit 48cdd63

12 files changed

+194
-2
lines changed

src/CodeGeneration/ApiGenerator/Configuration/CodeConfiguration.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ public static class CodeConfiguration
6161
"enrich.put_policy.json",
6262
"enrich.stats.json",
6363
"slm.execute_retention.json",
64-
"slm.get_stats.json",
6564
"transform.delete_transform.json",
6665
"transform.get_transform.json",
6766
"transform.get_transform_stats.json",

src/Elasticsearch.Net/Api/RequestParameters/RequestParameters.SnapshotLifecycleManagement.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ public class GetSnapshotLifecycleRequestParameters : RequestParameters<GetSnapsh
4242
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
4343
}
4444

45+
///<summary>Request options for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
46+
public class GetSnapshotLifecycleStatsRequestParameters : RequestParameters<GetSnapshotLifecycleStatsRequestParameters>
47+
{
48+
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
49+
}
50+
4551
///<summary>Request options for PutSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
4652
public class PutSnapshotLifecycleRequestParameters : RequestParameters<PutSnapshotLifecycleRequestParameters>
4753
{

src/Elasticsearch.Net/ElasticLowLevelClient.SnapshotLifecycleManagement.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ public TResponse GetSnapshotLifecycle<TResponse>(GetSnapshotLifecycleRequestPara
8585
[MapsApi("slm.get_lifecycle", "")]
8686
public Task<TResponse> GetSnapshotLifecycleAsync<TResponse>(GetSnapshotLifecycleRequestParameters requestParameters = null, CancellationToken ctx = default)
8787
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_slm/policy", ctx, null, RequestParams(requestParameters));
88+
///<summary>GET on /_slm/stats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
89+
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
90+
public TResponse GetSnapshotLifecycleStats<TResponse>(GetSnapshotLifecycleStatsRequestParameters requestParameters = null)
91+
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, "_slm/stats", null, RequestParams(requestParameters));
92+
///<summary>GET on /_slm/stats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
93+
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
94+
[MapsApi("slm.get_stats", "")]
95+
public Task<TResponse> GetSnapshotLifecycleStatsAsync<TResponse>(GetSnapshotLifecycleStatsRequestParameters requestParameters = null, CancellationToken ctx = default)
96+
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_slm/stats", ctx, null, RequestParams(requestParameters));
8897
///<summary>PUT on /_slm/policy/{policy_id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
8998
///<param name = "policyId">The id of the snapshot lifecycle policy</param>
9099
///<param name = "body">The snapshot lifecycle policy definition to register</param>

src/Nest/Descriptors.SnapshotLifecycleManagement.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ public GetSnapshotLifecycleDescriptor(): base()
9494
// Request parameters
9595
}
9696

97+
///<summary>Descriptor for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
98+
public partial class GetSnapshotLifecycleStatsDescriptor : RequestDescriptorBase<GetSnapshotLifecycleStatsDescriptor, GetSnapshotLifecycleStatsRequestParameters, IGetSnapshotLifecycleStatsRequest>, IGetSnapshotLifecycleStatsRequest
99+
{
100+
internal override ApiUrls ApiUrls => ApiUrlsLookups.SnapshotLifecycleManagementGetSnapshotLifecycleStats;
101+
// values part of the url path
102+
// Request parameters
103+
}
104+
97105
///<summary>Descriptor for PutSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
98106
public partial class PutSnapshotLifecycleDescriptor : RequestDescriptorBase<PutSnapshotLifecycleDescriptor, PutSnapshotLifecycleRequestParameters, IPutSnapshotLifecycleRequest>, IPutSnapshotLifecycleRequest
99107
{

src/Nest/ElasticClient.SnapshotLifecycleManagement.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,30 @@ internal SnapshotLifecycleManagementNamespace(ElasticClient client): base(client
109109
/// </summary>
110110
public Task<GetSnapshotLifecycleResponse> GetSnapshotLifecycleAsync(IGetSnapshotLifecycleRequest request, CancellationToken ct = default) => DoRequestAsync<IGetSnapshotLifecycleRequest, GetSnapshotLifecycleResponse>(request, request.RequestParameters, ct);
111111
/// <summary>
112+
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
113+
/// <para></para>
114+
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html">https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</a>
115+
/// </summary>
116+
public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(Func<GetSnapshotLifecycleStatsDescriptor, IGetSnapshotLifecycleStatsRequest> selector = null) => GetSnapshotLifecycleStats(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor()));
117+
/// <summary>
118+
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
119+
/// <para></para>
120+
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html">https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</a>
121+
/// </summary>
122+
public Task<GetSnapshotLifecycleStatsResponse> GetSnapshotLifecycleStatsAsync(Func<GetSnapshotLifecycleStatsDescriptor, IGetSnapshotLifecycleStatsRequest> selector = null, CancellationToken ct = default) => GetSnapshotLifecycleStatsAsync(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor()), ct);
123+
/// <summary>
124+
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
125+
/// <para></para>
126+
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html">https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</a>
127+
/// </summary>
128+
public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(IGetSnapshotLifecycleStatsRequest request) => DoRequest<IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(request, request.RequestParameters);
129+
/// <summary>
130+
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
131+
/// <para></para>
132+
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html">https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</a>
133+
/// </summary>
134+
public Task<GetSnapshotLifecycleStatsResponse> GetSnapshotLifecycleStatsAsync(IGetSnapshotLifecycleStatsRequest request, CancellationToken ct = default) => DoRequestAsync<IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(request, request.RequestParameters, ct);
135+
/// <summary>
112136
/// <c>PUT</c> request to the <c>slm.put_lifecycle</c> API, read more about this API online:
113137
/// <para></para>
114138
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</a>

src/Nest/Requests.SnapshotLifecycleManagement.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,20 @@ public GetSnapshotLifecycleRequest(): base()
129129
// Request parameters
130130
}
131131

132+
[InterfaceDataContract]
133+
public partial interface IGetSnapshotLifecycleStatsRequest : IRequest<GetSnapshotLifecycleStatsRequestParameters>
134+
{
135+
}
136+
137+
///<summary>Request for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
138+
public partial class GetSnapshotLifecycleStatsRequest : PlainRequestBase<GetSnapshotLifecycleStatsRequestParameters>, IGetSnapshotLifecycleStatsRequest
139+
{
140+
protected IGetSnapshotLifecycleStatsRequest Self => this;
141+
internal override ApiUrls ApiUrls => ApiUrlsLookups.SnapshotLifecycleManagementGetSnapshotLifecycleStats;
142+
// values part of the url path
143+
// Request parameters
144+
}
145+
132146
[InterfaceDataContract]
133147
public partial interface IPutSnapshotLifecycleRequest : IRequest<PutSnapshotLifecycleRequestParameters>
134148
{

src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class XPackFeatures
5959
[DataMember(Name = "graph")]
6060
public XPackFeature Graph { get; internal set; }
6161

62+
// TODO! Expand to fullname in 8.0?
6263
[DataMember(Name = "ilm")]
6364
public XPackFeature Ilm { get; internal set; }
6465

@@ -85,6 +86,9 @@ public class XPackFeatures
8586

8687
[DataMember(Name = "watcher")]
8788
public XPackFeature Watcher { get; internal set; }
89+
90+
[DataMember(Name = "slm")]
91+
public XPackFeature SnapshotLifecycleManagement { get; internal set; }
8892
}
8993

9094
public class XPackFeature

src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public class SqlUsage : XPackUsage
3737
[DataMember(Name = "queries")]
3838
public IReadOnlyDictionary<string, QueryUsage> Queries { get; set; } = EmptyReadOnly<string, QueryUsage>.Dictionary;
3939
}
40+
4041
public class XPackUsageResponse : ResponseBase
4142
{
4243
[DataMember(Name = "sql")]
@@ -83,6 +84,51 @@ public class XPackUsageResponse : ResponseBase
8384

8485
[DataMember(Name = "voting_only")]
8586
public XPackUsage VotingOnly { get; internal set; }
87+
88+
[DataMember(Name = "slm")]
89+
public SlmUsage SnapshotLifecycleManagement { get; internal set; }
90+
}
91+
92+
public class SlmUsage : XPackUsage
93+
{
94+
[DataMember(Name = "policy_count")]
95+
public int PolicyCount { get; internal set; }
96+
97+
[DataMember(Name = "policy_stats")]
98+
public SnapshotLifecycleStats PolicyStats { get; internal set; }
99+
}
100+
101+
public class SnapshotLifecycleStats
102+
{
103+
[DataMember(Name = "retention_runs")]
104+
public long RetentionRuns { get; internal set; }
105+
106+
[DataMember(Name = "retention_failed")]
107+
public long RetentionFailed { get; internal set; }
108+
109+
[DataMember(Name = "retention_timed_out")]
110+
public long RetentionTimedOut { get; internal set; }
111+
112+
[DataMember(Name = "retention_deletion_time")]
113+
public string RetentionDeletionTime { get; internal set; }
114+
115+
[DataMember(Name = "retention_deletion_time_millis")]
116+
public long RetentionDeletionTimeMilliseconds { get; internal set; }
117+
118+
[DataMember(Name = "total_snapshots_taken")]
119+
public long TotalSnapshotsTaken { get; internal set; }
120+
121+
[DataMember(Name = "total_snapshots_failed")]
122+
public long TotalSnapshotsFailed { get; internal set; }
123+
124+
[DataMember(Name = "total_snapshots_deleted")]
125+
public long TotalSnapshotsDeleted { get; internal set; }
126+
127+
[DataMember(Name = "total_snapshot_deletion_failures")]
128+
public long TotalSnapshotsDeletionFailures { get; internal set; }
129+
130+
//[DataMember(Name = "policy_stats")]
131+
//public IDictionary<string, SnapshotPolicyStats> PolicyStats { get; internal set; }
86132
}
87133

88134
public class XPackUsage
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Nest
2+
{
3+
[MapsApi("slm.get_stats")]
4+
public partial interface IGetSnapshotLifecycleStatsRequest { }
5+
6+
public partial class GetSnapshotLifecycleStatsRequest { }
7+
8+
public partial class GetSnapshotLifecycleStatsDescriptor { }
9+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using System.Runtime.Serialization;
2+
3+
namespace Nest
4+
{
5+
public class GetSnapshotLifecycleStatsResponse : ResponseBase
6+
{
7+
[DataMember(Name = "retention_runs")]
8+
public long RetentionRuns { get; internal set; }
9+
10+
[DataMember(Name = "retention_failed")]
11+
public long RetentionFailed { get; internal set; }
12+
13+
[DataMember(Name = "retention_timed_out")]
14+
public long RetentionTimedOut { get; internal set; }
15+
16+
[DataMember(Name = "retention_deletion_time")]
17+
public string RetentionDeletionTime { get; internal set; }
18+
19+
[DataMember(Name = "retention_deletion_time_millis")]
20+
public long RetentionDeletionTimeMilliseconds { get; internal set; }
21+
22+
[DataMember(Name = "total_snapshots_taken")]
23+
public long TotalSnapshotsTaken { get; internal set; }
24+
25+
[DataMember(Name = "total_snapshots_failed")]
26+
public long TotalSnapshotsFailed { get; internal set; }
27+
28+
[DataMember(Name = "total_snapshots_deleted")]
29+
public long TotalSnapshotsDeleted { get; internal set; }
30+
31+
[DataMember(Name = "total_snapshot_deletion_failures")]
32+
public long TotalSnapshotsDeletionFailures { get; internal set; }
33+
34+
//[DataMember(Name = "policy_stats")]
35+
//public IDictionary<string, SnapshotPolicyStats> PolicyStats { get; internal set; }
36+
}
37+
38+
public class SnapshotPolicyStats
39+
{
40+
[DataMember(Name = "policy")]
41+
public string PolicyId { get; internal set; }
42+
43+
[DataMember(Name = "snapshots_taken")]
44+
public long SnapshotsTaken { get; internal set; }
45+
46+
[DataMember(Name = "snapshots_failed")]
47+
public long SnapshotsFailed { get; internal set; }
48+
49+
[DataMember(Name = "snapshots_deleted")]
50+
public long SnapshotsDeleted { get; internal set; }
51+
52+
[DataMember(Name = "snapshot_deletion_failures")]
53+
public long SnapshotsDeletionFailures { get; internal set; }
54+
}
55+
}

src/Nest/_Generated/ApiUrlsLookup.generated.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ internal static class ApiUrlsLookups
236236
internal static ApiUrls SnapshotLifecycleManagementDeleteSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}"});
237237
internal static ApiUrls SnapshotLifecycleManagementExecuteSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}/_execute"});
238238
internal static ApiUrls SnapshotLifecycleManagementGetSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}", "_slm/policy"});
239+
internal static ApiUrls SnapshotLifecycleManagementGetSnapshotLifecycleStats = new ApiUrls(new[]{"_slm/stats"});
239240
internal static ApiUrls SnapshotLifecycleManagementPutSnapshotLifecycle = new ApiUrls(new[]{"_slm/policy/{policy_id}"});
240241
internal static ApiUrls SnapshotCleanupRepository = new ApiUrls(new[]{"_snapshot/{repository}/_cleanup"});
241242
internal static ApiUrls SnapshotSnapshot = new ApiUrls(new[]{"_snapshot/{repository}/{snapshot}"});

src/Tests/Tests/XPack/Slm/SlmApiTests.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public class SlmApiTests : CoordinatedIntegrationTestBase<XPackCluster>
2121
private const string GetSnapshotLifecycleStep = nameof(GetSnapshotLifecycleStep);
2222
private const string GetSnapshotLifecycleAfterExecuteStep = nameof(GetSnapshotLifecycleAfterExecuteStep);
2323
private const string PutSnapshotLifecycleStep = nameof(PutSnapshotLifecycleStep);
24-
24+
private const string GetSnapshotLifecycleStats = nameof(GetSnapshotLifecycleStats);
2525

2626
public SlmApiTests(XPackCluster cluster, EndpointUsage usage) : base(new CoordinatedUsage(cluster, usage)
2727
{
@@ -116,6 +116,17 @@ public SlmApiTests(XPackCluster cluster, EndpointUsage usage) : base(new Coordin
116116
(v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleAsync(r)
117117
)
118118
},
119+
{
120+
GetSnapshotLifecycleStats, u =>
121+
u.Calls<GetSnapshotLifecycleStatsDescriptor, GetSnapshotLifecycleStatsRequest, IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(
122+
v => new GetSnapshotLifecycleStatsRequest(),
123+
(v, d) => d,
124+
(v, c, f) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStats(f),
125+
(v, c, f) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStatsAsync(f),
126+
(v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStats(r),
127+
(v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleStatsAsync(r)
128+
)
129+
},
119130
{
120131
DeleteSnapshotLifecycleStep, u =>
121132
u.Calls<DeleteSnapshotLifecycleDescriptor, DeleteSnapshotLifecycleRequest, IDeleteSnapshotLifecycleRequest,
@@ -198,5 +209,11 @@ [I] public async Task DeleteSnapshotLifecycleResponse() => await Assert<DeleteSn
198209
r.IsValid.Should().BeTrue();
199210
r.Acknowledged.Should().BeTrue();
200211
});
212+
213+
[I] public async Task GetSnapshotLifecycleStatsResponse() => await Assert<GetSnapshotLifecycleStatsResponse>(GetSnapshotLifecycleStats,
214+
(v, r) =>
215+
{
216+
r.IsValid.Should().BeTrue();
217+
});
201218
}
202219
}

0 commit comments

Comments
 (0)