Skip to content

Commit 4adbf12

Browse files
authored
Implement cat.ml_trained_models (#4562)
Implement cat.ml_trained_models
1 parent 70eed9c commit 4adbf12

File tree

11 files changed

+334
-8
lines changed

11 files changed

+334
-8
lines changed

src/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
"cat.ml_data_frame_analytics.json",
6262
"cat.ml_datafeeds.json",
6363
"cat.ml_jobs.json",
64-
"cat.ml_trained_models.json",
6564
"cluster.delete_component_template.json",
6665
"cluster.get_component_template.json",
6766
"cluster.put_component_template.json",

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,8 +693,8 @@ public bool? Verbose
693693
}
694694
}
695695

696-
///<summary>Request options for MlTrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
697-
public class MlTrainedModelsRequestParameters : RequestParameters<MlTrainedModelsRequestParameters>
696+
///<summary>Request options for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
697+
public class CatTrainedModelsRequestParameters : RequestParameters<CatTrainedModelsRequestParameters>
698698
{
699699
public override HttpMethod DefaultHttpMethod => HttpMethod.GET;
700700
///<summary>

src/Elasticsearch.Net/ElasticLowLevelClient.Cat.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,23 +238,23 @@ public Task<TResponse> MlJobsAsync<TResponse>(string jobId, MlJobsRequestParamet
238238
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, Url($"_cat/ml/anomaly_detectors/{jobId:jobId}"), ctx, null, RequestParams(requestParameters));
239239
///<summary>GET on /_cat/ml/trained_models <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
240240
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
241-
public TResponse MlTrainedModels<TResponse>(MlTrainedModelsRequestParameters requestParameters = null)
241+
public TResponse TrainedModels<TResponse>(CatTrainedModelsRequestParameters requestParameters = null)
242242
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, "_cat/ml/trained_models", null, RequestParams(requestParameters));
243243
///<summary>GET on /_cat/ml/trained_models <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
244244
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
245245
[MapsApi("cat.ml_trained_models", "")]
246-
public Task<TResponse> MlTrainedModelsAsync<TResponse>(MlTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
246+
public Task<TResponse> TrainedModelsAsync<TResponse>(CatTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
247247
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, "_cat/ml/trained_models", ctx, null, RequestParams(requestParameters));
248248
///<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>
249249
///<param name = "modelId">The ID of the trained models stats to fetch</param>
250250
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
251-
public TResponse MlTrainedModels<TResponse>(string modelId, MlTrainedModelsRequestParameters requestParameters = null)
251+
public TResponse TrainedModels<TResponse>(string modelId, CatTrainedModelsRequestParameters requestParameters = null)
252252
where TResponse : class, IElasticsearchResponse, new() => DoRequest<TResponse>(GET, Url($"_cat/ml/trained_models/{modelId:modelId}"), null, RequestParams(requestParameters));
253253
///<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>
254254
///<param name = "modelId">The ID of the trained models stats to fetch</param>
255255
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
256256
[MapsApi("cat.ml_trained_models", "model_id")]
257-
public Task<TResponse> MlTrainedModelsAsync<TResponse>(string modelId, MlTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
257+
public Task<TResponse> TrainedModelsAsync<TResponse>(string modelId, CatTrainedModelsRequestParameters requestParameters = null, CancellationToken ctx = default)
258258
where TResponse : class, IElasticsearchResponse, new() => DoRequestAsync<TResponse>(GET, Url($"_cat/ml/trained_models/{modelId:modelId}"), ctx, null, RequestParams(requestParameters));
259259
///<summary>GET on /_cat/nodeattrs <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html</para></summary>
260260
///<param name = "requestParameters">Request specific configuration such as querystring parameters &amp; request specific connection settings.</param>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
using System.Runtime.Serialization;
2+
using Elasticsearch.Net.Utf8Json;
3+
4+
namespace Nest
5+
{
6+
[DataContract]
7+
public class CatTrainedModelsRecord : ICatRecord
8+
{
9+
/// <summary>
10+
/// The time when the trained model was created.
11+
/// </summary>
12+
[DataMember(Name = "create_time")]
13+
public string CreateTime { get; set; }
14+
15+
/// <summary>
16+
/// Information on the creator of the trained model.
17+
/// </summary>
18+
[DataMember(Name = "created_by")]
19+
public string CreatedBy { get; set; }
20+
21+
/// <summary>
22+
/// Identifier for the data frame analytics job that created the model. Only displayed if it is still available.
23+
/// </summary>
24+
[DataMember(Name = "data_frame_analytics_id")]
25+
public string DataFrameAnalyticsId { get; set; }
26+
27+
/// <summary>
28+
/// The description of the trained model.
29+
/// </summary>
30+
[DataMember(Name = "description")]
31+
public string Description { get; set; }
32+
33+
/// <summary>
34+
/// (Default) The estimated heap size to keep the trained model in memory.
35+
/// </summary>
36+
[DataMember(Name = "heap_size")]
37+
public string HeapSize { get; set; }
38+
39+
/// <summary>
40+
/// (Default) Identifier for the trained model.
41+
/// </summary>
42+
[DataMember(Name = "id")]
43+
public string Id { get; set; }
44+
45+
/// <summary>
46+
/// The total number of documents that are processed by the model.
47+
/// </summary>
48+
[DataMember(Name = "ingest.count")]
49+
public long? IngestCount { get; set; }
50+
51+
/// <summary>
52+
/// The total number of documents that are currently being handled by the trained model.
53+
/// </summary>
54+
[DataMember(Name = "ingest.current")]
55+
public long? IngestCurrent { get; set; }
56+
57+
/// <summary>
58+
/// The total number of failed ingest attempts with the trained model.
59+
/// </summary>
60+
[DataMember(Name = "ingest.failed")]
61+
public long? IngestFailed { get; set; }
62+
63+
/// <summary>
64+
/// (Default) The total number of ingest pipelines that are referencing the trained model.
65+
/// </summary>
66+
[DataMember(Name = "ingest.pipelines")]
67+
public long? IngestPipelines { get; set; }
68+
69+
/// <summary>
70+
/// The total time that is spent processing documents with the trained model.
71+
/// </summary>
72+
[DataMember(Name = "ingest.time")]
73+
public long? IngestTime { get; set; }
74+
75+
/// <summary>
76+
/// The license level of the trained model.
77+
/// </summary>
78+
[DataMember(Name = "license")]
79+
public string License { get; set; }
80+
81+
/// <summary>
82+
/// (Default) The estimated number of operations to use the trained model. This number helps measuring the computational
83+
/// complexity of the model.
84+
/// </summary>
85+
[DataMember(Name = "operations")]
86+
public long? Operations { get; set; }
87+
88+
/// <summary>
89+
/// The Elasticsearch version number in which the trained model was created.
90+
/// </summary>
91+
[DataMember(Name = "version")]
92+
public string Version { get; set; }
93+
}
94+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Nest
2+
{
3+
[MapsApi("cat.ml_trained_models.json")]
4+
public partial interface ICatTrainedModelsRequest { }
5+
6+
public partial class CatTrainedModelsRequest { }
7+
8+
public partial class CatTrainedModelsDescriptor { }
9+
}

src/Nest/Descriptors.Cat.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,46 @@ public partial class CatMasterDescriptor : RequestDescriptorBase<CatMasterDescri
296296
public CatMasterDescriptor Verbose(bool? verbose = true) => Qs("v", verbose);
297297
}
298298

299+
///<summary>Descriptor for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
300+
public partial class CatTrainedModelsDescriptor : RequestDescriptorBase<CatTrainedModelsDescriptor, CatTrainedModelsRequestParameters, ICatTrainedModelsRequest>, ICatTrainedModelsRequest
301+
{
302+
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatTrainedModels;
303+
///<summary>/_cat/ml/trained_models</summary>
304+
public CatTrainedModelsDescriptor(): base()
305+
{
306+
}
307+
308+
///<summary>/_cat/ml/trained_models/{model_id}</summary>
309+
///<param name = "modelId">Optional, accepts null</param>
310+
public CatTrainedModelsDescriptor(Id modelId): base(r => r.Optional("model_id", modelId))
311+
{
312+
}
313+
314+
// values part of the url path
315+
Id ICatTrainedModelsRequest.ModelId => Self.RouteValues.Get<Id>("model_id");
316+
///<summary>The ID of the trained models stats to fetch</summary>
317+
public CatTrainedModelsDescriptor ModelId(Id modelId) => Assign(modelId, (a, v) => a.RouteValues.Optional("model_id", v));
318+
// Request parameters
319+
///<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>
320+
public CatTrainedModelsDescriptor AllowNoMatch(bool? allownomatch = true) => Qs("allow_no_match", allownomatch);
321+
///<summary>The unit in which to display byte values</summary>
322+
public CatTrainedModelsDescriptor Bytes(Bytes? bytes) => Qs("bytes", bytes);
323+
///<summary>a short version of the Accept header, e.g. json, yaml</summary>
324+
public CatTrainedModelsDescriptor Format(string format) => Qs("format", format);
325+
///<summary>skips a number of trained models</summary>
326+
public CatTrainedModelsDescriptor From(int? from) => Qs("from", from);
327+
///<summary>Comma-separated list of column names to display</summary>
328+
public CatTrainedModelsDescriptor Headers(params string[] headers) => Qs("h", headers);
329+
///<summary>Return help information</summary>
330+
public CatTrainedModelsDescriptor Help(bool? help = true) => Qs("help", help);
331+
///<summary>specifies a max number of trained models to get</summary>
332+
public CatTrainedModelsDescriptor Size(int? size) => Qs("size", size);
333+
///<summary>Comma-separated list of column names or column aliases to sort by</summary>
334+
public CatTrainedModelsDescriptor SortByColumns(params string[] sortbycolumns) => Qs("s", sortbycolumns);
335+
///<summary>Verbose mode. Display column headers</summary>
336+
public CatTrainedModelsDescriptor Verbose(bool? verbose = true) => Qs("v", verbose);
337+
}
338+
299339
///<summary>Descriptor for NodeAttributes <para>https://www.elastic.co/guide/en/elasticsearch/reference/master/cat-nodeattrs.html</para></summary>
300340
public partial class CatNodeAttributesDescriptor : RequestDescriptorBase<CatNodeAttributesDescriptor, CatNodeAttributesRequestParameters, ICatNodeAttributesRequest>, ICatNodeAttributesRequest
301341
{

src/Nest/ElasticClient.Cat.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,30 @@ internal CatNamespace(ElasticClient client): base(client)
229229
/// </summary>
230230
public Task<CatResponse<CatMasterRecord>> MasterAsync(ICatMasterRequest request, CancellationToken ct = default) => DoCatAsync<ICatMasterRequest, CatMasterRequestParameters, CatMasterRecord>(request, ct);
231231
/// <summary>
232+
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
233+
/// <para></para>
234+
/// <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>
235+
/// </summary>
236+
public CatResponse<CatTrainedModelsRecord> TrainedModels(Func<CatTrainedModelsDescriptor, ICatTrainedModelsRequest> selector = null) => TrainedModels(selector.InvokeOrDefault(new CatTrainedModelsDescriptor()));
237+
/// <summary>
238+
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
239+
/// <para></para>
240+
/// <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>
241+
/// </summary>
242+
public Task<CatResponse<CatTrainedModelsRecord>> TrainedModelsAsync(Func<CatTrainedModelsDescriptor, ICatTrainedModelsRequest> selector = null, CancellationToken ct = default) => TrainedModelsAsync(selector.InvokeOrDefault(new CatTrainedModelsDescriptor()), ct);
243+
/// <summary>
244+
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
245+
/// <para></para>
246+
/// <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>
247+
/// </summary>
248+
public CatResponse<CatTrainedModelsRecord> TrainedModels(ICatTrainedModelsRequest request) => DoCat<ICatTrainedModelsRequest, CatTrainedModelsRequestParameters, CatTrainedModelsRecord>(request);
249+
/// <summary>
250+
/// <c>GET</c> request to the <c>cat.ml_trained_models</c> API, read more about this API online:
251+
/// <para></para>
252+
/// <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>
253+
/// </summary>
254+
public Task<CatResponse<CatTrainedModelsRecord>> TrainedModelsAsync(ICatTrainedModelsRequest request, CancellationToken ct = default) => DoCatAsync<ICatTrainedModelsRequest, CatTrainedModelsRequestParameters, CatTrainedModelsRecord>(request, ct);
255+
/// <summary>
232256
/// <c>GET</c> request to the <c>cat.nodeattrs</c> API, read more about this API online:
233257
/// <para></para>
234258
/// <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>

src/Nest/Requests.Cat.cs

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,107 @@ public bool? Verbose
680680
}
681681
}
682682

683+
[InterfaceDataContract]
684+
public partial interface ICatTrainedModelsRequest : IRequest<CatTrainedModelsRequestParameters>
685+
{
686+
[IgnoreDataMember]
687+
Id ModelId
688+
{
689+
get;
690+
}
691+
}
692+
693+
///<summary>Request for TrainedModels <para>https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-trained-model.html</para></summary>
694+
public partial class CatTrainedModelsRequest : PlainRequestBase<CatTrainedModelsRequestParameters>, ICatTrainedModelsRequest
695+
{
696+
protected ICatTrainedModelsRequest Self => this;
697+
internal override ApiUrls ApiUrls => ApiUrlsLookups.CatTrainedModels;
698+
///<summary>/_cat/ml/trained_models</summary>
699+
public CatTrainedModelsRequest(): base()
700+
{
701+
}
702+
703+
///<summary>/_cat/ml/trained_models/{model_id}</summary>
704+
///<param name = "modelId">Optional, accepts null</param>
705+
public CatTrainedModelsRequest(Id modelId): base(r => r.Optional("model_id", modelId))
706+
{
707+
}
708+
709+
// values part of the url path
710+
[IgnoreDataMember]
711+
Id ICatTrainedModelsRequest.ModelId => Self.RouteValues.Get<Id>("model_id");
712+
// Request parameters
713+
///<summary>
714+
/// Whether to ignore if a wildcard expression matches no trained models. (This includes `_all` string or when no trained models have been
715+
/// specified)
716+
///</summary>
717+
public bool? AllowNoMatch
718+
{
719+
get => Q<bool? >("allow_no_match");
720+
set => Q("allow_no_match", value);
721+
}
722+
723+
///<summary>The unit in which to display byte values</summary>
724+
public Bytes? Bytes
725+
{
726+
get => Q<Bytes? >("bytes");
727+
set => Q("bytes", value);
728+
}
729+
730+
///<summary>a short version of the Accept header, e.g. json, yaml</summary>
731+
public string Format
732+
{
733+
get => Q<string>("format");
734+
set
735+
{
736+
Q("format", value);
737+
SetAcceptHeader(value);
738+
}
739+
}
740+
741+
///<summary>skips a number of trained models</summary>
742+
public int? From
743+
{
744+
get => Q<int? >("from");
745+
set => Q("from", value);
746+
}
747+
748+
///<summary>Comma-separated list of column names to display</summary>
749+
public string[] Headers
750+
{
751+
get => Q<string[]>("h");
752+
set => Q("h", value);
753+
}
754+
755+
///<summary>Return help information</summary>
756+
public bool? Help
757+
{
758+
get => Q<bool? >("help");
759+
set => Q("help", value);
760+
}
761+
762+
///<summary>specifies a max number of trained models to get</summary>
763+
public int? Size
764+
{
765+
get => Q<int? >("size");
766+
set => Q("size", value);
767+
}
768+
769+
///<summary>Comma-separated list of column names or column aliases to sort by</summary>
770+
public string[] SortByColumns
771+
{
772+
get => Q<string[]>("s");
773+
set => Q("s", value);
774+
}
775+
776+
///<summary>Verbose mode. Display column headers</summary>
777+
public bool? Verbose
778+
{
779+
get => Q<bool? >("v");
780+
set => Q("v", value);
781+
}
782+
}
783+
683784
[InterfaceDataContract]
684785
public partial interface ICatNodeAttributesRequest : IRequest<CatNodeAttributesRequestParameters>
685786
{

src/Nest/_Generated/ApiUrlsLookup.generated.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ internal static class ApiUrlsLookups
3434
internal static ApiUrls CatMlDataFrameAnalytics = new ApiUrls(new[]{"_cat/ml/data_frame/analytics", "_cat/ml/data_frame/analytics/{id}"});
3535
internal static ApiUrls CatMlDatafeeds = new ApiUrls(new[]{"_cat/ml/datafeeds", "_cat/ml/datafeeds/{datafeed_id}"});
3636
internal static ApiUrls CatMlJobs = new ApiUrls(new[]{"_cat/ml/anomaly_detectors", "_cat/ml/anomaly_detectors/{job_id}"});
37-
internal static ApiUrls CatMlTrainedModels = new ApiUrls(new[]{"_cat/ml/trained_models", "_cat/ml/trained_models/{model_id}"});
37+
internal static ApiUrls CatTrainedModels = new ApiUrls(new[]{"_cat/ml/trained_models", "_cat/ml/trained_models/{model_id}"});
3838
internal static ApiUrls CatNodeAttributes = new ApiUrls(new[]{"_cat/nodeattrs"});
3939
internal static ApiUrls CatNodes = new ApiUrls(new[]{"_cat/nodes"});
4040
internal static ApiUrls CatPendingTasks = new ApiUrls(new[]{"_cat/pending_tasks"});
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Elastic.Xunit.XunitPlumbing;
2+
using Elasticsearch.Net;
3+
using FluentAssertions;
4+
using Nest;
5+
using Tests.Core.Extensions;
6+
using Tests.Core.ManagedElasticsearch.Clusters;
7+
using Tests.Framework.EndpointTests;
8+
using Tests.Framework.EndpointTests.TestState;
9+
10+
namespace Tests.Cat.CatTrainedModels
11+
{
12+
[SkipVersion("<7.7.0", "Introduced in 7.7.0")]
13+
public class CatTrainedModelsApiTests
14+
: ApiIntegrationTestBase<ReadOnlyCluster, CatResponse<CatTrainedModelsRecord>, ICatTrainedModelsRequest, CatTrainedModelsDescriptor, CatTrainedModelsRequest>
15+
{
16+
public CatTrainedModelsApiTests(ReadOnlyCluster cluster, EndpointUsage usage) : base(cluster, usage) { }
17+
18+
protected override bool ExpectIsValid => true;
19+
protected override int ExpectStatusCode => 200;
20+
protected override HttpMethod HttpMethod => HttpMethod.GET;
21+
protected override string UrlPath => "/_cat/ml/trained_models";
22+
23+
protected override LazyResponses ClientUsage() => Calls(
24+
(client, f) => client.Cat.TrainedModels(),
25+
(client, f) => client.Cat.TrainedModelsAsync(),
26+
(client, r) => client.Cat.TrainedModels(r),
27+
(client, r) => client.Cat.TrainedModelsAsync(r)
28+
);
29+
30+
protected override void ExpectResponse(CatResponse<CatTrainedModelsRecord> response) => response.ShouldBeValid();
31+
}
32+
}

0 commit comments

Comments
 (0)