Skip to content

Commit 25ab14e

Browse files
authored
feat: allow users to customize alarm annotation properties (#184)
Allow users to override 1) color 2) label 3) visibility of the alarm annotation. --- _By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_
1 parent af02dba commit 25ab14e

File tree

4 files changed

+140
-5
lines changed

4 files changed

+140
-5
lines changed

API.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,6 +1983,9 @@ const addAlarmProps: AddAlarmProps = { ... }
19831983
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.evaluateLowSampleCountPercentile">evaluateLowSampleCountPercentile</a></code> | <code>boolean</code> | Used only for alarms based on percentiles. |
19841984
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.evaluationPeriods">evaluationPeriods</a></code> | <code>number</code> | Number of periods to consider when checking the number of breaching datapoints. |
19851985
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.fillAlarmRange">fillAlarmRange</a></code> | <code>boolean</code> | Indicates whether the alarming range of values should be highlighted in the widget. |
1986+
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationColor">overrideAnnotationColor</a></code> | <code>string</code> | If specified, it modifies the final alarm annotation color. |
1987+
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationLabel">overrideAnnotationLabel</a></code> | <code>string</code> | If specified, it modifies the final alarm annotation label. |
1988+
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationVisibility">overrideAnnotationVisibility</a></code> | <code>boolean</code> | If specified, it modifies the final alarm annotation visibility. |
19861989
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.period">period</a></code> | <code>aws-cdk-lib.Duration</code> | Period override for the metric to alarm on. |
19871990
| <code><a href="#cdk-monitoring-constructs.AddAlarmProps.property.runbookLink">runbookLink</a></code> | <code>string</code> | An optional link included in the generated ticket description body. |
19881991

@@ -2240,6 +2243,45 @@ Indicates whether the alarming range of values should be highlighted in the widg
22402243

22412244
---
22422245

2246+
##### `overrideAnnotationColor`<sup>Optional</sup> <a name="overrideAnnotationColor" id="cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationColor"></a>
2247+
2248+
```typescript
2249+
public readonly overrideAnnotationColor: string;
2250+
```
2251+
2252+
- *Type:* string
2253+
- *Default:* no override (default color)
2254+
2255+
If specified, it modifies the final alarm annotation color.
2256+
2257+
---
2258+
2259+
##### `overrideAnnotationLabel`<sup>Optional</sup> <a name="overrideAnnotationLabel" id="cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationLabel"></a>
2260+
2261+
```typescript
2262+
public readonly overrideAnnotationLabel: string;
2263+
```
2264+
2265+
- *Type:* string
2266+
- *Default:* no override (default label)
2267+
2268+
If specified, it modifies the final alarm annotation label.
2269+
2270+
---
2271+
2272+
##### `overrideAnnotationVisibility`<sup>Optional</sup> <a name="overrideAnnotationVisibility" id="cdk-monitoring-constructs.AddAlarmProps.property.overrideAnnotationVisibility"></a>
2273+
2274+
```typescript
2275+
public readonly overrideAnnotationVisibility: boolean;
2276+
```
2277+
2278+
- *Type:* boolean
2279+
- *Default:* no override (default visibility)
2280+
2281+
If specified, it modifies the final alarm annotation visibility.
2282+
2283+
---
2284+
22432285
##### `period`<sup>Optional</sup> <a name="period" id="cdk-monitoring-constructs.AddAlarmProps.property.period"></a>
22442286

22452287
```typescript
@@ -2613,6 +2655,9 @@ const alarmAnnotationStrategyProps: AlarmAnnotationStrategyProps = { ... }
26132655
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.fillAlarmRange">fillAlarmRange</a></code> | <code>boolean</code> | *No description.* |
26142656
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.metric">metric</a></code> | <code>aws-cdk-lib.aws_cloudwatch.Metric \| aws-cdk-lib.aws_cloudwatch.MathExpression</code> | *No description.* |
26152657
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.threshold">threshold</a></code> | <code>number</code> | *No description.* |
2658+
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationColor">overrideAnnotationColor</a></code> | <code>string</code> | *No description.* |
2659+
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationLabel">overrideAnnotationLabel</a></code> | <code>string</code> | *No description.* |
2660+
| <code><a href="#cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationVisibility">overrideAnnotationVisibility</a></code> | <code>boolean</code> | *No description.* |
26162661

26172662
---
26182663

@@ -2736,6 +2781,36 @@ public readonly threshold: number;
27362781

27372782
---
27382783

2784+
##### `overrideAnnotationColor`<sup>Optional</sup> <a name="overrideAnnotationColor" id="cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationColor"></a>
2785+
2786+
```typescript
2787+
public readonly overrideAnnotationColor: string;
2788+
```
2789+
2790+
- *Type:* string
2791+
2792+
---
2793+
2794+
##### `overrideAnnotationLabel`<sup>Optional</sup> <a name="overrideAnnotationLabel" id="cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationLabel"></a>
2795+
2796+
```typescript
2797+
public readonly overrideAnnotationLabel: string;
2798+
```
2799+
2800+
- *Type:* string
2801+
2802+
---
2803+
2804+
##### `overrideAnnotationVisibility`<sup>Optional</sup> <a name="overrideAnnotationVisibility" id="cdk-monitoring-constructs.AlarmAnnotationStrategyProps.property.overrideAnnotationVisibility"></a>
2805+
2806+
```typescript
2807+
public readonly overrideAnnotationVisibility: boolean;
2808+
```
2809+
2810+
- *Type:* boolean
2811+
2812+
---
2813+
27392814
### AlarmFactoryDefaults <a name="AlarmFactoryDefaults" id="cdk-monitoring-constructs.AlarmFactoryDefaults"></a>
27402815

27412816
#### Initializer <a name="Initializer" id="cdk-monitoring-constructs.AlarmFactoryDefaults.Initializer"></a>

lib/common/alarm/AlarmFactory.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,27 @@ export interface AddAlarmProps {
198198
* @default false
199199
*/
200200
readonly fillAlarmRange?: boolean;
201+
202+
/**
203+
* If specified, it modifies the final alarm annotation color.
204+
*
205+
* @default no override (default color)
206+
*/
207+
readonly overrideAnnotationColor?: string;
208+
209+
/**
210+
* If specified, it modifies the final alarm annotation label.
211+
*
212+
* @default no override (default label)
213+
*/
214+
readonly overrideAnnotationLabel?: string;
215+
216+
/**
217+
* If specified, it modifies the final alarm annotation visibility.
218+
*
219+
* @default no override (default visibility)
220+
*/
221+
readonly overrideAnnotationVisibility?: boolean;
201222
}
202223

203224
/**
@@ -507,6 +528,9 @@ export class AlarmFactory {
507528
datapointsToAlarm,
508529
dedupeString,
509530
fillAlarmRange: props.fillAlarmRange ?? false,
531+
overrideAnnotationColor: props.overrideAnnotationColor,
532+
overrideAnnotationLabel: props.overrideAnnotationLabel,
533+
overrideAnnotationVisibility: props.overrideAnnotationVisibility,
510534
comparisonOperator: props.comparisonOperator,
511535
threshold: props.threshold,
512536
disambiguator: props.disambiguator,

lib/common/alarm/IAlarmAnnotationStrategy.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ export interface AlarmAnnotationStrategyProps extends AlarmMetadata {
1616
readonly datapointsToAlarm: number;
1717
readonly evaluationPeriods: number;
1818
readonly fillAlarmRange: boolean;
19+
readonly overrideAnnotationColor?: string;
20+
readonly overrideAnnotationLabel?: string;
21+
readonly overrideAnnotationVisibility?: boolean;
1922
}
2023

2124
/**
@@ -36,11 +39,21 @@ export abstract class FillingAlarmAnnotationStrategy
3639
implements IAlarmAnnotationStrategy
3740
{
3841
createAnnotation(props: AlarmAnnotationStrategyProps): HorizontalAnnotation {
39-
const annotation = this.createAnnotationToFill(props);
40-
if (props.fillAlarmRange) {
41-
return { ...annotation, fill: this.getAlarmingRangeShade(props) };
42-
}
43-
return annotation;
42+
return {
43+
...this.createAnnotationToFill(props),
44+
...(props.fillAlarmRange && {
45+
fill: this.getAlarmingRangeShade(props),
46+
}),
47+
...(props.overrideAnnotationColor !== undefined && {
48+
color: props.overrideAnnotationColor,
49+
}),
50+
...(props.overrideAnnotationLabel !== undefined && {
51+
label: props.overrideAnnotationLabel,
52+
}),
53+
...(props.overrideAnnotationVisibility !== undefined && {
54+
visible: props.overrideAnnotationVisibility,
55+
}),
56+
};
4457
}
4558

4659
protected abstract createAnnotationToFill(

test/common/alarm/AlarmFactory.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,29 @@ test("addAlarm: fill is propagated to alarm annotation", () => {
229229
expect(alarmBelow.annotation.fill).toStrictEqual(Shading.BELOW);
230230
});
231231

232+
test("addAlarm: annotation overrides are applied", () => {
233+
const stack = new Stack();
234+
const factory = new AlarmFactory(stack, {
235+
globalMetricDefaults,
236+
globalAlarmDefaults,
237+
localAlarmNamePrefix: "prefix",
238+
});
239+
const alarm = factory.addAlarm(metric, {
240+
...props,
241+
alarmNameSuffix: "none",
242+
comparisonOperator: ComparisonOperator.LESS_THAN_THRESHOLD,
243+
overrideAnnotationLabel: "NewLabel",
244+
overrideAnnotationVisibility: false,
245+
overrideAnnotationColor: "NewColor",
246+
});
247+
expect(alarm.annotation).toStrictEqual({
248+
color: "NewColor",
249+
label: "NewLabel",
250+
value: 10,
251+
visible: false,
252+
});
253+
});
254+
232255
test("addCompositeAlarm: snapshot for operator", () => {
233256
const stack = new Stack();
234257
const factory = new AlarmFactory(stack, {

0 commit comments

Comments
 (0)