Skip to content

Implement cat.ml_trained_models #4562

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
Apr 16, 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 @@ -61,7 +61,6 @@ public static class CodeConfiguration
"cat.ml_data_frame_analytics.json",
"cat.ml_datafeeds.json",
"cat.ml_jobs.json",
"cat.ml_trained_models.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 @@ -693,8 +693,8 @@ public bool? Verbose
}
}

///<summary>Request options for MlTrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
public class MlTrainedModelsRequestParameters : RequestParameters<MlTrainedModelsRequestParameters>
///<summary>Request options for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
public class CatTrainedModelsRequestParameters : RequestParameters<CatTrainedModelsRequestParameters>
{
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
///<summary>
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 @@ -238,23 +238,23 @@ public Task<TResponse> MlJobsAsync<TResponse>(string jobId, MlJobsRequestParamet
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, Url($"_cat/ml/anomaly_detectors/{jobId:jobId}"), ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/trained_models <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
public TResponse MlTrainedModels<TResponse>(MlTrainedModelsRequestParameters requestParameters = null)
public TResponse TrainedModels<TResponse>(CatTrainedModelsRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, "_cat/ml/trained_models", null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/trained_models <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
[MapsApi("cat.ml_trained_models", "")]
public Task<TResponse> MlTrainedModelsAsync<TResponse>(MlTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
public Task<TResponse> TrainedModelsAsync<TResponse>(CatTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_cat/ml/trained_models", ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/trained_models/{model_id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
///<param name = "modelId">The ID of the trained models stats to fetch</param>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
public TResponse MlTrainedModels<TResponse>(string modelId, MlTrainedModelsRequestParameters requestParameters = null)
public TResponse TrainedModels<TResponse>(string modelId, CatTrainedModelsRequestParameters requestParameters = null)
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, Url($"_cat/ml/trained_models/{modelId:modelId}"), null, RequestParams(requestParameters));
///<summary>GET on /_cat/ml/trained_models/{model_id} <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
///<param name = "modelId">The ID of the trained models stats to fetch</param>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
[MapsApi("cat.ml_trained_models", "model_id")]
public Task<TResponse> MlTrainedModelsAsync<TResponse>(string modelId, MlTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
public Task<TResponse> TrainedModelsAsync<TResponse>(string modelId, CatTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, Url($"_cat/ml/trained_models/{modelId:modelId}"), ctx, null, RequestParams(requestParameters));
///<summary>GET on /_cat/nodeattrs <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html</para></summary>
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
Expand Down
94 changes: 94 additions & 0 deletions src/Nest/Cat/CatTrainedModels/CatTrainedModelsRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
using System.Runtime.Serialization;
using Elasticsearch.Net.Utf8Json;

namespace Nest
{
[DataContract]
public class CatTrainedModelsRecord : ICatRecord
{
/// <summary>
/// The time when the trained model was created.
/// </summary>
[DataMember(Name = "create_time")]
public string CreateTime { get; set; }

/// <summary>
/// Information on the creator of the trained model.
/// </summary>
[DataMember(Name = "created_by")]
public string CreatedBy { get; set; }

/// <summary>
/// Identifier for the data frame analytics job that created the model. Only displayed if it is still available.
/// </summary>
[DataMember(Name = "data_frame_analytics_id")]
public string DataFrameAnalyticsId { get; set; }

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

/// <summary>
/// (Default) The estimated heap size to keep the trained model in memory.
/// </summary>
[DataMember(Name = "heap_size")]
public string HeapSize { get; set; }

/// <summary>
/// (Default) Identifier for the trained model.
/// </summary>
[DataMember(Name = "id")]
public string Id { get; set; }

/// <summary>
/// The total number of documents that are processed by the model.
/// </summary>
[DataMember(Name = "ingest.count")]
public long? IngestCount { get; set; }

/// <summary>
/// The total number of documents that are currently being handled by the trained model.
/// </summary>
[DataMember(Name = "ingest.current")]
public long? IngestCurrent { get; set; }

/// <summary>
/// The total number of failed ingest attempts with the trained model.
/// </summary>
[DataMember(Name = "ingest.failed")]
public long? IngestFailed { get; set; }

/// <summary>
/// (Default) The total number of ingest pipelines that are referencing the trained model.
/// </summary>
[DataMember(Name = "ingest.pipelines")]
public long? IngestPipelines { get; set; }

/// <summary>
/// The total time that is spent processing documents with the trained model.
/// </summary>
[DataMember(Name = "ingest.time")]
public long? IngestTime { get; set; }

/// <summary>
/// The license level of the trained model.
/// </summary>
[DataMember(Name = "license")]
public string License { get; set; }

/// <summary>
/// (Default) The estimated number of operations to use the trained model. This number helps measuring the computational
/// complexity of the model.
/// </summary>
[DataMember(Name = "operations")]
public long? Operations { get; set; }

/// <summary>
/// The Elasticsearch version number in which the trained model was created.
/// </summary>
[DataMember(Name = "version")]
public string Version { get; set; }
}
}
9 changes: 9 additions & 0 deletions src/Nest/Cat/CatTrainedModels/CatTrainedModelsRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Nest
{
[MapsApi("cat.ml_trained_models.json")]
public partial interface ICatTrainedModelsRequest { }

public partial class CatTrainedModelsRequest { }

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

///<summary>Descriptor for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
public partial class CatTrainedModelsDescriptor : RequestDescriptorBase<CatTrainedModelsDescriptor, CatTrainedModelsRequestParameters, ICatTrainedModelsRequest>, ICatTrainedModelsRequest
{
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatTrainedModels;
///<summary>/_cat/ml/trained_models</summary>
public CatTrainedModelsDescriptor(): base()
{
}

///<summary>/_cat/ml/trained_models/{model_id}</summary>
///<param name = "modelId">Optional, accepts null</param>
public CatTrainedModelsDescriptor(Id modelId): base(r => r.Optional("model_id", modelId))
{
}

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

///<summary>Descriptor for NodeAttributes <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html</para></summary>
public partial class CatNodeAttributesDescriptor : RequestDescriptorBase<CatNodeAttributesDescriptor, CatNodeAttributesRequestParameters, ICatNodeAttributesRequest>, ICatNodeAttributesRequest
{
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_trained_models</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</a>
/// </summary>
public CatResponse<CatTrainedModelsRecord> TrainedModels(Func<CatTrainedModelsDescriptor, ICatTrainedModelsRequest> selector = null) => TrainedModels(selector.InvokeOrDefault(new CatTrainedModelsDescriptor()));
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</a>
/// </summary>
public Task<CatResponse<CatTrainedModelsRecord>> TrainedModelsAsync(Func<CatTrainedModelsDescriptor, ICatTrainedModelsRequest> selector = null, CancellationToken ct = default) => TrainedModelsAsync(selector.InvokeOrDefault(new CatTrainedModelsDescriptor()), ct);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</a>
/// </summary>
public CatResponse<CatTrainedModelsRecord> TrainedModels(ICatTrainedModelsRequest request) => DoCat<ICatTrainedModelsRequest, CatTrainedModelsRequestParameters, CatTrainedModelsRecord>(request);
/// <summary>
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html">https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</a>
/// </summary>
public Task<CatResponse<CatTrainedModelsRecord>> TrainedModelsAsync(ICatTrainedModelsRequest request, CancellationToken ct = default) => DoCatAsync<ICatTrainedModelsRequest, CatTrainedModelsRequestParameters, CatTrainedModelsRecord>(request, ct);
/// <summary>
/// <c>GET</c> request to the <c>cat.nodeattrs</c> API, read more about this API online:
/// <para></para>
/// <a href = "https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html">https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html</a>
Expand Down
101 changes: 101 additions & 0 deletions src/Nest/Requests.Cat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,107 @@ public bool? Verbose
}
}

[InterfaceDataContract]
public partial interface ICatTrainedModelsRequest : IRequest<CatTrainedModelsRequestParameters>
{
[IgnoreDataMember]
Id ModelId
{
get;
}
}

///<summary>Request for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
public partial class CatTrainedModelsRequest : PlainRequestBase<CatTrainedModelsRequestParameters>, ICatTrainedModelsRequest
{
protected ICatTrainedModelsRequest Self => this;
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatTrainedModels;
///<summary>/_cat/ml/trained_models</summary>
public CatTrainedModelsRequest(): base()
{
}

///<summary>/_cat/ml/trained_models/{model_id}</summary>
///<param name = "modelId">Optional, accepts null</param>
public CatTrainedModelsRequest(Id modelId): base(r => r.Optional("model_id", modelId))
{
}

// values part of the url path
[IgnoreDataMember]
Id ICatTrainedModelsRequest.ModelId => Self.RouteValues.Get<Id>("model_id");
// Request parameters
///<summary>
/// Whether to ignore if a wildcard expression matches no trained models. (This includes `_all` string or when no trained models 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>skips a number of trained models</summary>
public int? From
{
get => Q<int? >("from");
set => Q("from", 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>specifies a max number of trained models to get</summary>
public int? Size
{
get => Q<int? >("size");
set => Q("size", 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 ICatNodeAttributesRequest : IRequest<CatNodeAttributesRequestParameters>
{
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 @@ -34,7 +34,7 @@ internal static class ApiUrlsLookups
internal static ApiUrls CatMlDataFrameAnalytics = new ApiUrls(new[]{"_cat/ml/data_frame/analytics", "_cat/ml/data_frame/analytics/{id}"});
internal static ApiUrls CatMlDatafeeds = new ApiUrls(new[]{"_cat/ml/datafeeds", "_cat/ml/datafeeds/{datafeed_id}"});
internal static ApiUrls CatMlJobs = new ApiUrls(new[]{"_cat/ml/anomaly_detectors", "_cat/ml/anomaly_detectors/{job_id}"});
internal static ApiUrls CatMlTrainedModels = new ApiUrls(new[]{"_cat/ml/trained_models", "_cat/ml/trained_models/{model_id}"});
internal static ApiUrls CatTrainedModels = new ApiUrls(new[]{"_cat/ml/trained_models", "_cat/ml/trained_models/{model_id}"});
internal static ApiUrls CatNodeAttributes = new ApiUrls(new[]{"_cat/nodeattrs"});
internal static ApiUrls CatNodes = new ApiUrls(new[]{"_cat/nodes"});
internal static ApiUrls CatPendingTasks = new ApiUrls(new[]{"_cat/pending_tasks"});
Expand Down
32 changes: 32 additions & 0 deletions tests/Tests/Cat/CatTrainedModels/CatTrainedModelsApiTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Elastic.Xunit.XunitPlumbing;
using Elasticsearch.Net;
using FluentAssertions;
using Nest;
using Tests.Core.Extensions;
using Tests.Core.ManagedElasticsearch.Clusters;
using Tests.Framework.EndpointTests;
using Tests.Framework.EndpointTests.TestState;

namespace Tests.Cat.CatTrainedModels
{
[SkipVersion("<7.7.0", "Introduced in 7.7.0")]
public class CatTrainedModelsApiTests
: ApiIntegrationTestBase<ReadOnlyCluster, CatResponse<CatTrainedModelsRecord>, ICatTrainedModelsRequest, CatTrainedModelsDescriptor, CatTrainedModelsRequest>
{
public CatTrainedModelsApiTests(ReadOnlyCluster 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/trained_models";

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

protected override void ExpectResponse(CatResponse<CatTrainedModelsRecord> response) => response.ShouldBeValid();
}
}
Loading