Skip to content

Commit f501905

Browse files
authored
feat(AlarmFactory): allow accessing action strategy as part of alarm naming strategy (#625)
This can be useful if you want to name the alarm based on properties of the action being applied. --- _By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_
1 parent d473fd0 commit f501905

File tree

4 files changed

+52
-10
lines changed

4 files changed

+52
-10
lines changed

API.md

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/common/alarm/AlarmFactory.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
IAlarmAnnotationStrategy,
2424
} from "./IAlarmAnnotationStrategy";
2525
import { IAlarmDedupeStringProcessor } from "./IAlarmDedupeStringProcessor";
26-
import { IAlarmNamingStrategy } from "./IAlarmNamingStrategy";
26+
import { AlarmNamingInput, IAlarmNamingStrategy } from "./IAlarmNamingStrategy";
2727
import {
2828
CompositeMetricAdjuster,
2929
DefaultMetricAdjuster,
@@ -580,16 +580,22 @@ export class AlarmFactory {
580580
props.disambiguator,
581581
props.actionOverride,
582582
);
583-
const alarmName = this.alarmNamingStrategy.getName(props);
583+
const alarmNamingInput: AlarmNamingInput = {
584+
...props,
585+
action,
586+
};
587+
const alarmName = this.alarmNamingStrategy.getName(alarmNamingInput);
584588
const alarmNameSuffix = props.alarmNameSuffix;
585-
const alarmLabel = this.alarmNamingStrategy.getWidgetLabel(props);
589+
const alarmLabel =
590+
this.alarmNamingStrategy.getWidgetLabel(alarmNamingInput);
586591
const alarmDescription = this.generateDescription(
587592
props.alarmDescription,
588593
props.alarmDescriptionOverride,
589594
props.runbookLink,
590595
props.documentationLink,
591596
);
592-
const dedupeString = this.alarmNamingStrategy.getDedupeString(props);
597+
const dedupeString =
598+
this.alarmNamingStrategy.getDedupeString(alarmNamingInput);
593599
const evaluateLowSampleCountPercentile =
594600
props.evaluateLowSampleCountPercentile ?? true;
595601

lib/common/alarm/IAlarmNamingStrategy.ts

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
import { IAlarmActionStrategy } from "./action";
2+
13
export interface AlarmNamingInput {
4+
// TODO: make this required
5+
readonly action?: IAlarmActionStrategy;
26
readonly alarmNameSuffix: string;
37
readonly alarmNameOverride?: string;
48
readonly alarmDedupeStringSuffix?: string;

test/common/alarm/AlarmFactory.test.ts

+27-6
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ import { Construct } from "constructs";
1414

1515
import {
1616
AddAlarmProps,
17+
AlarmActionStrategyProps,
1718
AlarmFactory,
1819
AlarmFactoryDefaults,
1920
AlarmNamingInput,
2021
CompositeAlarmOperator,
22+
IAlarmActionStrategy,
2123
IAlarmNamingStrategy,
2224
MetricFactoryDefaults,
2325
MetricStatistic,
@@ -32,6 +34,16 @@ const construct = new Construct(stack, "SampleConstruct");
3234
const snsAction = new SnsAlarmActionStrategy({
3335
onAlarmTopic: new Topic(stack, "Dummy2"),
3436
});
37+
38+
class SampleAlarmActionStrategy implements IAlarmActionStrategy {
39+
readonly prop = "Sample";
40+
41+
addAlarmActions(_props: AlarmActionStrategyProps): void {
42+
// No-op
43+
}
44+
}
45+
const sampleAction = new SampleAlarmActionStrategy();
46+
3547
const globalMetricDefaults: MetricFactoryDefaults = {
3648
namespace: "DummyNamespace",
3749
};
@@ -722,11 +734,18 @@ test("addAlarm: custom alarm naming strategy", () => {
722734
const disambiguator = "Critical";
723735
const stack = new Stack();
724736
const customNamingStrategy: IAlarmNamingStrategy = {
725-
getName: (props: AlarmNamingInput) => `${alarmName}-${props.disambiguator}`,
737+
getName: (props: AlarmNamingInput) =>
738+
`${alarmName}-${props.disambiguator}-${
739+
(props.action as SampleAlarmActionStrategy).prop
740+
}`,
726741
getWidgetLabel: (props: AlarmNamingInput) =>
727-
`${alarmLabel}-${props.disambiguator}`,
742+
`${alarmLabel}-${props.disambiguator}-${
743+
(props.action as SampleAlarmActionStrategy).prop
744+
}`,
728745
getDedupeString: (props: AlarmNamingInput) =>
729-
`${alarmDedupe}-${props.disambiguator}`,
746+
`${alarmDedupe}-${props.disambiguator}-${
747+
(props.action as SampleAlarmActionStrategy).prop
748+
}`,
730749
};
731750
const factory = new AlarmFactory(stack, {
732751
globalMetricDefaults,
@@ -736,13 +755,15 @@ test("addAlarm: custom alarm naming strategy", () => {
736755
},
737756
localAlarmNamePrefix: "prefix",
738757
});
758+
const action = sampleAction;
739759
const alarm = factory.addAlarm(metric, {
740760
...props,
741761
disambiguator,
762+
actionOverride: action,
742763
});
743-
expect(alarm.alarmName).toBe(`${alarmName}-${disambiguator}`);
744-
expect(alarm.alarmLabel).toBe(`${alarmLabel}-${disambiguator}`);
745-
expect(alarm.dedupeString).toBe(`${alarmDedupe}-${disambiguator}`);
764+
expect(alarm.alarmName).toBe(`${alarmName}-${disambiguator}-Sample`);
765+
expect(alarm.alarmLabel).toBe(`${alarmLabel}-${disambiguator}-Sample`);
766+
expect(alarm.dedupeString).toBe(`${alarmDedupe}-${disambiguator}-Sample`);
746767
});
747768

748769
test("addAlarm: custom metric adjuster, applies it and DefaultMetricAdjuster after it", () => {

0 commit comments

Comments
 (0)