Skip to content

Commit

Permalink
Implement Get SLM Stats API (#4264)
Browse files Browse the repository at this point in the history
Implement Get SLM Stats API and add XPack usage API response items.

(cherry picked from commit 48cdd63)
  • Loading branch information
codebrain committed Dec 13, 2019
1 parent b1d30eb commit c189419
Show file tree
Hide file tree
Showing 12 changed files with 194 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ public class GetSnapshotLifecycleRequestParameters : RequestParameters<GetSnapsh
public override bool SupportsBody => false;
}

///<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 @@ -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}"});
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();
});
}
}

0 comments on commit c189419

Please sign in to comment.