Skip to content

Implement Get SLM Stats API #4264

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

Merged
merged 2 commits into from
Dec 13, 2019
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ public class GetSnapshotLifecycleRequestParameters : RequestParameters<GetSnapsh
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
}

///<summary>Request options for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
public class GetSnapshotLifecycleStatsRequestParameters : RequestParameters<GetSnapshotLifecycleStatsRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
}

///<summary>Request options for PutSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
public class PutSnapshotLifecycleRequestParameters : RequestParameters<PutSnapshotLifecycleRequestParameters>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,15 @@ public TResponse GetSnapshotLifecycle<TResponse>(GetSnapshotLifecycleRequestPara
[MapsApi("slm.get_lifecycle", "")]
public Task<TResponse> GetSnapshotLifecycleAsync<TResponse>(GetSnapshotLifecycleRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_slm/policy", ctx, null, RequestParams(requestParameters));
///<summary>GET on /_slm/stats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
public TResponse GetSnapshotLifecycleStats<TResponse>(GetSnapshotLifecycleStatsRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, "_slm/stats", null, RequestParams(requestParameters));
///<summary>GET on /_slm/stats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
[MapsApi("slm.get_stats", "")]
public Task<TResponse> GetSnapshotLifecycleStatsAsync<TResponse>(GetSnapshotLifecycleStatsRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_slm/stats", ctx, null, RequestParams(requestParameters));
///<summary>PUT on /_slm/policy/{policy_id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
///<param name = "policyId">The id of the snapshot lifecycle policy</param>
///<param name = "body">The snapshot lifecycle policy definition to register</param>
Expand Down
8 changes: 8 additions & 0 deletions src/Nest/Descriptors.SnapshotLifecycleManagement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,14 @@ public GetSnapshotLifecycleDescriptor(): base()
// Request parameters
}

///<summary>Descriptor for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
public partial class GetSnapshotLifecycleStatsDescriptor : RequestDescriptorBase<GetSnapshotLifecycleStatsDescriptor, GetSnapshotLifecycleStatsRequestParameters, IGetSnapshotLifecycleStatsRequest>, IGetSnapshotLifecycleStatsRequest
{
internal override ApiUrls ApiUrls => ApiUrlsLookups.SnapshotLifecycleManagementGetSnapshotLifecycleStats;
// values part of the url path
// Request parameters
}

///<summary>Descriptor for PutSnapshotLifecycle <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/slm-api-put.html</para></summary>
public partial class PutSnapshotLifecycleDescriptor : RequestDescriptorBase<PutSnapshotLifecycleDescriptor, PutSnapshotLifecycleRequestParameters, IPutSnapshotLifecycleRequest>, IPutSnapshotLifecycleRequest
{
Expand Down
24 changes: 24 additions & 0 deletions src/Nest/ElasticClient.SnapshotLifecycleManagement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,30 @@ internal SnapshotLifecycleManagementNamespace(ElasticClient client): base(client
/// </summary>
public Task<GetSnapshotLifecycleResponse> GetSnapshotLifecycleAsync(IGetSnapshotLifecycleRequest request, CancellationToken ct = default) => DoRequestAsync<IGetSnapshotLifecycleRequest, GetSnapshotLifecycleResponse>(request, request.RequestParameters, ct);
/// <summary>
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
/// <para></para>
/// <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>
/// </summary>
public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(Func<GetSnapshotLifecycleStatsDescriptor, IGetSnapshotLifecycleStatsRequest> selector = null) => GetSnapshotLifecycleStats(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor()));
/// <summary>
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
/// <para></para>
/// <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>
/// </summary>
public Task<GetSnapshotLifecycleStatsResponse> GetSnapshotLifecycleStatsAsync(Func<GetSnapshotLifecycleStatsDescriptor, IGetSnapshotLifecycleStatsRequest> selector = null, CancellationToken ct = default) => GetSnapshotLifecycleStatsAsync(selector.InvokeOrDefault(new GetSnapshotLifecycleStatsDescriptor()), ct);
/// <summary>
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
/// <para></para>
/// <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>
/// </summary>
public GetSnapshotLifecycleStatsResponse GetSnapshotLifecycleStats(IGetSnapshotLifecycleStatsRequest request) => DoRequest<IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(request, request.RequestParameters);
/// <summary>
/// <c>GET</c> request to the <c>slm.get_stats</c> API, read more about this API online:
/// <para></para>
/// <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>
/// </summary>
public Task<GetSnapshotLifecycleStatsResponse> GetSnapshotLifecycleStatsAsync(IGetSnapshotLifecycleStatsRequest request, CancellationToken ct = default) => DoRequestAsync<IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(request, request.RequestParameters, ct);
/// <summary>
/// <c>PUT</c> request to the <c>slm.put_lifecycle</c> API, read more about this API online:
/// <para></para>
/// <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>
Expand Down
14 changes: 14 additions & 0 deletions src/Nest/Requests.SnapshotLifecycleManagement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,20 @@ public GetSnapshotLifecycleRequest(): base()
// Request parameters
}

[InterfaceDataContract]
public partial interface IGetSnapshotLifecycleStatsRequest : IRequest<GetSnapshotLifecycleStatsRequestParameters>
{
}

///<summary>Request for GetSnapshotLifecycleStats <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/slm-get-stats.html</para></summary>
public partial class GetSnapshotLifecycleStatsRequest : PlainRequestBase<GetSnapshotLifecycleStatsRequestParameters>, 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<PutSnapshotLifecycleRequestParameters>
{
Expand Down
4 changes: 4 additions & 0 deletions src/Nest/XPack/Info/XPackInfo/XPackInfoResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

Expand All @@ -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
Expand Down
46 changes: 46 additions & 0 deletions src/Nest/XPack/Info/XPackUsage/XPackUsageResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class SqlUsage : XPackUsage
[DataMember(Name = "queries")]
public IReadOnlyDictionary<string, QueryUsage> Queries { get; set; } = EmptyReadOnly<string, QueryUsage>.Dictionary;
}

public class XPackUsageResponse : ResponseBase
{
[DataMember(Name = "sql")]
Expand Down Expand Up @@ -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<string, SnapshotPolicyStats> PolicyStats { get; internal set; }
}

public class XPackUsage
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
[MapsApi("slm.get_stats")]
public partial interface IGetSnapshotLifecycleStatsRequest { }

public partial class GetSnapshotLifecycleStatsRequest { }

public partial class GetSnapshotLifecycleStatsDescriptor { }
}
55 changes: 55 additions & 0 deletions src/Nest/XPack/Slm/GetStats/GetSnapshotLifecycleStatsResponse.cs
Original file line number Diff line number Diff line change
@@ -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<string, SnapshotPolicyStats> 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; }
}
}
1 change: 1 addition & 0 deletions src/Nest/_Generated/ApiUrlsLookup.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,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}"});
Expand Down
19 changes: 18 additions & 1 deletion src/Tests/Tests/XPack/Slm/SlmApiTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class SlmApiTests : CoordinatedIntegrationTestBase<XPackCluster>
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)
{
Expand Down Expand Up @@ -116,6 +116,17 @@ public SlmApiTests(XPackCluster cluster, EndpointUsage usage) : base(new Coordin
(v, c, r) => c.SnapshotLifecycleManagement.GetSnapshotLifecycleAsync(r)
)
},
{
GetSnapshotLifecycleStats, u =>
u.Calls<GetSnapshotLifecycleStatsDescriptor, GetSnapshotLifecycleStatsRequest, IGetSnapshotLifecycleStatsRequest, GetSnapshotLifecycleStatsResponse>(
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<DeleteSnapshotLifecycleDescriptor, DeleteSnapshotLifecycleRequest, IDeleteSnapshotLifecycleRequest,
Expand Down Expand Up @@ -198,5 +209,11 @@ [I] public async Task DeleteSnapshotLifecycleResponse() => await Assert<DeleteSn
r.IsValid.Should().BeTrue();
r.Acknowledged.Should().BeTrue();
});

[I] public async Task GetSnapshotLifecycleStatsResponse() => await Assert<GetSnapshotLifecycleStatsResponse>(GetSnapshotLifecycleStats,
(v, r) =>
{
r.IsValid.Should().BeTrue();
});
}
}