Skip to content

Commit af02dba

Browse files
authored
feat(alarm): add OpsItem alarm action strategy (#188)
1 parent 6a261a1 commit af02dba

File tree

5 files changed

+264
-1
lines changed

5 files changed

+264
-1
lines changed

API.md

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45176,6 +45176,94 @@ Returns widgets to be placed on the main dashboard.
4517645176

4517745177

4517845178

45179+
### OpsItemAlarmActionStrategy <a name="OpsItemAlarmActionStrategy" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy"></a>
45180+
45181+
- *Implements:* <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>
45182+
45183+
Alarm action strategy that creates an AWS OpsCenter OpsItem.
45184+
45185+
#### Initializers <a name="Initializers" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.Initializer"></a>
45186+
45187+
```typescript
45188+
import { OpsItemAlarmActionStrategy } from 'cdk-monitoring-constructs'
45189+
45190+
new OpsItemAlarmActionStrategy(severity: OpsItemSeverity, category?: OpsItemCategory)
45191+
```
45192+
45193+
| **Name** | **Type** | **Description** |
45194+
| --- | --- | --- |
45195+
| <code><a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy.Initializer.parameter.severity">severity</a></code> | <code>aws-cdk-lib.aws_cloudwatch_actions.OpsItemSeverity</code> | *No description.* |
45196+
| <code><a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy.Initializer.parameter.category">category</a></code> | <code>aws-cdk-lib.aws_cloudwatch_actions.OpsItemCategory</code> | *No description.* |
45197+
45198+
---
45199+
45200+
##### `severity`<sup>Required</sup> <a name="severity" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.Initializer.parameter.severity"></a>
45201+
45202+
- *Type:* aws-cdk-lib.aws_cloudwatch_actions.OpsItemSeverity
45203+
45204+
---
45205+
45206+
##### `category`<sup>Optional</sup> <a name="category" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.Initializer.parameter.category"></a>
45207+
45208+
- *Type:* aws-cdk-lib.aws_cloudwatch_actions.OpsItemCategory
45209+
45210+
---
45211+
45212+
#### Methods <a name="Methods" id="Methods"></a>
45213+
45214+
| **Name** | **Description** |
45215+
| --- | --- |
45216+
| <code><a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy.addAlarmActions">addAlarmActions</a></code> | *No description.* |
45217+
45218+
---
45219+
45220+
##### `addAlarmActions` <a name="addAlarmActions" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.addAlarmActions"></a>
45221+
45222+
```typescript
45223+
public addAlarmActions(props: AlarmActionStrategyProps): void
45224+
```
45225+
45226+
###### `props`<sup>Required</sup> <a name="props" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.addAlarmActions.parameter.props"></a>
45227+
45228+
- *Type:* <a href="#cdk-monitoring-constructs.AlarmActionStrategyProps">AlarmActionStrategyProps</a>
45229+
45230+
---
45231+
45232+
45233+
#### Properties <a name="Properties" id="Properties"></a>
45234+
45235+
| **Name** | **Type** | **Description** |
45236+
| --- | --- | --- |
45237+
| <code><a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy.property.severity">severity</a></code> | <code>aws-cdk-lib.aws_cloudwatch_actions.OpsItemSeverity</code> | OPS Item Severity. |
45238+
| <code><a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy.property.category">category</a></code> | <code>aws-cdk-lib.aws_cloudwatch_actions.OpsItemCategory</code> | OPS Item Category. |
45239+
45240+
---
45241+
45242+
##### `severity`<sup>Required</sup> <a name="severity" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.property.severity"></a>
45243+
45244+
```typescript
45245+
public readonly severity: OpsItemSeverity;
45246+
```
45247+
45248+
- *Type:* aws-cdk-lib.aws_cloudwatch_actions.OpsItemSeverity
45249+
45250+
OPS Item Severity.
45251+
45252+
---
45253+
45254+
##### `category`<sup>Optional</sup> <a name="category" id="cdk-monitoring-constructs.OpsItemAlarmActionStrategy.property.category"></a>
45255+
45256+
```typescript
45257+
public readonly category: OpsItemCategory;
45258+
```
45259+
45260+
- *Type:* aws-cdk-lib.aws_cloudwatch_actions.OpsItemCategory
45261+
45262+
OPS Item Category.
45263+
45264+
---
45265+
45266+
4517945267
### QueueAlarmFactory <a name="QueueAlarmFactory" id="cdk-monitoring-constructs.QueueAlarmFactory"></a>
4518045268

4518145269
#### Initializers <a name="Initializers" id="cdk-monitoring-constructs.QueueAlarmFactory.Initializer"></a>
@@ -49346,7 +49434,7 @@ public with(options: MathExpressionOptions): IMetric
4934649434

4934749435
### IAlarmActionStrategy <a name="IAlarmActionStrategy" id="cdk-monitoring-constructs.IAlarmActionStrategy"></a>
4934849436

49349-
- *Implemented By:* <a href="#cdk-monitoring-constructs.MultipleAlarmActionStrategy">MultipleAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.NoopAlarmActionStrategy">NoopAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.SnsAlarmActionStrategy">SnsAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>
49437+
- *Implemented By:* <a href="#cdk-monitoring-constructs.MultipleAlarmActionStrategy">MultipleAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.NoopAlarmActionStrategy">NoopAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.OpsItemAlarmActionStrategy">OpsItemAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.SnsAlarmActionStrategy">SnsAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>
4935049438

4935149439
An object that appends actions to alarms.
4935249440

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import {
2+
OpsItemCategory,
3+
OpsItemSeverity,
4+
SsmAction,
5+
} from "aws-cdk-lib/aws-cloudwatch-actions";
6+
import {
7+
AlarmActionStrategyProps,
8+
IAlarmActionStrategy,
9+
} from "./IAlarmActionStrategy";
10+
11+
/**
12+
* Creates an AWS OpsCenter OpsItem with critical severity.
13+
* @param category optional category (no category by default)
14+
*/
15+
export function createCriticalSeverityOpsItem(category?: OpsItemCategory) {
16+
return createOpsItem(OpsItemSeverity.CRITICAL, category);
17+
}
18+
19+
/**
20+
* Creates an AWS OpsCenter OpsItem with high severity.
21+
* @param category optional category (no category by default)
22+
*/
23+
export function createHighSeverityOpsItem(category?: OpsItemCategory) {
24+
return createOpsItem(OpsItemSeverity.HIGH, category);
25+
}
26+
27+
/**
28+
* Creates an AWS OpsCenter OpsItem with medium severity.
29+
* @param category optional category (no category by default)
30+
*/
31+
export function createMediumSeverityOpsItem(category?: OpsItemCategory) {
32+
return createOpsItem(OpsItemSeverity.MEDIUM, category);
33+
}
34+
35+
/**
36+
* Creates an AWS OpsCenter OpsItem with low severity.
37+
* @param category optional category (no category by default)
38+
*/
39+
export function createLowSeverityOpsItem(category?: OpsItemCategory) {
40+
return createOpsItem(OpsItemSeverity.LOW, category);
41+
}
42+
43+
/**
44+
* Creates an AWS OpsCenter OpsItem.
45+
* @param severity desired item severity
46+
* @param category optional category (no category by default)
47+
*/
48+
export function createOpsItem(
49+
severity: OpsItemSeverity,
50+
category?: OpsItemCategory
51+
) {
52+
return new OpsItemAlarmActionStrategy(severity, category);
53+
}
54+
55+
/**
56+
* Alarm action strategy that creates an AWS OpsCenter OpsItem.
57+
*/
58+
export class OpsItemAlarmActionStrategy implements IAlarmActionStrategy {
59+
/**
60+
* OPS Item Severity
61+
*/
62+
readonly severity: OpsItemSeverity;
63+
64+
/**
65+
* OPS Item Category
66+
*/
67+
readonly category?: OpsItemCategory;
68+
69+
constructor(severity: OpsItemSeverity, category?: OpsItemCategory) {
70+
this.severity = severity;
71+
this.category = category;
72+
}
73+
74+
addAlarmActions(props: AlarmActionStrategyProps): void {
75+
props.alarm.addAlarmAction(new SsmAction(this.severity, this.category));
76+
}
77+
}

lib/common/alarm/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export * from "./IAlarmAnnotationStrategy";
66
export * from "./IAlarmDedupeStringProcessor";
77
export * from "./MultipleAlarmActionStrategy";
88
export * from "./NoopAlarmActionStrategy";
9+
export * from "./OpsItemAlarmActionStrategy";
910
export * from "./SnsAlarmActionStrategy";
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { Stack } from "aws-cdk-lib";
2+
import { Template } from "aws-cdk-lib/assertions";
3+
import { Alarm, Metric } from "aws-cdk-lib/aws-cloudwatch";
4+
import {
5+
OpsItemCategory,
6+
OpsItemSeverity,
7+
} from "aws-cdk-lib/aws-cloudwatch-actions";
8+
9+
import { OpsItemAlarmActionStrategy } from "../../../lib";
10+
11+
test("snapshot test", () => {
12+
const stack = new Stack();
13+
const alarm = new Alarm(stack, "DummyAlarm", {
14+
evaluationPeriods: 1,
15+
threshold: 0,
16+
metric: new Metric({ namespace: "Dummy", metricName: "Dummy" }),
17+
});
18+
const action = new OpsItemAlarmActionStrategy(
19+
OpsItemSeverity.LOW,
20+
OpsItemCategory.AVAILABILITY
21+
);
22+
action.addAlarmActions({ alarm, action });
23+
24+
expect(Template.fromStack(stack)).toMatchSnapshot();
25+
});

test/common/alarm/__snapshots__/OpsItemAlarmActionStrategy.test.ts.snap

Lines changed: 72 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)