Skip to content

Commit d9425b3

Browse files
committed
Refactor copy and paste date parsing code
1 parent 577261e commit d9425b3

File tree

13 files changed

+59
-201
lines changed

13 files changed

+59
-201
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;
@@ -99,33 +98,12 @@ private static ObjectParser<Builder, Void> createParser(boolean ignoreUnknownFie
9998
parser.declareString(Builder::setJobVersion, JOB_VERSION);
10099
parser.declareStringArray(Builder::setGroups, GROUPS);
101100
parser.declareStringOrNull(Builder::setDescription, DESCRIPTION);
102-
parser.declareField(Builder::setCreateTime, 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("unexpected token [" + p.currentToken() +
109-
"] for [" + CREATE_TIME.getPreferredName() + "]");
110-
}, CREATE_TIME, ValueType.VALUE);
111-
parser.declareField(Builder::setFinishedTime, 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 [" + FINISHED_TIME.getPreferredName() + "]");
119-
}, FINISHED_TIME, ValueType.VALUE);
120-
parser.declareField(Builder::setLastDataTime, 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 [" + LAST_DATA_TIME.getPreferredName() + "]");
128-
}, LAST_DATA_TIME, ValueType.VALUE);
101+
parser.declareField(Builder::setCreateTime,
102+
p -> TimeUtils.parseTimeField(p, CREATE_TIME.getPreferredName()), CREATE_TIME, ValueType.VALUE);
103+
parser.declareField(Builder::setFinishedTime,
104+
p -> TimeUtils.parseTimeField(p, FINISHED_TIME.getPreferredName()), FINISHED_TIME, ValueType.VALUE);
105+
parser.declareField(Builder::setLastDataTime,
106+
p -> TimeUtils.parseTimeField(p, LAST_DATA_TIME.getPreferredName()), LAST_DATA_TIME, ValueType.VALUE);
129107
parser.declareLong(Builder::setEstablishedModelMemory, ESTABLISHED_MODEL_MEMORY);
130108
parser.declareObject(Builder::setAnalysisConfig, ignoreUnknownFields ? AnalysisConfig.LENIENT_PARSER : AnalysisConfig.STRICT_PARSER,
131109
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
@@ -13,7 +13,6 @@
1313
import org.elasticsearch.common.xcontent.ObjectParser;
1414
import org.elasticsearch.common.xcontent.ToXContentObject;
1515
import org.elasticsearch.common.xcontent.XContentBuilder;
16-
import org.elasticsearch.common.xcontent.XContentParser;
1716
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
1817

1918
import java.io.IOException;
@@ -36,15 +35,9 @@ public class FlushAcknowledgement implements ToXContentObject, Writeable {
3635

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

5043
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: 7 additions & 20 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;
@@ -22,6 +21,7 @@
2221
import java.util.Date;
2322
import java.util.Locale;
2423
import java.util.Objects;
24+
import java.util.function.BiConsumer;
2525

2626
/**
2727
* Provide access to the C++ model memory usage numbers for the Java process.
@@ -60,25 +60,12 @@ private static ConstructingObjectParser<Builder, Void> createParser(boolean igno
6060
parser.declareLong(Builder::setTotalByFieldCount, TOTAL_BY_FIELD_COUNT_FIELD);
6161
parser.declareLong(Builder::setTotalOverFieldCount, TOTAL_OVER_FIELD_COUNT_FIELD);
6262
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);
81-
parser.declareField(Builder::setMemoryStatus, p -> MemoryStatus.fromString(p.text()), MEMORY_STATUS_FIELD, ValueType.STRING);
63+
parser.declareField(Builder::setLogTime,
64+
p -> TimeUtils.parseTimeField(p, LOG_TIME_FIELD.getPreferredName()), LOG_TIME_FIELD, ValueType.VALUE);
65+
parser.declareField(Builder::setTimestamp,
66+
p -> TimeUtils.parseTimeField(p, TIMESTAMP_FIELD.getPreferredName()), TIMESTAMP_FIELD, ValueType.VALUE);
67+
BiConsumer<Builder, MemoryStatus> setMemoryStatus = Builder::setMemoryStatus;
68+
parser.declareField(setMemoryStatus, p -> MemoryStatus.fromString(p.text()), MEMORY_STATUS_FIELD, ValueType.STRING);
8269

8370
return parser;
8471
}

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
@@ -20,7 +20,6 @@
2020
import org.elasticsearch.common.xcontent.XContentBuilder;
2121
import org.elasticsearch.common.xcontent.XContentFactory;
2222
import org.elasticsearch.common.xcontent.XContentParser;
23-
import org.elasticsearch.common.xcontent.XContentParser.Token;
2423
import org.elasticsearch.common.xcontent.XContentType;
2524
import org.elasticsearch.xpack.core.ml.job.config.Job;
2625
import org.elasticsearch.xpack.core.ml.utils.time.TimeUtils;
@@ -64,38 +63,17 @@ private static ObjectParser<Builder, Void> createParser(boolean ignoreUnknownFie
6463

6564
parser.declareString(Builder::setJobId, Job.ID);
6665
parser.declareString(Builder::setMinVersion, MIN_VERSION);
67-
parser.declareField(Builder::setTimestamp, p -> {
68-
if (p.currentToken() == Token.VALUE_NUMBER) {
69-
return new Date(p.longValue());
70-
} else if (p.currentToken() == Token.VALUE_STRING) {
71-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
72-
}
73-
throw new IllegalArgumentException("unexpected token [" + p.currentToken() + "] for ["
74-
+ TIMESTAMP.getPreferredName() + "]");
75-
}, TIMESTAMP, ValueType.VALUE);
66+
parser.declareField(Builder::setTimestamp,
67+
p -> TimeUtils.parseTimeField(p, TIMESTAMP.getPreferredName()), TIMESTAMP, ValueType.VALUE);
7668
parser.declareString(Builder::setDescription, DESCRIPTION);
7769
parser.declareString(Builder::setSnapshotId, ModelSnapshotField.SNAPSHOT_ID);
7870
parser.declareInt(Builder::setSnapshotDocCount, SNAPSHOT_DOC_COUNT);
7971
parser.declareObject(Builder::setModelSizeStats, ignoreUnknownFields ? ModelSizeStats.LENIENT_PARSER : ModelSizeStats.STRICT_PARSER,
8072
ModelSizeStats.RESULT_TYPE_FIELD);
81-
parser.declareField(Builder::setLatestRecordTimeStamp, p -> {
82-
if (p.currentToken() == Token.VALUE_NUMBER) {
83-
return new Date(p.longValue());
84-
} else if (p.currentToken() == Token.VALUE_STRING) {
85-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
86-
}
87-
throw new IllegalArgumentException(
88-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_RECORD_TIME.getPreferredName() + "]");
89-
}, LATEST_RECORD_TIME, ValueType.VALUE);
90-
parser.declareField(Builder::setLatestResultTimeStamp, p -> {
91-
if (p.currentToken() == Token.VALUE_NUMBER) {
92-
return new Date(p.longValue());
93-
} else if (p.currentToken() == Token.VALUE_STRING) {
94-
return new Date(TimeUtils.dateStringToEpoch(p.text()));
95-
}
96-
throw new IllegalArgumentException(
97-
"unexpected token [" + p.currentToken() + "] for [" + LATEST_RESULT_TIME.getPreferredName() + "]");
98-
}, LATEST_RESULT_TIME, ValueType.VALUE);
73+
parser.declareField(Builder::setLatestRecordTimeStamp,
74+
p -> TimeUtils.parseTimeField(p, LATEST_RECORD_TIME.getPreferredName()), LATEST_RECORD_TIME, ValueType.VALUE);
75+
parser.declareField(Builder::setLatestResultTimeStamp,
76+
p -> TimeUtils.parseTimeField(p, LATEST_RESULT_TIME.getPreferredName()), LATEST_RESULT_TIME, ValueType.VALUE);
9977
parser.declareObject(Builder::setQuantiles, ignoreUnknownFields ? Quantiles.LENIENT_PARSER : Quantiles.STRICT_PARSER, QUANTILES);
10078
parser.declareBoolean(Builder::setRetain, RETAIN);
10179

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
@@ -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.Detector;
1918
import org.elasticsearch.xpack.core.ml.job.config.Job;
2019
import org.elasticsearch.xpack.core.ml.utils.ExceptionsHelper;
@@ -90,15 +89,8 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
9089
a -> new AnomalyRecord((String) a[0], (Date) a[1], (long) a[2]));
9190

9291
parser.declareString(ConstructingObjectParser.constructorArg(), Job.ID);
93-
parser.declareField(ConstructingObjectParser.constructorArg(), 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("unexpected token [" + p.currentToken() + "] for ["
100-
+ Result.TIMESTAMP.getPreferredName() + "]");
101-
}, Result.TIMESTAMP, ValueType.VALUE);
92+
parser.declareField(ConstructingObjectParser.constructorArg(),
93+
p -> TimeUtils.parseTimeField(p, Result.TIMESTAMP.getPreferredName()), Result.TIMESTAMP, ValueType.VALUE);
10294
parser.declareLong(ConstructingObjectParser.constructorArg(), BUCKET_SPAN);
10395
parser.declareString((anomalyRecord, s) -> {}, Result.RESULT_TYPE);
10496
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);

0 commit comments

Comments
 (0)