2020import org .elasticsearch .xpack .core .ml .job .config .Job ;
2121import org .elasticsearch .xpack .core .ml .utils .ExceptionsHelper ;
2222import org .elasticsearch .xpack .core .ml .utils .time .TimeUtils ;
23+ import org .elasticsearch .Version ;
2324
2425import java .io .IOException ;
2526import java .util .ArrayList ;
@@ -45,6 +46,7 @@ public class AnomalyRecord implements ToXContentObject, Writeable {
4546 * Result fields (all detector types)
4647 */
4748 public static final ParseField PROBABILITY = new ParseField ("probability" );
49+ public static final ParseField MULTI_BUCKET_IMPACT = new ParseField ("multi_bucket_impact" );
4850 public static final ParseField BY_FIELD_NAME = new ParseField ("by_field_name" );
4951 public static final ParseField BY_FIELD_VALUE = new ParseField ("by_field_value" );
5052 public static final ParseField CORRELATED_BY_FIELD_VALUE = new ParseField ("correlated_by_field_value" );
@@ -101,6 +103,7 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
101103 parser .declareLong (ConstructingObjectParser .constructorArg (), BUCKET_SPAN );
102104 parser .declareString ((anomalyRecord , s ) -> {}, Result .RESULT_TYPE );
103105 parser .declareDouble (AnomalyRecord ::setProbability , PROBABILITY );
106+ parser .declareDouble (AnomalyRecord ::setMultiBucketImpact , MULTI_BUCKET_IMPACT );
104107 parser .declareDouble (AnomalyRecord ::setRecordScore , RECORD_SCORE );
105108 parser .declareDouble (AnomalyRecord ::setInitialRecordScore , INITIAL_RECORD_SCORE );
106109 parser .declareInt (AnomalyRecord ::setDetectorIndex , Detector .DETECTOR_INDEX );
@@ -128,6 +131,7 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
128131 private final String jobId ;
129132 private int detectorIndex ;
130133 private double probability ;
134+ private Double multiBucketImpact ;
131135 private String byFieldName ;
132136 private String byFieldValue ;
133137 private String correlatedByFieldValue ;
@@ -169,6 +173,9 @@ public AnomalyRecord(StreamInput in) throws IOException {
169173 }
170174 detectorIndex = in .readInt ();
171175 probability = in .readDouble ();
176+ if (in .getVersion ().onOrAfter (Version .V_6_5_0 )) {
177+ multiBucketImpact = in .readOptionalDouble ();
178+ }
172179 byFieldName = in .readOptionalString ();
173180 byFieldValue = in .readOptionalString ();
174181 correlatedByFieldValue = in .readOptionalString ();
@@ -207,6 +214,9 @@ public void writeTo(StreamOutput out) throws IOException {
207214 }
208215 out .writeInt (detectorIndex );
209216 out .writeDouble (probability );
217+ if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
218+ out .writeOptionalDouble (multiBucketImpact );
219+ }
210220 out .writeOptionalString (byFieldName );
211221 out .writeOptionalString (byFieldValue );
212222 out .writeOptionalString (correlatedByFieldValue );
@@ -256,6 +266,9 @@ XContentBuilder innerToXContent(XContentBuilder builder, Params params) throws I
256266 builder .field (Job .ID .getPreferredName (), jobId );
257267 builder .field (Result .RESULT_TYPE .getPreferredName (), RESULT_TYPE_VALUE );
258268 builder .field (PROBABILITY .getPreferredName (), probability );
269+ if (multiBucketImpact != null ) {
270+ builder .field (MULTI_BUCKET_IMPACT .getPreferredName (), multiBucketImpact );
271+ }
259272 builder .field (RECORD_SCORE .getPreferredName (), recordScore );
260273 builder .field (INITIAL_RECORD_SCORE .getPreferredName (), initialRecordScore );
261274 builder .field (BUCKET_SPAN .getPreferredName (), bucketSpan );
@@ -398,6 +411,14 @@ public void setProbability(double value) {
398411 probability = value ;
399412 }
400413
414+ public double getMultiBucketImpact () {
415+ return multiBucketImpact ;
416+ }
417+
418+ public void setMultiBucketImpact (double value ) {
419+ multiBucketImpact = value ;
420+ }
421+
401422 public String getByFieldName () {
402423 return byFieldName ;
403424 }
@@ -528,7 +549,7 @@ public void setInfluencers(List<Influence> influencers) {
528549
529550 @ Override
530551 public int hashCode () {
531- return Objects .hash (jobId , detectorIndex , bucketSpan , probability , recordScore ,
552+ return Objects .hash (jobId , detectorIndex , bucketSpan , probability , multiBucketImpact , recordScore ,
532553 initialRecordScore , typical , actual ,function , functionDescription , fieldName ,
533554 byFieldName , byFieldValue , correlatedByFieldValue , partitionFieldName ,
534555 partitionFieldValue , overFieldName , overFieldValue , timestamp , isInterim ,
@@ -552,6 +573,7 @@ public boolean equals(Object other) {
552573 && this .detectorIndex == that .detectorIndex
553574 && this .bucketSpan == that .bucketSpan
554575 && this .probability == that .probability
576+ && Objects .equals (this .multiBucketImpact , that .multiBucketImpact )
555577 && this .recordScore == that .recordScore
556578 && this .initialRecordScore == that .initialRecordScore
557579 && Objects .deepEquals (this .typical , that .typical )
0 commit comments