Skip to content

Commit fffa867

Browse files
authored
Add timing stats to machine learning job stats (#4069)
Relates: #4001 This commit adds timing stats to Machine Learning job stats
1 parent 45f6140 commit fffa867

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

src/Nest/XPack/MachineLearning/Job/Config/JobStats.cs

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using System.Runtime.Serialization;
34
using Elasticsearch.Net;
5+
using Elasticsearch.Net.Utf8Json;
46

57
namespace Nest
68
{
@@ -57,6 +59,47 @@ public class JobStats
5759
/// </summary>
5860
[DataMember(Name = "state")]
5961
public JobState State { get; internal set; }
62+
63+
/// <summary>
64+
/// Timing-related statistics about the job's progress
65+
/// <para />
66+
/// Valid only in Elasticsearch 7.3.0+
67+
/// </summary>
68+
[DataMember(Name = "timing_stats")]
69+
public TimingStats TimingStats { get; internal set; }
70+
}
71+
72+
public class TimingStats
73+
{
74+
[DataMember(Name = "job_id")]
75+
public string JobId { get; internal set; }
76+
77+
[DataMember(Name = "bucket_count")]
78+
public long BucketCount { get; internal set; }
79+
80+
/// <summary>
81+
/// Minimum among all bucket processing times in milliseconds
82+
/// </summary>
83+
[DataMember(Name = "minimum_bucket_processing_time_ms")]
84+
public double MinimumBucketProcessingTimeMilliseconds { get; internal set; }
85+
86+
/// <summary>
87+
/// Maximum among all bucket processing times in milliseconds
88+
/// </summary>
89+
[DataMember(Name = "maximum_bucket_processing_time_ms")]
90+
public double MaximumBucketProcessingTimeMilliseconds { get; internal set; }
91+
92+
/// <summary>
93+
/// Average of all bucket processing times in milliseconds
94+
/// </summary>
95+
[DataMember(Name = "average_bucket_processing_time_ms")]
96+
public double AverageBucketProcessingTimeMilliseconds { get; internal set; }
97+
98+
/// <summary>
99+
/// Exponential moving average of all bucket processing times in milliseconds
100+
/// </summary>
101+
[DataMember(Name = "exponential_average_bucket_processing_time_ms")]
102+
public double ExponentialAverageBucketProcessingTimeMilliseconds { get; internal set; }
60103
}
61104

62105
public class JobForecastStatistics

src/Tests/Tests/XPack/MachineLearning/GetJobStats/GetJobStatsApiTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Elasticsearch.Net;
44
using FluentAssertions;
55
using Nest;
6+
using Tests.Configuration;
67
using Tests.Core.Extensions;
78
using Tests.Framework.EndpointTests.TestState;
89

@@ -26,6 +27,11 @@ protected override void IntegrationSetup(IElasticClient client, CallUniqueValues
2627
foreach (var callUniqueValue in values) PutJob(client, callUniqueValue.Value);
2728
}
2829

30+
protected override void IntegrationTeardown(IElasticClient client, CallUniqueValues values)
31+
{
32+
foreach (var callUniqueValue in values) DeleteJob(client, callUniqueValue.Value);
33+
}
34+
2935
protected override LazyResponses ClientUsage() => Calls(
3036
(client, f) => client.MachineLearning.GetJobStats(f),
3137
(client, f) => client.MachineLearning.GetJobStatsAsync(f),
@@ -65,6 +71,17 @@ protected override void ExpectResponse(GetJobStatsResponse response)
6571
firstJob.ModelSizeStats.TotalByFieldCount.Should().Be(0);
6672
firstJob.ModelSizeStats.TotalOverFieldCount.Should().Be(0);
6773
firstJob.ModelSizeStats.TotalPartitionFieldCount.Should().Be(0);
74+
75+
if (TestConfiguration.Instance.InRange(">=7.3.0"))
76+
{
77+
firstJob.TimingStats.Should().NotBeNull();
78+
firstJob.TimingStats.JobId.Should().Be(firstJob.JobId);
79+
firstJob.TimingStats.BucketCount.Should().Be(0);
80+
firstJob.TimingStats.MinimumBucketProcessingTimeMilliseconds.Should().Be(0);
81+
firstJob.TimingStats.MaximumBucketProcessingTimeMilliseconds.Should().Be(0);
82+
firstJob.TimingStats.AverageBucketProcessingTimeMilliseconds.Should().Be(0);
83+
firstJob.TimingStats.ExponentialAverageBucketProcessingTimeMilliseconds.Should().Be(0);
84+
}
6885
}
6986
}
7087

0 commit comments

Comments
 (0)