Skip to content

Commit a4090e1

Browse files
authored
Add the optional BoundaryMeasureType to MetricBoundaryCondition & improve detection sample (Azure#22691)
* Add the optional BoundaryMeasureType to MetricBoundaryCondition * Update detection config samples to have null check before accessing optionals
1 parent 7e1b780 commit a4090e1

File tree

5 files changed

+447
-249
lines changed

5 files changed

+447
-249
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
// Code generated by Microsoft (R) AutoRest Code Generator.
4+
5+
package com.azure.ai.metricsadvisor.administration.models;
6+
7+
import com.azure.ai.metricsadvisor.implementation.models.ValueType;
8+
import com.azure.core.util.ExpandableStringEnum;
9+
import com.fasterxml.jackson.annotation.JsonCreator;
10+
11+
import java.util.Collection;
12+
13+
/**
14+
* The measure type that detector should use for measuring data-points when detecting anomalies
15+
* using {@link MetricBoundaryCondition}.
16+
*/
17+
public final class BoundaryMeasureType extends ExpandableStringEnum<BoundaryMeasureType> {
18+
/**
19+
* Static value Value indicating that detector should use raw value of data points.
20+
*/
21+
public static final BoundaryMeasureType VALUE = fromString(ValueType.VALUE.toString());
22+
/**
23+
* Static value Value indicating that detector should use mean value of data points over a period.
24+
*/
25+
public static final BoundaryMeasureType MEAN = fromString(ValueType.MEAN.toString());
26+
27+
/**
28+
* Creates or finds a BoundaryMeasureType from its string representation.
29+
*
30+
* @param name a name to look for.
31+
* @return the corresponding BoundaryMeasureType.
32+
*/
33+
@JsonCreator
34+
public static BoundaryMeasureType fromString(String name) {
35+
return fromString(name, BoundaryMeasureType.class);
36+
}
37+
38+
/** @return known BoundaryMeasureType values. */
39+
public static Collection<BoundaryMeasureType> values() {
40+
return values(BoundaryMeasureType.class);
41+
}
42+
}

sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/administration/models/MetricBoundaryCondition.java

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public final class MetricBoundaryCondition {
1616
private Double upperBoundary;
1717
private String companionMetricId;
1818
private Boolean alertIfMissing;
19+
private BoundaryMeasureType measureType;
1920

2021
static {
2122
MetricBoundaryConditionHelper.setAccessor(new MetricBoundaryConditionHelper.MetricBoundaryConditionAccessor() {
@@ -84,6 +85,25 @@ public String getCompanionMetricId() {
8485
return this.companionMetricId;
8586
}
8687

88+
/**
89+
* True if alert will be triggered when the companion-metric data-points are out
90+
* of boundary but the corresponding data-point is missing for the original metric.
91+
*
92+
* @return True if alert is triggered for missing data-points, false otherwise.
93+
*/
94+
public Boolean shouldAlertIfDataPointMissing() {
95+
return this.alertIfMissing;
96+
}
97+
98+
/**
99+
* Gets the measure type that detector should use for measuring data-points.
100+
*
101+
* @return the measure type.
102+
*/
103+
public BoundaryMeasureType getMeasureType() {
104+
return this.measureType;
105+
}
106+
87107
/**
88108
* Sets the boundary.
89109
*
@@ -119,16 +139,6 @@ public MetricBoundaryCondition setCompanionMetricId(String companionMetricId) {
119139
return this;
120140
}
121141

122-
/**
123-
* True if alert will be triggered when the companion-metric data-points are out
124-
* of boundary but the corresponding data-point is missing for the original metric.
125-
*
126-
* @return True if alert is triggered for missing data-points, false otherwise.
127-
*/
128-
public Boolean shouldAlertIfDataPointMissing() {
129-
return this.alertIfMissing;
130-
}
131-
132142
/**
133143
* Sets the companion metric id.
134144
*
@@ -150,6 +160,18 @@ public MetricBoundaryCondition setCompanionMetricId(String companionMetricId,
150160
return this;
151161
}
152162

163+
/**
164+
* Sets the measure type that detector should use for measuring data-points.
165+
*
166+
* @param measureType the type of measure to use.
167+
*
168+
* @return The MetricBoundaryCondition object itself.
169+
*/
170+
public MetricBoundaryCondition setMeasureType(BoundaryMeasureType measureType) {
171+
this.measureType = measureType;
172+
return this;
173+
}
174+
153175
void setLowerBoundary(Double lowerBoundary) {
154176
this.lowerBoundary = lowerBoundary;
155177
}

sdk/metricsadvisor/azure-ai-metricsadvisor/src/main/java/com/azure/ai/metricsadvisor/implementation/util/AlertConfigurationTransforms.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package com.azure.ai.metricsadvisor.implementation.util;
55

6+
import com.azure.ai.metricsadvisor.administration.models.BoundaryMeasureType;
67
import com.azure.ai.metricsadvisor.administration.models.MetricAnomalyAlertSnoozeCondition;
78
import com.azure.ai.metricsadvisor.implementation.models.AnomalyAlertingConfiguration;
89
import com.azure.ai.metricsadvisor.implementation.models.AnomalyAlertingConfigurationLogicType;
@@ -15,6 +16,7 @@
1516
import com.azure.ai.metricsadvisor.implementation.models.ValueCondition;
1617
import com.azure.ai.metricsadvisor.administration.models.AnomalyAlertConfiguration;
1718
import com.azure.ai.metricsadvisor.administration.models.BoundaryDirection;
19+
import com.azure.ai.metricsadvisor.implementation.models.ValueType;
1820
import com.azure.ai.metricsadvisor.models.DimensionKey;
1921
import com.azure.ai.metricsadvisor.administration.models.MetricAnomalyAlertConditions;
2022
import com.azure.ai.metricsadvisor.administration.models.MetricAlertConfiguration;
@@ -183,6 +185,10 @@ private static List<MetricAlertingConfiguration> getMetricAlertConfigList(
183185
.setMetricId(UUID.fromString(boundaryConditions.getCompanionMetricId()));
184186
innerValueCondition.setTriggerForMissing(boundaryConditions.shouldAlertIfDataPointMissing());
185187
}
188+
if (boundaryConditions.getMeasureType() != null) {
189+
innerValueCondition.setType(
190+
ValueType.fromString(boundaryConditions.getMeasureType().toString()));
191+
}
186192
innerMetricAlertConfiguration.setValueFilter(innerValueCondition);
187193
}
188194
}
@@ -317,6 +323,10 @@ public static AnomalyAlertConfiguration fromInner(
317323
boundaryCondition.setCompanionMetricId(innerValueCondition.getMetricId().toString(),
318324
triggerIfMissing);
319325
}
326+
if (innerValueCondition.getType() != null) {
327+
boundaryCondition.setMeasureType(
328+
BoundaryMeasureType.fromString(innerValueCondition.getType().toString()));
329+
}
320330
alertConditions.setMetricBoundaryCondition(boundaryCondition);
321331
}
322332
metricAlertConfiguration.setAlertConditions(alertConditions);

0 commit comments

Comments
 (0)