1919import org .elasticsearch .xpack .core .ml .job .config .Job ;
2020import org .elasticsearch .xpack .core .ml .utils .ExceptionsHelper ;
2121import org .elasticsearch .xpack .core .ml .utils .time .TimeUtils ;
22+ import org .elasticsearch .Version ;
2223
2324import java .io .IOException ;
2425import java .util .ArrayList ;
@@ -44,6 +45,7 @@ public class AnomalyRecord implements ToXContentObject, Writeable {
4445 * Result fields (all detector types)
4546 */
4647 public static final ParseField PROBABILITY = new ParseField ("probability" );
48+ public static final ParseField MULTI_BUCKET_IMPACT = new ParseField ("multi_bucket_impact" );
4749 public static final ParseField BY_FIELD_NAME = new ParseField ("by_field_name" );
4850 public static final ParseField BY_FIELD_VALUE = new ParseField ("by_field_value" );
4951 public static final ParseField CORRELATED_BY_FIELD_VALUE = new ParseField ("correlated_by_field_value" );
@@ -100,6 +102,7 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
100102 parser .declareLong (ConstructingObjectParser .constructorArg (), BUCKET_SPAN );
101103 parser .declareString ((anomalyRecord , s ) -> {}, Result .RESULT_TYPE );
102104 parser .declareDouble (AnomalyRecord ::setProbability , PROBABILITY );
105+ parser .declareDouble (AnomalyRecord ::setMultiBucketImpact , MULTI_BUCKET_IMPACT );
103106 parser .declareDouble (AnomalyRecord ::setRecordScore , RECORD_SCORE );
104107 parser .declareDouble (AnomalyRecord ::setInitialRecordScore , INITIAL_RECORD_SCORE );
105108 parser .declareInt (AnomalyRecord ::setDetectorIndex , Detector .DETECTOR_INDEX );
@@ -127,6 +130,7 @@ private static ConstructingObjectParser<AnomalyRecord, Void> createParser(boolea
127130 private final String jobId ;
128131 private int detectorIndex ;
129132 private double probability ;
133+ private Double multiBucketImpact ;
130134 private String byFieldName ;
131135 private String byFieldValue ;
132136 private String correlatedByFieldValue ;
@@ -164,6 +168,9 @@ public AnomalyRecord(StreamInput in) throws IOException {
164168 jobId = in .readString ();
165169 detectorIndex = in .readInt ();
166170 probability = in .readDouble ();
171+ if (in .getVersion ().onOrAfter (Version .V_6_5_0 )) {
172+ multiBucketImpact = in .readOptionalDouble ();
173+ }
167174 byFieldName = in .readOptionalString ();
168175 byFieldValue = in .readOptionalString ();
169176 correlatedByFieldValue = in .readOptionalString ();
@@ -198,6 +205,9 @@ public void writeTo(StreamOutput out) throws IOException {
198205 out .writeString (jobId );
199206 out .writeInt (detectorIndex );
200207 out .writeDouble (probability );
208+ if (out .getVersion ().onOrAfter (Version .V_6_5_0 )) {
209+ out .writeOptionalDouble (multiBucketImpact );
210+ }
201211 out .writeOptionalString (byFieldName );
202212 out .writeOptionalString (byFieldValue );
203213 out .writeOptionalString (correlatedByFieldValue );
@@ -247,6 +257,9 @@ XContentBuilder innerToXContent(XContentBuilder builder, Params params) throws I
247257 builder .field (Job .ID .getPreferredName (), jobId );
248258 builder .field (Result .RESULT_TYPE .getPreferredName (), RESULT_TYPE_VALUE );
249259 builder .field (PROBABILITY .getPreferredName (), probability );
260+ if (multiBucketImpact != null ) {
261+ builder .field (MULTI_BUCKET_IMPACT .getPreferredName (), multiBucketImpact );
262+ }
250263 builder .field (RECORD_SCORE .getPreferredName (), recordScore );
251264 builder .field (INITIAL_RECORD_SCORE .getPreferredName (), initialRecordScore );
252265 builder .field (BUCKET_SPAN .getPreferredName (), bucketSpan );
@@ -389,6 +402,14 @@ public void setProbability(double value) {
389402 probability = value ;
390403 }
391404
405+ public double getMultiBucketImpact () {
406+ return multiBucketImpact ;
407+ }
408+
409+ public void setMultiBucketImpact (double value ) {
410+ multiBucketImpact = value ;
411+ }
412+
392413 public String getByFieldName () {
393414 return byFieldName ;
394415 }
@@ -519,7 +540,7 @@ public void setInfluencers(List<Influence> influencers) {
519540
520541 @ Override
521542 public int hashCode () {
522- return Objects .hash (jobId , detectorIndex , bucketSpan , probability , recordScore ,
543+ return Objects .hash (jobId , detectorIndex , bucketSpan , probability , multiBucketImpact , recordScore ,
523544 initialRecordScore , typical , actual ,function , functionDescription , fieldName ,
524545 byFieldName , byFieldValue , correlatedByFieldValue , partitionFieldName ,
525546 partitionFieldValue , overFieldName , overFieldValue , timestamp , isInterim ,
@@ -543,6 +564,7 @@ public boolean equals(Object other) {
543564 && this .detectorIndex == that .detectorIndex
544565 && this .bucketSpan == that .bucketSpan
545566 && this .probability == that .probability
567+ && Objects .equals (this .multiBucketImpact , that .multiBucketImpact )
546568 && this .recordScore == that .recordScore
547569 && this .initialRecordScore == that .initialRecordScore
548570 && Objects .deepEquals (this .typical , that .typical )
0 commit comments