Skip to content

Commit 87fd2d5

Browse files
authored
feat(actions): add feature to add multiple actions to an alarm (#29)
Users will be able to use `multipleActions(action1, action2, etc)` to add multiple actions to a single alarm.
1 parent 455c746 commit 87fd2d5

File tree

5 files changed

+140
-1
lines changed

5 files changed

+140
-1
lines changed

API.md

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35506,6 +35506,55 @@ MonitoringNamingStrategy.isAlarmFriendly(str: string)
3550635506

3550735507

3550835508

35509+
### MultipleAlarmActionStrategy <a name="MultipleAlarmActionStrategy" id="cdk-monitoring-constructs.MultipleAlarmActionStrategy"></a>
35510+
35511+
- *Implements:* <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>
35512+
35513+
Alarm action strategy that combines multiple actions in the same order as they were given.
35514+
35515+
#### Initializers <a name="Initializers" id="cdk-monitoring-constructs.MultipleAlarmActionStrategy.Initializer"></a>
35516+
35517+
```typescript
35518+
import { MultipleAlarmActionStrategy } from 'cdk-monitoring-constructs'
35519+
35520+
new MultipleAlarmActionStrategy(actions: IAlarmActionStrategy[])
35521+
```
35522+
35523+
| **Name** | **Type** | **Description** |
35524+
| --- | --- | --- |
35525+
| <code><a href="#cdk-monitoring-constructs.MultipleAlarmActionStrategy.Initializer.parameter.actions">actions</a></code> | <code><a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>[]</code> | *No description.* |
35526+
35527+
---
35528+
35529+
##### `actions`<sup>Required</sup> <a name="actions" id="cdk-monitoring-constructs.MultipleAlarmActionStrategy.Initializer.parameter.actions"></a>
35530+
35531+
- *Type:* <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>[]
35532+
35533+
---
35534+
35535+
#### Methods <a name="Methods" id="Methods"></a>
35536+
35537+
| **Name** | **Description** |
35538+
| --- | --- |
35539+
| <code><a href="#cdk-monitoring-constructs.MultipleAlarmActionStrategy.addAlarmActions">addAlarmActions</a></code> | *No description.* |
35540+
35541+
---
35542+
35543+
##### `addAlarmActions` <a name="addAlarmActions" id="cdk-monitoring-constructs.MultipleAlarmActionStrategy.addAlarmActions"></a>
35544+
35545+
```typescript
35546+
public addAlarmActions(props: AlarmActionStrategyProps): void
35547+
```
35548+
35549+
###### `props`<sup>Required</sup> <a name="props" id="cdk-monitoring-constructs.MultipleAlarmActionStrategy.addAlarmActions.parameter.props"></a>
35550+
35551+
- *Type:* <a href="#cdk-monitoring-constructs.AlarmActionStrategyProps">AlarmActionStrategyProps</a>
35552+
35553+
---
35554+
35555+
35556+
35557+
3550935558
### NetworkLoadBalancerMetricFactory <a name="NetworkLoadBalancerMetricFactory" id="cdk-monitoring-constructs.NetworkLoadBalancerMetricFactory"></a>
3551035559

3551135560
- *Implements:* <a href="#cdk-monitoring-constructs.ILoadBalancerMetricFactory">ILoadBalancerMetricFactory</a>
@@ -40155,7 +40204,7 @@ public with(options: MathExpressionOptions): IMetric
4015540204

4015640205
### IAlarmActionStrategy <a name="IAlarmActionStrategy" id="cdk-monitoring-constructs.IAlarmActionStrategy"></a>
4015740206

40158-
- *Implemented By:* <a href="#cdk-monitoring-constructs.NoopAlarmActionStrategy">NoopAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.SnsAlarmActionStrategy">SnsAlarmActionStrategy</a>, <a href="#cdk-monitoring-constructs.IAlarmActionStrategy">IAlarmActionStrategy</a>
40207+
- *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>
4015940208

4016040209
An object that appends actions to alarms.
4016140210

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {
2+
AlarmActionStrategyProps,
3+
IAlarmActionStrategy,
4+
} from "./IAlarmActionStrategy";
5+
6+
export function multipleActions(...actions: IAlarmActionStrategy[]) {
7+
return new MultipleAlarmActionStrategy(actions);
8+
}
9+
10+
/**
11+
* Alarm action strategy that combines multiple actions in the same order as they were given.
12+
*/
13+
export class MultipleAlarmActionStrategy implements IAlarmActionStrategy {
14+
protected readonly actions: IAlarmActionStrategy[];
15+
16+
constructor(actions: IAlarmActionStrategy[]) {
17+
this.actions = actions;
18+
}
19+
20+
addAlarmActions(props: AlarmActionStrategyProps): void {
21+
this.actions.forEach((action) => action.addAlarmActions(props));
22+
}
23+
}

lib/common/alarm/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ export * from "./CustomAlarmThreshold";
44
export * from "./IAlarmActionStrategy";
55
export * from "./IAlarmAnnotationStrategy";
66
export * from "./IAlarmDedupeStringProcessor";
7+
export * from "./MultipleAlarmActionStrategy";
78
export * from "./NoopAlarmActionStrategy";
89
export * from "./SnsAlarmActionStrategy";
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { SynthUtils } from "@monocdk-experiment/assert";
2+
import { Stack } from "monocdk";
3+
import { Alarm, Metric } from "monocdk/aws-cloudwatch";
4+
import { Topic } from "monocdk/aws-sns";
5+
6+
import { multipleActions, SnsAlarmActionStrategy } from "../../../lib";
7+
8+
test("snapshot test: multiple actions", () => {
9+
const stack = new Stack();
10+
const topic1 = new Topic(stack, "DummyTopic1");
11+
const topic2 = new Topic(stack, "DummyTopic2");
12+
const topic3 = new Topic(stack, "DummyTopic3");
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 = multipleActions(
19+
new SnsAlarmActionStrategy({ onAlarmTopic: topic1 }),
20+
new SnsAlarmActionStrategy({ onAlarmTopic: topic2 }),
21+
new SnsAlarmActionStrategy({ onAlarmTopic: topic3 })
22+
);
23+
action.addAlarmActions({ alarm, action });
24+
25+
expect(SynthUtils.toCloudFormation(stack)).toMatchSnapshot();
26+
});

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

Lines changed: 40 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)