Skip to content

Commit 0f03de5

Browse files
authored
Implement exponential average search time per hour statistics. (#44683)
1 parent 8479347 commit 0f03de5

File tree

24 files changed

+859
-229
lines changed

24 files changed

+859
-229
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/ml/datafeed/DatafeedTimingStats.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class DatafeedTimingStats implements ToXContentObject {
3939
public static final ParseField BUCKET_COUNT = new ParseField("bucket_count");
4040
public static final ParseField TOTAL_SEARCH_TIME_MS = new ParseField("total_search_time_ms");
4141
public static final ParseField AVG_SEARCH_TIME_PER_BUCKET_MS = new ParseField("average_search_time_per_bucket_ms");
42+
public static final ParseField EXPONENTIAL_AVG_SEARCH_TIME_PER_HOUR_MS = new ParseField("exponential_average_search_time_per_hour_ms");
4243

4344
public static final ParseField TYPE = new ParseField("datafeed_timing_stats");
4445

@@ -55,18 +56,21 @@ private static ConstructingObjectParser<DatafeedTimingStats, Void> createParser(
5556
Long bucketCount = (Long) args[2];
5657
Double totalSearchTimeMs = (Double) args[3];
5758
Double avgSearchTimePerBucketMs = (Double) args[4];
59+
Double exponentialAvgSearchTimePerHourMs = (Double) args[5];
5860
return new DatafeedTimingStats(
5961
jobId,
6062
getOrDefault(searchCount, 0L),
6163
getOrDefault(bucketCount, 0L),
6264
getOrDefault(totalSearchTimeMs, 0.0),
63-
avgSearchTimePerBucketMs);
65+
avgSearchTimePerBucketMs,
66+
exponentialAvgSearchTimePerHourMs);
6467
});
6568
parser.declareString(constructorArg(), JOB_ID);
6669
parser.declareLong(optionalConstructorArg(), SEARCH_COUNT);
6770
parser.declareLong(optionalConstructorArg(), BUCKET_COUNT);
6871
parser.declareDouble(optionalConstructorArg(), TOTAL_SEARCH_TIME_MS);
6972
parser.declareDouble(optionalConstructorArg(), AVG_SEARCH_TIME_PER_BUCKET_MS);
73+
parser.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_SEARCH_TIME_PER_HOUR_MS);
7074
return parser;
7175
}
7276

@@ -75,14 +79,21 @@ private static ConstructingObjectParser<DatafeedTimingStats, Void> createParser(
7579
private long bucketCount;
7680
private double totalSearchTimeMs;
7781
private Double avgSearchTimePerBucketMs;
82+
private Double exponentialAvgSearchTimePerHourMs;
7883

7984
public DatafeedTimingStats(
80-
String jobId, long searchCount, long bucketCount, double totalSearchTimeMs, @Nullable Double avgSearchTimePerBucketMs) {
85+
String jobId,
86+
long searchCount,
87+
long bucketCount,
88+
double totalSearchTimeMs,
89+
@Nullable Double avgSearchTimePerBucketMs,
90+
@Nullable Double exponentialAvgSearchTimePerHourMs) {
8191
this.jobId = Objects.requireNonNull(jobId);
8292
this.searchCount = searchCount;
8393
this.bucketCount = bucketCount;
8494
this.totalSearchTimeMs = totalSearchTimeMs;
8595
this.avgSearchTimePerBucketMs = avgSearchTimePerBucketMs;
96+
this.exponentialAvgSearchTimePerHourMs = exponentialAvgSearchTimePerHourMs;
8697
}
8798

8899
public String getJobId() {
@@ -105,6 +116,10 @@ public Double getAvgSearchTimePerBucketMs() {
105116
return avgSearchTimePerBucketMs;
106117
}
107118

119+
public Double getExponentialAvgSearchTimePerHourMs() {
120+
return exponentialAvgSearchTimePerHourMs;
121+
}
122+
108123
@Override
109124
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
110125
builder.startObject();
@@ -115,6 +130,9 @@ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params par
115130
if (avgSearchTimePerBucketMs != null) {
116131
builder.field(AVG_SEARCH_TIME_PER_BUCKET_MS.getPreferredName(), avgSearchTimePerBucketMs);
117132
}
133+
if (exponentialAvgSearchTimePerHourMs != null) {
134+
builder.field(EXPONENTIAL_AVG_SEARCH_TIME_PER_HOUR_MS.getPreferredName(), exponentialAvgSearchTimePerHourMs);
135+
}
118136
builder.endObject();
119137
return builder;
120138
}
@@ -133,12 +151,19 @@ public boolean equals(Object obj) {
133151
&& this.searchCount == other.searchCount
134152
&& this.bucketCount == other.bucketCount
135153
&& this.totalSearchTimeMs == other.totalSearchTimeMs
136-
&& Objects.equals(this.avgSearchTimePerBucketMs, other.avgSearchTimePerBucketMs);
154+
&& Objects.equals(this.avgSearchTimePerBucketMs, other.avgSearchTimePerBucketMs)
155+
&& Objects.equals(this.exponentialAvgSearchTimePerHourMs, other.exponentialAvgSearchTimePerHourMs);
137156
}
138157

139158
@Override
140159
public int hashCode() {
141-
return Objects.hash(jobId, searchCount, bucketCount, totalSearchTimeMs, avgSearchTimePerBucketMs);
160+
return Objects.hash(
161+
jobId,
162+
searchCount,
163+
bucketCount,
164+
totalSearchTimeMs,
165+
avgSearchTimePerBucketMs,
166+
exponentialAvgSearchTimePerHourMs);
142167
}
143168

144169
@Override

client/rest-high-level/src/main/java/org/elasticsearch/client/ml/job/process/TimingStats.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ public class TimingStats implements ToXContentObject {
4545
public static final ParseField AVG_BUCKET_PROCESSING_TIME_MS = new ParseField("average_bucket_processing_time_ms");
4646
public static final ParseField EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_MS =
4747
new ParseField("exponential_average_bucket_processing_time_ms");
48+
public static final ParseField EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_PER_HOUR_MS =
49+
new ParseField("exponential_average_bucket_processing_time_per_hour_ms");
4850

4951
public static final ConstructingObjectParser<TimingStats, Void> PARSER =
5052
new ConstructingObjectParser<>(
@@ -58,14 +60,16 @@ public class TimingStats implements ToXContentObject {
5860
Double maxBucketProcessingTimeMs = (Double) args[4];
5961
Double avgBucketProcessingTimeMs = (Double) args[5];
6062
Double exponentialAvgBucketProcessingTimeMs = (Double) args[6];
63+
Double exponentialAvgBucketProcessingTimePerHourMs = (Double) args[7];
6164
return new TimingStats(
6265
jobId,
6366
getOrDefault(bucketCount, 0L),
6467
getOrDefault(totalBucketProcessingTimeMs, 0.0),
6568
minBucketProcessingTimeMs,
6669
maxBucketProcessingTimeMs,
6770
avgBucketProcessingTimeMs,
68-
exponentialAvgBucketProcessingTimeMs);
71+
exponentialAvgBucketProcessingTimeMs,
72+
exponentialAvgBucketProcessingTimePerHourMs);
6973
});
7074

7175
static {
@@ -76,6 +80,7 @@ public class TimingStats implements ToXContentObject {
7680
PARSER.declareDouble(optionalConstructorArg(), MAX_BUCKET_PROCESSING_TIME_MS);
7781
PARSER.declareDouble(optionalConstructorArg(), AVG_BUCKET_PROCESSING_TIME_MS);
7882
PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_MS);
83+
PARSER.declareDouble(optionalConstructorArg(), EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_PER_HOUR_MS);
7984
}
8085

8186
private final String jobId;
@@ -85,6 +90,7 @@ public class TimingStats implements ToXContentObject {
8590
private Double maxBucketProcessingTimeMs;
8691
private Double avgBucketProcessingTimeMs;
8792
private Double exponentialAvgBucketProcessingTimeMs;
93+
private Double exponentialAvgBucketProcessingTimePerHourMs;
8894

8995
public TimingStats(
9096
String jobId,
@@ -93,14 +99,16 @@ public TimingStats(
9399
@Nullable Double minBucketProcessingTimeMs,
94100
@Nullable Double maxBucketProcessingTimeMs,
95101
@Nullable Double avgBucketProcessingTimeMs,
96-
@Nullable Double exponentialAvgBucketProcessingTimeMs) {
102+
@Nullable Double exponentialAvgBucketProcessingTimeMs,
103+
@Nullable Double exponentialAvgBucketProcessingTimePerHourMs) {
97104
this.jobId = jobId;
98105
this.bucketCount = bucketCount;
99106
this.totalBucketProcessingTimeMs = totalBucketProcessingTimeMs;
100107
this.minBucketProcessingTimeMs = minBucketProcessingTimeMs;
101108
this.maxBucketProcessingTimeMs = maxBucketProcessingTimeMs;
102109
this.avgBucketProcessingTimeMs = avgBucketProcessingTimeMs;
103110
this.exponentialAvgBucketProcessingTimeMs = exponentialAvgBucketProcessingTimeMs;
111+
this.exponentialAvgBucketProcessingTimePerHourMs = exponentialAvgBucketProcessingTimePerHourMs;
104112
}
105113

106114
public String getJobId() {
@@ -131,6 +139,10 @@ public Double getExponentialAvgBucketProcessingTimeMs() {
131139
return exponentialAvgBucketProcessingTimeMs;
132140
}
133141

142+
public Double getExponentialAvgBucketProcessingTimePerHourMs() {
143+
return exponentialAvgBucketProcessingTimePerHourMs;
144+
}
145+
134146
@Override
135147
public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params params) throws IOException {
136148
builder.startObject();
@@ -149,6 +161,10 @@ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params par
149161
if (exponentialAvgBucketProcessingTimeMs != null) {
150162
builder.field(EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_MS.getPreferredName(), exponentialAvgBucketProcessingTimeMs);
151163
}
164+
if (exponentialAvgBucketProcessingTimePerHourMs != null) {
165+
builder.field(
166+
EXPONENTIAL_AVG_BUCKET_PROCESSING_TIME_PER_HOUR_MS.getPreferredName(), exponentialAvgBucketProcessingTimePerHourMs);
167+
}
152168
builder.endObject();
153169
return builder;
154170
}
@@ -164,7 +180,8 @@ public boolean equals(Object o) {
164180
&& Objects.equals(this.minBucketProcessingTimeMs, that.minBucketProcessingTimeMs)
165181
&& Objects.equals(this.maxBucketProcessingTimeMs, that.maxBucketProcessingTimeMs)
166182
&& Objects.equals(this.avgBucketProcessingTimeMs, that.avgBucketProcessingTimeMs)
167-
&& Objects.equals(this.exponentialAvgBucketProcessingTimeMs, that.exponentialAvgBucketProcessingTimeMs);
183+
&& Objects.equals(this.exponentialAvgBucketProcessingTimeMs, that.exponentialAvgBucketProcessingTimeMs)
184+
&& Objects.equals(this.exponentialAvgBucketProcessingTimePerHourMs, that.exponentialAvgBucketProcessingTimePerHourMs);
168185
}
169186

170187
@Override
@@ -176,7 +193,8 @@ public int hashCode() {
176193
minBucketProcessingTimeMs,
177194
maxBucketProcessingTimeMs,
178195
avgBucketProcessingTimeMs,
179-
exponentialAvgBucketProcessingTimeMs);
196+
exponentialAvgBucketProcessingTimeMs,
197+
exponentialAvgBucketProcessingTimePerHourMs);
180198
}
181199

182200
@Override

client/rest-high-level/src/test/java/org/elasticsearch/client/ml/datafeed/DatafeedTimingStatsTests.java

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,12 @@ public class DatafeedTimingStatsTests extends AbstractXContentTestCase<DatafeedT
3535

3636
public static DatafeedTimingStats createRandomInstance() {
3737
return new DatafeedTimingStats(
38-
randomAlphaOfLength(10), randomLong(), randomLong(), randomDouble(), randomBoolean() ? null : randomDouble());
38+
randomAlphaOfLength(10),
39+
randomLong(),
40+
randomLong(),
41+
randomDouble(),
42+
randomBoolean() ? null : randomDouble(),
43+
randomBoolean() ? null : randomDouble());
3944
}
4045

4146
@Override
@@ -64,35 +69,17 @@ public void testParse_OptionalFieldsAbsent() throws IOException {
6469
assertThat(stats.getBucketCount(), equalTo(0L));
6570
assertThat(stats.getTotalSearchTimeMs(), equalTo(0.0));
6671
assertThat(stats.getAvgSearchTimePerBucketMs(), nullValue());
72+
assertThat(stats.getExponentialAvgSearchTimePerHourMs(), nullValue());
6773
}
6874
}
6975

70-
public void testEquals() {
71-
DatafeedTimingStats stats1 = new DatafeedTimingStats(JOB_ID, 5, 10, 100.0, 20.0);
72-
DatafeedTimingStats stats2 = new DatafeedTimingStats(JOB_ID, 5, 10, 100.0, 20.0);
73-
DatafeedTimingStats stats3 = new DatafeedTimingStats(JOB_ID, 5, 10, 200.0, 20.0);
74-
75-
assertTrue(stats1.equals(stats1));
76-
assertTrue(stats1.equals(stats2));
77-
assertFalse(stats2.equals(stats3));
78-
}
79-
80-
public void testHashCode() {
81-
DatafeedTimingStats stats1 = new DatafeedTimingStats(JOB_ID, 5, 10, 100.0, 20.0);
82-
DatafeedTimingStats stats2 = new DatafeedTimingStats(JOB_ID, 5, 10, 100.0, 20.0);
83-
DatafeedTimingStats stats3 = new DatafeedTimingStats(JOB_ID, 5, 10, 200.0, 20.0);
84-
85-
assertEquals(stats1.hashCode(), stats1.hashCode());
86-
assertEquals(stats1.hashCode(), stats2.hashCode());
87-
assertNotEquals(stats2.hashCode(), stats3.hashCode());
88-
}
89-
9076
public void testConstructorAndGetters() {
91-
DatafeedTimingStats stats = new DatafeedTimingStats(JOB_ID, 5, 10, 123.456, 78.9);
77+
DatafeedTimingStats stats = new DatafeedTimingStats(JOB_ID, 5, 10, 123.456, 78.9, 98.7);
9278
assertThat(stats.getJobId(), equalTo(JOB_ID));
9379
assertThat(stats.getSearchCount(), equalTo(5L));
9480
assertThat(stats.getBucketCount(), equalTo(10L));
9581
assertThat(stats.getTotalSearchTimeMs(), equalTo(123.456));
9682
assertThat(stats.getAvgSearchTimePerBucketMs(), equalTo(78.9));
83+
assertThat(stats.getExponentialAvgSearchTimePerHourMs(), equalTo(98.7));
9784
}
9885
}

client/rest-high-level/src/test/java/org/elasticsearch/client/ml/job/process/TimingStatsTests.java

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public static TimingStats createTestInstance(String jobId) {
4141
randomBoolean() ? null : randomDouble(),
4242
randomBoolean() ? null : randomDouble(),
4343
randomBoolean() ? null : randomDouble(),
44+
randomBoolean() ? null : randomDouble(),
4445
randomBoolean() ? null : randomDouble());
4546
}
4647

@@ -60,7 +61,7 @@ protected boolean supportsUnknownFields() {
6061
}
6162

6263
public void testConstructor() {
63-
TimingStats stats = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89);
64+
TimingStats stats = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89, 4.56);
6465

6566
assertThat(stats.getJobId(), equalTo(JOB_ID));
6667
assertThat(stats.getBucketCount(), equalTo(7L));
@@ -69,10 +70,11 @@ public void testConstructor() {
6970
assertThat(stats.getMaxBucketProcessingTimeMs(), equalTo(2.0));
7071
assertThat(stats.getAvgBucketProcessingTimeMs(), equalTo(1.23));
7172
assertThat(stats.getExponentialAvgBucketProcessingTimeMs(), equalTo(7.89));
73+
assertThat(stats.getExponentialAvgBucketProcessingTimePerHourMs(), equalTo(4.56));
7274
}
7375

7476
public void testConstructor_NullValues() {
75-
TimingStats stats = new TimingStats(JOB_ID, 7, 8.61, null, null, null, null);
77+
TimingStats stats = new TimingStats(JOB_ID, 7, 8.61, null, null, null, null, null);
7678

7779
assertThat(stats.getJobId(), equalTo(JOB_ID));
7880
assertThat(stats.getBucketCount(), equalTo(7L));
@@ -81,6 +83,7 @@ public void testConstructor_NullValues() {
8183
assertThat(stats.getMaxBucketProcessingTimeMs(), nullValue());
8284
assertThat(stats.getAvgBucketProcessingTimeMs(), nullValue());
8385
assertThat(stats.getExponentialAvgBucketProcessingTimeMs(), nullValue());
86+
assertThat(stats.getExponentialAvgBucketProcessingTimePerHourMs(), nullValue());
8487
}
8588

8689
public void testParse_OptionalFieldsAbsent() throws IOException {
@@ -96,26 +99,7 @@ public void testParse_OptionalFieldsAbsent() throws IOException {
9699
assertThat(stats.getMaxBucketProcessingTimeMs(), nullValue());
97100
assertThat(stats.getAvgBucketProcessingTimeMs(), nullValue());
98101
assertThat(stats.getExponentialAvgBucketProcessingTimeMs(), nullValue());
102+
assertThat(stats.getExponentialAvgBucketProcessingTimePerHourMs(), nullValue());
99103
}
100104
}
101-
102-
public void testEquals() {
103-
TimingStats stats1 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89);
104-
TimingStats stats2 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89);
105-
TimingStats stats3 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 3.0, 1.23, 7.89);
106-
107-
assertTrue(stats1.equals(stats1));
108-
assertTrue(stats1.equals(stats2));
109-
assertFalse(stats2.equals(stats3));
110-
}
111-
112-
public void testHashCode() {
113-
TimingStats stats1 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89);
114-
TimingStats stats2 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 2.0, 1.23, 7.89);
115-
TimingStats stats3 = new TimingStats(JOB_ID, 7, 8.61, 1.0, 3.0, 1.23, 7.89);
116-
117-
assertEquals(stats1.hashCode(), stats1.hashCode());
118-
assertEquals(stats1.hashCode(), stats2.hashCode());
119-
assertNotEquals(stats2.hashCode(), stats3.hashCode());
120-
}
121105
}

0 commit comments

Comments
 (0)