Skip to content

Commit a4a2afb

Browse files
authored
[ML] Refactor copy and paste date parsing code (#34293)
1 parent d967725 commit a4a2afb

File tree

13 files changed

+56
-200
lines changed

13 files changed

+56
-200
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/config/Job.java

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
2121
import org.elasticsearch.common.xcontent.ToXContentObject;
2222
import org.elasticsearch.common.xcontent.XContentBuilder;
23-
import org.elasticsearch.common.xcontent.XContentParser.Token;
2423
import org.elasticsearch.xpack.core.ml.job.messages.Messages;
2524
import org.elasticsearch.xpack.core.ml.job.persistence.AnomalyDetectorsIndexFields;
2625
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.DataCounts;
@@ -98,33 +97,12 @@ private static ObjectParser<Builder, Void> createParser(boolean ignoreUnknownFie
9897
parser.declareString(Builder::setJobVersion, JOB_VERSION);
9998
parser.declareStringArray(Builder::setGroups, GROUPS);
10099
parser.declareStringOrNull(Builder::setDescription, DESCRIPTION);
101-
parser.declareField(Builder::setCreateTime, p -> {
102-
if (p.currentToken() == Token.VALUE_NUMBER) {
103-
return new Date(p.longValue());
104-
} else if (p.currentToken() == Token.VALUE_STRING) {
105-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
106-
}
107-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() +
108-
"] for [" + CREATE_TIME.getPreferredName() + "]");
109-
}, CREATE_TIME, ValueType.VALUE);
110-
parser.declareField(Builder::setFinishedTime, p -> {
111-
if (p.currentToken() == Token.VALUE_NUMBER) {
112-
return new Date(p.longValue());
113-
} else if (p.currentToken() == Token.VALUE_STRING) {
114-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
115-
}
116-
throw new IllegalArgumentException(
117-
"unexpected token [" + p.currentToken() + "] for [" + FINISHED_TIME.getPreferredName() + "]");
118-
}, FINISHED_TIME, ValueType.VALUE);
119-
parser.declareField(Builder::setLastDataTime, p -> {
120-
if (p.currentToken() == Token.VALUE_NUMBER) {
121-
return new Date(p.longValue());
122-
} else if (p.currentToken() == Token.VALUE_STRING) {
123-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
124-
}
125-
throw new IllegalArgumentException(
126-
"unexpected token [" + p.currentToken() + "] for [" + LAST_DATA_TIME.getPreferredName() + "]");
127-
}, LAST_DATA_TIME, ValueType.VALUE);
100+
parser.declareField(Builder::setCreateTime,
101+
p -> TimeUtils.parseTimeField(p, CREATE_TIME.getPreferredName()), CREATE_TIME, ValueType.VALUE);
102+
parser.declareField(Builder::setFinishedTime,
103+
p -> TimeUtils.parseTimeField(p, FINISHED_TIME.getPreferredName()), FINISHED_TIME, ValueType.VALUE);
104+
parser.declareField(Builder::setLastDataTime,
105+
p -> TimeUtils.parseTimeField(p, LAST_DATA_TIME.getPreferredName()), LAST_DATA_TIME, ValueType.VALUE);
128106
parser.declareLong(Builder::setEstablishedModelMemory, ESTABLISHED_MODEL_MEMORY);
129107
parser.declareObject(Builder::setAnalysisConfig, ignoreUnknownFields ? AnalysisConfig.LENIENT_PARSER : AnalysisConfig.STRICT_PARSER,
130108
ANALYSIS_CONFIG);

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/process/autodetect/output/FlushAcknowledgement.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.elasticsearch.common.xcontent.ObjectParser;
1515
import org.elasticsearch.common.xcontent.ToXContentObject;
1616
import org.elasticsearch.common.xcontent.XContentBuilder;
17-
import org.elasticsearch.common.xcontent.XContentParser;
1817
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
1918

2019
import java.io.IOException;
@@ -37,15 +36,9 @@ public class FlushAcknowledgement implements ToXContentObject, Writeable {
3736

3837
static {
3938
PARSER.declareString(ConstructingObjectParser.constructorArg(), ID);
40-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
41-
if (p.currentToken() == XContentParser.Token.VALUE_NUMBER) {
42-
return new Date(p.longValue());
43-
} else if (p.currentToken() == XContentParser.Token.VALUE_STRING) {
44-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
45-
}
46-
throw new IllegalArgumentException(
47-
"unexpected token [" + p.currentToken() + "] for [" + LAST_FINALIZED_BUCKET_END.getPreferredName() + "]");
48-
}, LAST_FINALIZED_BUCKET_END, ObjectParser.ValueType.VALUE);
39+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
40+
p -> TimeUtils.parseTimeField(p, LAST_FINALIZED_BUCKET_END.getPreferredName()),
41+
LAST_FINALIZED_BUCKET_END, ObjectParser.ValueType.VALUE);
4942
}
5043

5144
private String id;

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/process/autodetect/state/DataCounts.java

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
1414
import org.elasticsearch.common.xcontent.ToXContentObject;
1515
import org.elasticsearch.common.xcontent.XContentBuilder;
16-
import org.elasticsearch.common.xcontent.XContentParser.Token;
1716
import org.elasticsearch.xpack.core.ml.job.config.Job;
1817
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
1918

@@ -90,51 +89,16 @@ public class DataCounts implements ToXContentObject, Writeable {
9089
PARSER.declareLong(ConstructingObjectParser.constructorArg(), EMPTY_BUCKET_COUNT);
9190
PARSER.declareLong(ConstructingObjectParser.constructorArg(), SPARSE_BUCKET_COUNT);
9291
PARSER.declareLong(ConstructingObjectParser.constructorArg(), BUCKET_COUNT);
93-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
94-
if (p.currentToken() == Token.VALUE_NUMBER) {
95-
return new Date(p.longValue());
96-
} else if (p.currentToken() == Token.VALUE_STRING) {
97-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
98-
}
99-
throw new IllegalArgumentException(
100-
"unexpected token [" + p.currentToken() + "] for [" + EARLIEST_RECORD_TIME.getPreferredName() + "]");
101-
}, EARLIEST_RECORD_TIME, ValueType.VALUE);
102-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
103-
if (p.currentToken() == Token.VALUE_NUMBER) {
104-
return new Date(p.longValue());
105-
} else if (p.currentToken() == Token.VALUE_STRING) {
106-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
107-
}
108-
throw new IllegalArgumentException(
109-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_RECORD_TIME.getPreferredName() + "]");
110-
}, LATEST_RECORD_TIME, ValueType.VALUE);
111-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
112-
if (p.currentToken() == Token.VALUE_NUMBER) {
113-
return new Date(p.longValue());
114-
} else if (p.currentToken() == Token.VALUE_STRING) {
115-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
116-
}
117-
throw new IllegalArgumentException(
118-
"unexpected token [" + p.currentToken() + "] for [" + LAST_DATA_TIME.getPreferredName() + "]");
119-
}, LAST_DATA_TIME, ValueType.VALUE);
120-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
121-
if (p.currentToken() == Token.VALUE_NUMBER) {
122-
return new Date(p.longValue());
123-
} else if (p.currentToken() == Token.VALUE_STRING) {
124-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
125-
}
126-
throw new IllegalArgumentException(
127-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_EMPTY_BUCKET_TIME.getPreferredName() + "]");
128-
}, LATEST_EMPTY_BUCKET_TIME, ValueType.VALUE);
129-
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(), p -> {
130-
if (p.currentToken() == Token.VALUE_NUMBER) {
131-
return new Date(p.longValue());
132-
} else if (p.currentToken() == Token.VALUE_STRING) {
133-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
134-
}
135-
throw new IllegalArgumentException(
136-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_SPARSE_BUCKET_TIME.getPreferredName() + "]");
137-
}, LATEST_SPARSE_BUCKET_TIME, ValueType.VALUE);
92+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
93+
p -> TimeUtils.parseTimeField(p, EARLIEST_RECORD_TIME.getPreferredName()), EARLIEST_RECORD_TIME, ValueType.VALUE);
94+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
95+
p -> TimeUtils.parseTimeField(p, LATEST_RECORD_TIME.getPreferredName()), LATEST_RECORD_TIME, ValueType.VALUE);
96+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
97+
p -> TimeUtils.parseTimeField(p, LAST_DATA_TIME.getPreferredName()), LAST_DATA_TIME, ValueType.VALUE);
98+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
99+
p -> TimeUtils.parseTimeField(p, LATEST_EMPTY_BUCKET_TIME.getPreferredName()), LATEST_EMPTY_BUCKET_TIME, ValueType.VALUE);
100+
PARSER.declareField(ConstructingObjectParser.optionalConstructorArg(),
101+
p -> TimeUtils.parseTimeField(p, LATEST_SPARSE_BUCKET_TIME.getPreferredName()), LATEST_SPARSE_BUCKET_TIME, ValueType.VALUE);
138102
PARSER.declareLong((t, u) -> {;}, INPUT_RECORD_COUNT);
139103
}
140104

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/process/autodetect/state/ModelSizeStats.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
1414
import org.elasticsearch.common.xcontent.ToXContentObject;
1515
import org.elasticsearch.common.xcontent.XContentBuilder;
16-
import org.elasticsearch.common.xcontent.XContentParser.Token;
1716
import org.elasticsearch.xpack.core.ml.job.config.Job;
1817
import org.elasticsearch.xpack.core.ml.job.results.Result;
1918
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
@@ -60,24 +59,10 @@ private static ConstructingObjectParser<Builder, Void> createParser(boolean igno
6059
parser.declareLong(Builder::setTotalByFieldCount, TOTAL_BY_FIELD_COUNT_FIELD);
6160
parser.declareLong(Builder::setTotalOverFieldCount, TOTAL_OVER_FIELD_COUNT_FIELD);
6261
parser.declareLong(Builder::setTotalPartitionFieldCount, TOTAL_PARTITION_FIELD_COUNT_FIELD);
63-
parser.declareField(Builder::setLogTime, p -> {
64-
if (p.currentToken() == Token.VALUE_NUMBER) {
65-
return new Date(p.longValue());
66-
} else if (p.currentToken() == Token.VALUE_STRING) {
67-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
68-
}
69-
throw new IllegalArgumentException(
70-
"unexpected token [" + p.currentToken() + "] for [" + LOG_TIME_FIELD.getPreferredName() + "]");
71-
}, LOG_TIME_FIELD, ValueType.VALUE);
72-
parser.declareField(Builder::setTimestamp, p -> {
73-
if (p.currentToken() == Token.VALUE_NUMBER) {
74-
return new Date(p.longValue());
75-
} else if (p.currentToken() == Token.VALUE_STRING) {
76-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
77-
}
78-
throw new IllegalArgumentException(
79-
"unexpected token [" + p.currentToken() + "] for [" + TIMESTAMP_FIELD.getPreferredName() + "]");
80-
}, TIMESTAMP_FIELD, ValueType.VALUE);
62+
parser.declareField(Builder::setLogTime,
63+
p -> TimeUtils.parseTimeField(p, LOG_TIME_FIELD.getPreferredName()), LOG_TIME_FIELD, ValueType.VALUE);
64+
parser.declareField(Builder::setTimestamp,
65+
p -> TimeUtils.parseTimeField(p, TIMESTAMP_FIELD.getPreferredName()), TIMESTAMP_FIELD, ValueType.VALUE);
8166
parser.declareField(Builder::setMemoryStatus, p -> MemoryStatus.fromString(p.text()), MEMORY_STATUS_FIELD, ValueType.STRING);
8267

8368
return parser;

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/process/autodetect/state/ModelSnapshot.java

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.elasticsearch.common.xcontent.XContentBuilder;
2020
import org.elasticsearch.common.xcontent.XContentFactory;
2121
import org.elasticsearch.common.xcontent.XContentParser;
22-
import org.elasticsearch.common.xcontent.XContentParser.Token;
2322
import org.elasticsearch.common.xcontent.XContentType;
2423
import org.elasticsearch.xpack.core.ml.job.config.Job;
2524
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
@@ -61,38 +60,17 @@ private static ObjectParser<Builder, Void> createParser(boolean ignoreUnknownFie
6160
ObjectParser<Builder, Void> parser = new ObjectParser<>(TYPE.getPreferredName(), ignoreUnknownFields, Builder::new);
6261

6362
parser.declareString(Builder::setJobId, Job.ID);
64-
parser.declareField(Builder::setTimestamp, p -> {
65-
if (p.currentToken() == Token.VALUE_NUMBER) {
66-
return new Date(p.longValue());
67-
} else if (p.currentToken() == Token.VALUE_STRING) {
68-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
69-
}
70-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() + "] for ["
71-
+ TIMESTAMP.getPreferredName() + "]");
72-
}, TIMESTAMP, ValueType.VALUE);
63+
parser.declareField(Builder::setTimestamp,
64+
p -> TimeUtils.parseTimeField(p, TIMESTAMP.getPreferredName()), TIMESTAMP, ValueType.VALUE);
7365
parser.declareString(Builder::setDescription, DESCRIPTION);
7466
parser.declareString(Builder::setSnapshotId, ModelSnapshotField.SNAPSHOT_ID);
7567
parser.declareInt(Builder::setSnapshotDocCount, SNAPSHOT_DOC_COUNT);
7668
parser.declareObject(Builder::setModelSizeStats, ignoreUnknownFields ? ModelSizeStats.LENIENT_PARSER : ModelSizeStats.STRICT_PARSER,
7769
ModelSizeStats.RESULT_TYPE_FIELD);
78-
parser.declareField(Builder::setLatestRecordTimeStamp, p -> {
79-
if (p.currentToken() == Token.VALUE_NUMBER) {
80-
return new Date(p.longValue());
81-
} else if (p.currentToken() == Token.VALUE_STRING) {
82-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
83-
}
84-
throw new IllegalArgumentException(
85-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_RECORD_TIME.getPreferredName() + "]");
86-
}, LATEST_RECORD_TIME, ValueType.VALUE);
87-
parser.declareField(Builder::setLatestResultTimeStamp, p -> {
88-
if (p.currentToken() == Token.VALUE_NUMBER) {
89-
return new Date(p.longValue());
90-
} else if (p.currentToken() == Token.VALUE_STRING) {
91-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
92-
}
93-
throw new IllegalArgumentException(
94-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_RESULT_TIME.getPreferredName() + "]");
95-
}, LATEST_RESULT_TIME, ValueType.VALUE);
70+
parser.declareField(Builder::setLatestRecordTimeStamp,
71+
p -> TimeUtils.parseTimeField(p, LATEST_RECORD_TIME.getPreferredName()), LATEST_RECORD_TIME, ValueType.VALUE);
72+
parser.declareField(Builder::setLatestResultTimeStamp,
73+
p -> TimeUtils.parseTimeField(p, LATEST_RESULT_TIME.getPreferredName()), LATEST_RESULT_TIME, ValueType.VALUE);
9674
parser.declareObject(Builder::setQuantiles, ignoreUnknownFields ? Quantiles.LENIENT_PARSER : Quantiles.STRICT_PARSER, QUANTILES);
9775
parser.declareBoolean(Builder::setRetain, RETAIN);
9876

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/results/AnomalyRecord.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
1616
import org.elasticsearch.common.xcontent.ToXContentObject;
1717
import org.elasticsearch.common.xcontent.XContentBuilder;
18-
import org.elasticsearch.common.xcontent.XContentParser.Token;
1918
import org.elasticsearch.xpack.core.ml.job.config.Detector;
2019
import org.elasticsearch.xpack.core.ml.job.config.Job;
2120
import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
@@ -91,15 +90,8 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
9190
a -> new AnomalyRecord((String) a[0], (Date) a[1], (long) a[2]));
9291

9392
parser.declareString(ConstructingObjectParser.constructorArg(), Job.ID);
94-
parser.declareField(ConstructingObjectParser.constructorArg(), p -> {
95-
if (p.currentToken() == Token.VALUE_NUMBER) {
96-
return new Date(p.longValue());
97-
} else if (p.currentToken() == Token.VALUE_STRING) {
98-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
99-
}
100-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() + "] for ["
101-
+ Result.TIMESTAMP.getPreferredName() + "]");
102-
}, Result.TIMESTAMP, ValueType.VALUE);
93+
parser.declareField(ConstructingObjectParser.constructorArg(),
94+
p -> TimeUtils.parseTimeField(p, Result.TIMESTAMP.getPreferredName()), Result.TIMESTAMP, ValueType.VALUE);
10395
parser.declareLong(ConstructingObjectParser.constructorArg(), BUCKET_SPAN);
10496
parser.declareString((anomalyRecord, s) -> {}, Result.RESULT_TYPE);
10597
parser.declareDouble(AnomalyRecord::setProbability, PROBABILITY);

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/results/Bucket.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
1515
import org.elasticsearch.common.xcontent.ToXContentObject;
1616
import org.elasticsearch.common.xcontent.XContentBuilder;
17-
import org.elasticsearch.common.xcontent.XContentParser.Token;
1817
import org.elasticsearch.xpack.core.ml.job.config.Job;
1918
import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
2019
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
@@ -74,15 +73,8 @@ private static ConstructingObjectParser<Bucket, Void> createParser(boolean ignor
7473
a -> new Bucket((String) a[0], (Date) a[1], (long) a[2]));
7574

7675
parser.declareString(ConstructingObjectParser.constructorArg(), JOB_ID);
77-
parser.declareField(ConstructingObjectParser.constructorArg(), p -> {
78-
if (p.currentToken() == Token.VALUE_NUMBER) {
79-
return new Date(p.longValue());
80-
} else if (p.currentToken() == Token.VALUE_STRING) {
81-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
82-
}
83-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() + "] for ["
84-
+ Result.TIMESTAMP.getPreferredName() + "]");
85-
}, Result.TIMESTAMP, ValueType.VALUE);
76+
parser.declareField(ConstructingObjectParser.constructorArg(),
77+
p -> TimeUtils.parseTimeField(p, Result.TIMESTAMP.getPreferredName()), Result.TIMESTAMP, ValueType.VALUE);
8678
parser.declareLong(ConstructingObjectParser.constructorArg(), BUCKET_SPAN);
8779
parser.declareDouble(Bucket::setAnomalyScore, ANOMALY_SCORE);
8880
parser.declareDouble(Bucket::setInitialAnomalyScore, INITIAL_ANOMALY_SCORE);

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ml/job/results/BucketInfluencer.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.elasticsearch.common.xcontent.ObjectParser.ValueType;
1515
import org.elasticsearch.common.xcontent.ToXContentObject;
1616
import org.elasticsearch.common.xcontent.XContentBuilder;
17-
import org.elasticsearch.common.xcontent.XContentParser.Token;
1817
import org.elasticsearch.xpack.core.ml.job.config.Job;
1918
import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
2019
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
@@ -53,15 +52,8 @@ private static ConstructingObjectParser<BucketInfluencer, Void> createParser(boo
5352
ignoreUnknownFields, a -> new BucketInfluencer((String) a[0], (Date) a[1], (long) a[2]));
5453

5554
parser.declareString(ConstructingObjectParser.constructorArg(), Job.ID);
56-
parser.declareField(ConstructingObjectParser.constructorArg(), p -> {
57-
if (p.currentToken() == Token.VALUE_NUMBER) {
58-
return new Date(p.longValue());
59-
} else if (p.currentToken() == Token.VALUE_STRING) {
60-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
61-
}
62-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() + "] for ["
63-
+ Result.TIMESTAMP.getPreferredName() + "]");
64-
}, Result.TIMESTAMP, ValueType.VALUE);
55+
parser.declareField(ConstructingObjectParser.constructorArg(),
56+
p -> TimeUtils.parseTimeField(p, Result.TIMESTAMP.getPreferredName()), Result.TIMESTAMP, ValueType.VALUE);
6557
parser.declareLong(ConstructingObjectParser.constructorArg(), BUCKET_SPAN);
6658
parser.declareString((bucketInfluencer, s) -> {}, Result.RESULT_TYPE);
6759
parser.declareString(BucketInfluencer::setInfluencerFieldName, INFLUENCER_FIELD_NAME);

0 commit comments

Comments
 (0)