Skip to content

[Backport master] Implement cat.ml_data_frame_analytics #4617

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 1 commit into from
Apr 17, 2020
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
1 change: 0 additions & 1 deletion src/ApiGenerator/Configuration/CodeConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ public static class CodeConfiguration
"async_search.delete.json",
"async_search.get.json",
"async_search.submit.json",
"cat.ml_data_frame_analytics.json",
"cluster.delete_component_template.json",
"cluster.get_component_template.json",
"cluster.put_component_template.json",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,8 +478,8 @@ public bool? Verbose
}
}

///<summary>Request options for MlDataFrameAnalytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
public class MlDataFrameAnalyticsRequestParameters : RequestParameters<MlDataFrameAnalyticsRequestParameters>
///<summary>Request options for DataFrameAnalytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
public class CatDataFrameAnalyticsRequestParameters : RequestParameters<CatDataFrameAnalyticsRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
public override bool SupportsBody => false;
Expand Down
8 changes: 4 additions & 4 deletions src/Elasticsearch.Net/ElasticLowLevelClient.Cat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,23 +178,23 @@ public Task<TResponse> MasterAsync<TResponse>(CatMasterRequestParameters request
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_cat/master", ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/data_frame/analytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
public TResponse MlDataFrameAnalytics<TResponse>(MlDataFrameAnalyticsRequestParameters requestParameters = null)
public TResponse DataFrameAnalytics<TResponse>(CatDataFrameAnalyticsRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, "_cat/ml/data_frame/analytics", null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/data_frame/analytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
[MapsApi("cat.ml_data_frame_analytics", "")]
public Task<TResponse> MlDataFrameAnalyticsAsync<TResponse>(MlDataFrameAnalyticsRequestParameters requestParameters = null, CancellationToken ctx = default)
public Task<TResponse> DataFrameAnalyticsAsync<TResponse>(CatDataFrameAnalyticsRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_cat/ml/data_frame/analytics", ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/data_frame/analytics/{id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
///<param name = "id">The ID of the data frame analytics to fetch</param>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
public TResponse MlDataFrameAnalytics<TResponse>(string id, MlDataFrameAnalyticsRequestParameters requestParameters = null)
public TResponse DataFrameAnalytics<TResponse>(string id, CatDataFrameAnalyticsRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, Url($"_cat/ml/data_frame/analytics/{id:id}"), null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/data_frame/analytics/{id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
///<param name = "id">The ID of the data frame analytics to fetch</param>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
[MapsApi("cat.ml_data_frame_analytics", "id")]
public Task<TResponse> MlDataFrameAnalyticsAsync<TResponse>(string id, MlDataFrameAnalyticsRequestParameters requestParameters = null, CancellationToken ctx = default)
public Task<TResponse> DataFrameAnalyticsAsync<TResponse>(string id, CatDataFrameAnalyticsRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, Url($"_cat/ml/data_frame/analytics/{id:id}"), ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/datafeeds <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-datafeeds.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
Expand Down
105 changes: 105 additions & 0 deletions src/Nest/Cat/CatDataFrameAnalytics/CatDataFrameAnalyticsRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
using System.Runtime.Serialization;
using Elasticsearch.Net.Utf8Json;

namespace Nest
{
[DataContract]
public class CatDataFrameAnalyticsRecord : ICatRecord
{
/// <summary>
/// Contains messages relating to the selection of a node.
/// </summary>
[DataMember(Name="assignment_explanation")]
public string AssignmentExplanation { get; internal set; }

/// <summary>
/// (Default)The time when the data frame analytics job was created.
/// </summary>
[DataMember(Name="create_time")]
public string CreateTime { get; internal set; }

/// <summary>
/// A description of the job.
/// </summary>
[DataMember(Name="description")]
public string Description { get; internal set; }

/// <summary>
/// Name of the destination index.
/// </summary>
[DataMember(Name="dest_index")]
public string DestinationIndex { get; internal set; }

/// <summary>
/// Contains messages about the reason why a data frame analytics job failed.
/// </summary>
[DataMember(Name="failure_reason")]
public string FailureReason { get; internal set; }

/// <summary>
/// (Default) Identifier for the data frame analytics job.
/// </summary>
[DataMember(Name="id")]
public string Id { get; internal set; }

/// <summary>
/// (Default)The approximate maximum amount of memory resources that are permitted for the data frame analytics job.
/// </summary>
[DataMember(Name="model_memory_limit")]
public string ModelMemoryLimit { get; internal set; }

/// <summary>
/// The network address of the node that the data frame analytics job is assigned to.
/// </summary>
[DataMember(Name="node.address")]
public string NodeAddress { get; internal set; }

/// <summary>
/// The ephemeral ID of the node that the data frame analytics job is assigned to.
/// </summary>
[DataMember(Name="node.ephemeral_id")]
public string NodeEphemeralId { get; internal set; }

/// <summary>
/// The unique identifier of the node that the data frame analytics job is assigned to.
/// </summary>
[DataMember(Name="node.id")]
public string NodeId { get; internal set; }

/// <summary>
/// The name of the node that the data frame analytics job is assigned to.
/// </summary>
[DataMember(Name="node.name")]
public string NodeName { get; internal set; }

/// <summary>
/// The progress report of the data frame analytics job by phase.
/// </summary>
[DataMember(Name="progress")]
public string Progress { get; internal set; }

/// <summary>
/// Name of the source index.
/// </summary>
[DataMember(Name="source_index")]
public string SourceIndex { get; internal set; }

/// <summary>
/// (Default) Current state of the data frame analytics job.
/// </summary>
[DataMember(Name="state")]
public string State { get; internal set; }

/// <summary>
/// (Default) The type of analysis that the data frame analytics job performs.
/// </summary>
[DataMember(Name="type")]
public string Type { get; internal set; }

/// <summary>
/// The Elasticsearch version number in which the data frame analytics job was created.
/// </summary>
[DataMember(Name="version")]
public string Version { get; internal set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
[MapsApi("cat.ml_data_frame_analytics.json")]
public partial interface ICatDataFrameAnalyticsRequest { }

public partial class CatDataFrameAnalyticsRequest { }

public partial class CatDataFrameAnalyticsDescriptor { }
}
36 changes: 36 additions & 0 deletions src/Nest/Descriptors.Cat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,42 @@ public partial class CatMasterDescriptor : RequestDescriptorBase<CatMasterDescri
public CatMasterDescriptor Verbose(bool? verbose = true) => Qs("v", verbose);
}

///<summary>Descriptor for DataFrameAnalytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
public partial class CatDataFrameAnalyticsDescriptor : RequestDescriptorBase<CatDataFrameAnalyticsDescriptor, CatDataFrameAnalyticsRequestParameters, ICatDataFrameAnalyticsRequest>, ICatDataFrameAnalyticsRequest
{
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatDataFrameAnalytics;
///<summary>/_cat/ml/data_frame/analytics</summary>
public CatDataFrameAnalyticsDescriptor(): base()
{
}

///<summary>/_cat/ml/data_frame/analytics/{id}</summary>
///<param name = "id">Optional, accepts null</param>
public CatDataFrameAnalyticsDescriptor(Id id): base(r => r.Optional("id", id))
{
}

// values part of the url path
Id ICatDataFrameAnalyticsRequest.Id => Self.RouteValues.Get<Id>("id");
///<summary>The ID of the data frame analytics to fetch</summary>
public CatDataFrameAnalyticsDescriptor Id(Id id) => Assign(id, (a, v) => a.RouteValues.Optional("id", v));
// Request parameters
///<summary>Whether to ignore if a wildcard expression matches no configs. (This includes `_all` string or when no configs have been specified)</summary>
public CatDataFrameAnalyticsDescriptor AllowNoMatch(bool? allownomatch = true) => Qs("allow_no_match", allownomatch);
///<summary>The unit in which to display byte values</summary>
public CatDataFrameAnalyticsDescriptor Bytes(Bytes? bytes) => Qs("bytes", bytes);
///<summary>a short version of the Accept header, e.g. json, yaml</summary>
public CatDataFrameAnalyticsDescriptor Format(string format) => Qs("format", format);
///<summary>Comma-separated list of column names to display</summary>
public CatDataFrameAnalyticsDescriptor Headers(params string[] headers) => Qs("h", headers);
///<summary>Return help information</summary>
public CatDataFrameAnalyticsDescriptor Help(bool? help = true) => Qs("help", help);
///<summary>Comma-separated list of column names or column aliases to sort by</summary>
public CatDataFrameAnalyticsDescriptor SortByColumns(params string[] sortbycolumns) => Qs("s", sortbycolumns);
///<summary>Verbose mode. Display column headers</summary>
public CatDataFrameAnalyticsDescriptor Verbose(bool? verbose = true) => Qs("v", verbose);
}

///<summary>Descriptor for Datafeeds <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-datafeeds.html</para></summary>
public partial class CatDatafeedsDescriptor : RequestDescriptorBase<CatDatafeedsDescriptor, CatDatafeedsRequestParameters, ICatDatafeedsRequest>, ICatDatafeedsRequest
{
Expand Down
24 changes: 24 additions & 0 deletions src/Nest/ElasticClient.Cat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,30 @@ internal CatNamespace(ElasticClient client): base(client)
/// </summary>
public Task<CatResponse<CatMasterRecord>> MasterAsync(ICatMasterRequest request, CancellationToken ct = default) => DoCatAsync<ICatMasterRequest, CatMasterRequestParameters, CatMasterRecord>(request, ct);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_data_frame_analytics</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</a>
/// </summary>
public CatResponse<CatDataFrameAnalyticsRecord> DataFrameAnalytics(Func<CatDataFrameAnalyticsDescriptor, ICatDataFrameAnalyticsRequest> selector = null) => DataFrameAnalytics(selector.InvokeOrDefault(new CatDataFrameAnalyticsDescriptor()));
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_data_frame_analytics</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</a>
/// </summary>
public Task<CatResponse<CatDataFrameAnalyticsRecord>> DataFrameAnalyticsAsync(Func<CatDataFrameAnalyticsDescriptor, ICatDataFrameAnalyticsRequest> selector = null, CancellationToken ct = default) => DataFrameAnalyticsAsync(selector.InvokeOrDefault(new CatDataFrameAnalyticsDescriptor()), ct);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_data_frame_analytics</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</a>
/// </summary>
public CatResponse<CatDataFrameAnalyticsRecord> DataFrameAnalytics(ICatDataFrameAnalyticsRequest request) => DoCat<ICatDataFrameAnalyticsRequest, CatDataFrameAnalyticsRequestParameters, CatDataFrameAnalyticsRecord>(request);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_data_frame_analytics</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</a>
/// </summary>
public Task<CatResponse<CatDataFrameAnalyticsRecord>> DataFrameAnalyticsAsync(ICatDataFrameAnalyticsRequest request, CancellationToken ct = default) => DoCatAsync<ICatDataFrameAnalyticsRequest, CatDataFrameAnalyticsRequestParameters, CatDataFrameAnalyticsRecord>(request, ct);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_datafeeds</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-datafeeds.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-datafeeds.html</a>
Expand Down
84 changes: 84 additions & 0 deletions src/Nest/Requests.Cat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,90 @@ public bool? Verbose
}
}

[InterfaceDataContract]
public partial interface ICatDataFrameAnalyticsRequest : IRequest<CatDataFrameAnalyticsRequestParameters>
{
[IgnoreDataMember]
Id Id
{
get;
}
}

///<summary>Request for DataFrameAnalytics <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-dfanalytics.html</para></summary>
public partial class CatDataFrameAnalyticsRequest : PlainRequestBase<CatDataFrameAnalyticsRequestParameters>, ICatDataFrameAnalyticsRequest
{
protected ICatDataFrameAnalyticsRequest Self => this;
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatDataFrameAnalytics;
///<summary>/_cat/ml/data_frame/analytics</summary>
public CatDataFrameAnalyticsRequest(): base()
{
}

///<summary>/_cat/ml/data_frame/analytics/{id}</summary>
///<param name = "id">Optional, accepts null</param>
public CatDataFrameAnalyticsRequest(Id id): base(r => r.Optional("id", id))
{
}

// values part of the url path
[IgnoreDataMember]
Id ICatDataFrameAnalyticsRequest.Id => Self.RouteValues.Get<Id>("id");
// Request parameters
///<summary>Whether to ignore if a wildcard expression matches no configs. (This includes `_all` string or when no configs have been specified)</summary>
public bool? AllowNoMatch
{
get => Q<bool? >("allow_no_match");
set => Q("allow_no_match", value);
}

///<summary>The unit in which to display byte values</summary>
public Bytes? Bytes
{
get => Q<Bytes? >("bytes");
set => Q("bytes", value);
}

///<summary>a short version of the Accept header, e.g. json, yaml</summary>
public string Format
{
get => Q<string>("format");
set
{
Q("format", value);
SetAcceptHeader(value);
}
}

///<summary>Comma-separated list of column names to display</summary>
public string[] Headers
{
get => Q<string[]>("h");
set => Q("h", value);
}

///<summary>Return help information</summary>
public bool? Help
{
get => Q<bool? >("help");
set => Q("help", value);
}

///<summary>Comma-separated list of column names or column aliases to sort by</summary>
public string[] SortByColumns
{
get => Q<string[]>("s");
set => Q("s", value);
}

///<summary>Verbose mode. Display column headers</summary>
public bool? Verbose
{
get => Q<bool? >("v");
set => Q("v", value);
}
}

[InterfaceDataContract]
public partial interface ICatDatafeedsRequest : IRequest<CatDatafeedsRequestParameters>
{
Expand Down
2 changes: 1 addition & 1 deletion src/Nest/_Generated/ApiUrlsLookup.generated.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ internal static class ApiUrlsLookups
internal static ApiUrls CatHelp = new ApiUrls(new[]{"_cat"});
internal static ApiUrls CatIndices = new ApiUrls(new[]{"_cat/indices", "_cat/indices/{index}"});
internal static ApiUrls CatMaster = new ApiUrls(new[]{"_cat/master"});
internal static ApiUrls CatMlDataFrameAnalytics = new ApiUrls(new[]{"_cat/ml/data_frame/analytics", "_cat/ml/data_frame/analytics/{id}"});
internal static ApiUrls CatDataFrameAnalytics = new ApiUrls(new[]{"_cat/ml/data_frame/analytics", "_cat/ml/data_frame/analytics/{id}"});
internal static ApiUrls CatDatafeeds = new ApiUrls(new[]{"_cat/ml/datafeeds", "_cat/ml/datafeeds/{datafeed_id}"});
internal static ApiUrls CatJobs = new ApiUrls(new[]{"_cat/ml/anomaly_detectors", "_cat/ml/anomaly_detectors/{job_id}"});
internal static ApiUrls CatTrainedModels = new ApiUrls(new[]{"_cat/ml/trained_models", "_cat/ml/trained_models/{model_id}"});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using Elastic.Xunit.XunitPlumbing;
using Elasticsearch.Net;
using Nest;
using Tests.Core.Extensions;
using Tests.Framework.EndpointTests.TestState;
using Tests.XPack.MachineLearning;

namespace Tests.Cat.CatDataFrameAnalytics
{
[SkipVersion("<7.7.0", "Introduced in 7.7.0")]
public class CatDataFrameAnalyticsApiTests
: MachineLearningIntegrationTestBase<CatResponse<CatDataFrameAnalyticsRecord>, ICatDataFrameAnalyticsRequest, CatDataFrameAnalyticsDescriptor,
CatDataFrameAnalyticsRequest>
{
public CatDataFrameAnalyticsApiTests(MachineLearningCluster cluster, EndpointUsage usage) : base(cluster, usage) { }

protected override bool ExpectIsValid => true;
protected override int ExpectStatusCode => 200;
protected override HttpMethod HttpMethod => HttpMethod.GET;
protected override string UrlPath => "/_cat/ml/data_frame/analytics";

protected override LazyResponses ClientUsage() => Calls(
(client, f) => client.Cat.DataFrameAnalytics(),
(client, f) => client.Cat.DataFrameAnalyticsAsync(),
(client, r) => client.Cat.DataFrameAnalytics(r),
(client, r) => client.Cat.DataFrameAnalyticsAsync(r)
);

protected override void ExpectResponse(CatResponse<CatDataFrameAnalyticsRecord> response) => response.ShouldBeValid();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Threading.Tasks;
using Elastic.Xunit.XunitPlumbing;
using Nest;
using Tests.Framework.EndpointTests;
using static Tests.Framework.EndpointTests.UrlTester;

namespace Tests.Cat.CatDataFrameAnalytics
{
public class CatDataFrameAnalyticsUrlTests : UrlTestsBase
{
[U] public override async Task Urls()
{
await GET("/_cat/ml/data_frame/analytics")
.Fluent(c => c.Cat.DataFrameAnalytics())
.Request(c => c.Cat.DataFrameAnalytics(new CatDataFrameAnalyticsRequest()))
.FluentAsync(c => c.Cat.DataFrameAnalyticsAsync())
.RequestAsync(c => c.Cat.DataFrameAnalyticsAsync(new CatDataFrameAnalyticsRequest()));

await GET("/_cat/ml/data_frame/analytics/analytics-id")
.Fluent(c => c.Cat.DataFrameAnalytics(f => f.Id("analytics-id")))
.Request(c => c.Cat.DataFrameAnalytics(new CatDataFrameAnalyticsRequest("analytics-id")))
.FluentAsync(c => c.Cat.DataFrameAnalyticsAsync(f => f.Id("analytics-id")))
.RequestAsync(c => c.Cat.DataFrameAnalyticsAsync(new CatDataFrameAnalyticsRequest("analytics-id")));
}
}
}