@composurecdk/cloudwatch 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/alarm-config.d.ts.map +1 -0
- package/dist/commonjs/alarm-config.js +3 -0
- package/dist/{alarm-config.js.map → commonjs/alarm-config.js.map} +1 -1
- package/dist/commonjs/alarm-definition-builder.d.ts.map +1 -0
- package/dist/commonjs/alarm-definition-builder.js +103 -0
- package/dist/commonjs/alarm-definition-builder.js.map +1 -0
- package/dist/commonjs/alarm-definition.d.ts.map +1 -0
- package/dist/commonjs/alarm-definition.js +3 -0
- package/dist/{alarm-definition.js.map → commonjs/alarm-definition.js.map} +1 -1
- package/dist/commonjs/alarm-name.d.ts.map +1 -0
- package/dist/commonjs/alarm-name.js +52 -0
- package/dist/commonjs/alarm-name.js.map +1 -0
- package/dist/commonjs/create-alarms.d.ts.map +1 -0
- package/dist/commonjs/create-alarms.js +41 -0
- package/dist/commonjs/create-alarms.js.map +1 -0
- package/dist/commonjs/default-alarm-name.d.ts.map +1 -0
- package/dist/commonjs/default-alarm-name.js +20 -0
- package/dist/commonjs/default-alarm-name.js.map +1 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +18 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/policies/alarm-actions-policy.d.ts.map +1 -0
- package/dist/commonjs/policies/alarm-actions-policy.js +132 -0
- package/dist/commonjs/policies/alarm-actions-policy.js.map +1 -0
- package/dist/commonjs/policies/alarm-name-policy.d.ts.map +1 -0
- package/dist/commonjs/policies/alarm-name-policy.js +100 -0
- package/dist/commonjs/policies/alarm-name-policy.js.map +1 -0
- package/dist/commonjs/policies/policy-matcher.d.ts.map +1 -0
- package/dist/commonjs/policies/policy-matcher.js +20 -0
- package/dist/commonjs/policies/policy-matcher.js.map +1 -0
- package/dist/commonjs/resolve-alarm-config.d.ts.map +1 -0
- package/dist/commonjs/resolve-alarm-config.js +18 -0
- package/dist/commonjs/resolve-alarm-config.js.map +1 -0
- package/dist/esm/alarm-config.d.ts +31 -0
- package/dist/esm/alarm-config.d.ts.map +1 -0
- package/dist/esm/alarm-config.js.map +1 -0
- package/dist/esm/alarm-definition-builder.d.ts +40 -0
- package/dist/esm/alarm-definition-builder.d.ts.map +1 -0
- package/dist/esm/alarm-definition-builder.js.map +1 -0
- package/dist/esm/alarm-definition.d.ts +21 -0
- package/dist/esm/alarm-definition.d.ts.map +1 -0
- package/dist/esm/alarm-definition.js.map +1 -0
- package/dist/esm/alarm-name.d.ts +32 -0
- package/dist/esm/alarm-name.d.ts.map +1 -0
- package/dist/esm/alarm-name.js.map +1 -0
- package/dist/esm/create-alarms.d.ts +19 -0
- package/dist/esm/create-alarms.d.ts.map +1 -0
- package/dist/esm/create-alarms.js.map +1 -0
- package/dist/esm/default-alarm-name.d.ts +14 -0
- package/dist/esm/default-alarm-name.d.ts.map +1 -0
- package/dist/esm/default-alarm-name.js.map +1 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/policies/alarm-actions-policy.d.ts +54 -0
- package/dist/esm/policies/alarm-actions-policy.d.ts.map +1 -0
- package/dist/esm/policies/alarm-actions-policy.js.map +1 -0
- package/dist/esm/policies/alarm-name-policy.d.ts +77 -0
- package/dist/esm/policies/alarm-name-policy.d.ts.map +1 -0
- package/dist/esm/policies/alarm-name-policy.js.map +1 -0
- package/dist/esm/policies/policy-matcher.d.ts +31 -0
- package/dist/esm/policies/policy-matcher.d.ts.map +1 -0
- package/dist/esm/policies/policy-matcher.js.map +1 -0
- package/dist/esm/resolve-alarm-config.d.ts +25 -0
- package/dist/esm/resolve-alarm-config.d.ts.map +1 -0
- package/dist/esm/resolve-alarm-config.js.map +1 -0
- package/package.json +32 -14
- package/dist/alarm-config.d.ts.map +0 -1
- package/dist/alarm-definition-builder.d.ts.map +0 -1
- package/dist/alarm-definition-builder.js.map +0 -1
- package/dist/alarm-definition.d.ts.map +0 -1
- package/dist/alarm-name.d.ts.map +0 -1
- package/dist/alarm-name.js.map +0 -1
- package/dist/create-alarms.d.ts.map +0 -1
- package/dist/create-alarms.js.map +0 -1
- package/dist/default-alarm-name.d.ts.map +0 -1
- package/dist/default-alarm-name.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/policies/alarm-actions-policy.d.ts.map +0 -1
- package/dist/policies/alarm-actions-policy.js.map +0 -1
- package/dist/policies/alarm-name-policy.d.ts.map +0 -1
- package/dist/policies/alarm-name-policy.js.map +0 -1
- package/dist/policies/policy-matcher.d.ts.map +0 -1
- package/dist/policies/policy-matcher.js.map +0 -1
- package/dist/resolve-alarm-config.d.ts.map +0 -1
- package/dist/resolve-alarm-config.js.map +0 -1
- /package/dist/{alarm-config.d.ts → commonjs/alarm-config.d.ts} +0 -0
- /package/dist/{alarm-definition-builder.d.ts → commonjs/alarm-definition-builder.d.ts} +0 -0
- /package/dist/{alarm-definition.d.ts → commonjs/alarm-definition.d.ts} +0 -0
- /package/dist/{alarm-name.d.ts → commonjs/alarm-name.d.ts} +0 -0
- /package/dist/{create-alarms.d.ts → commonjs/create-alarms.d.ts} +0 -0
- /package/dist/{default-alarm-name.d.ts → commonjs/default-alarm-name.d.ts} +0 -0
- /package/dist/{index.d.ts → commonjs/index.d.ts} +0 -0
- /package/dist/{policies → commonjs/policies}/alarm-actions-policy.d.ts +0 -0
- /package/dist/{policies → commonjs/policies}/alarm-name-policy.d.ts +0 -0
- /package/dist/{policies → commonjs/policies}/policy-matcher.d.ts +0 -0
- /package/dist/{resolve-alarm-config.d.ts → commonjs/resolve-alarm-config.d.ts} +0 -0
- /package/dist/{alarm-config.js → esm/alarm-config.js} +0 -0
- /package/dist/{alarm-definition-builder.js → esm/alarm-definition-builder.js} +0 -0
- /package/dist/{alarm-definition.js → esm/alarm-definition.js} +0 -0
- /package/dist/{alarm-name.js → esm/alarm-name.js} +0 -0
- /package/dist/{create-alarms.js → esm/create-alarms.js} +0 -0
- /package/dist/{default-alarm-name.js → esm/default-alarm-name.js} +0 -0
- /package/dist/{index.js → esm/index.js} +0 -0
- /package/dist/{policies → esm/policies}/alarm-actions-policy.js +0 -0
- /package/dist/{policies → esm/policies}/alarm-name-policy.js +0 -0
- /package/dist/{policies → esm/policies}/policy-matcher.js +0 -0
- /package/dist/{resolve-alarm-config.js → esm/resolve-alarm-config.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-config.d.ts","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"alarm-config.js","sourceRoot":"","sources":["../../src/alarm-config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,MAAM,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB,CAAC,UAAU;;gBAWhC,GAAG,EAAE,MAAM;IAIvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,MAAM,GAAG,IAAI;IAKxD;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAKhC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,IAAI,IAAI;IAKnB,kBAAkB,IAAI,IAAI;IAK1B,QAAQ,IAAI,IAAI;IAKhB,eAAe,IAAI,IAAI;IAKvB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlC,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,KAAK,MAAM,CAAC,GAAG,IAAI;IAK3E;;;;;OAKG;IACH,OAAO,CAAC,SAAS,EAAE,UAAU,GAAG,eAAe;CAwBhD"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AlarmDefinitionBuilder = void 0;
|
|
4
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
5
|
+
/**
|
|
6
|
+
* Fluent builder for constructing deferred {@link AlarmDefinition}s.
|
|
7
|
+
*
|
|
8
|
+
* Stores a metric factory `(construct: T) => Metric` at configuration time.
|
|
9
|
+
* Call {@link resolve} during build to invoke the factory and produce a
|
|
10
|
+
* complete {@link AlarmDefinition}.
|
|
11
|
+
*
|
|
12
|
+
* @typeParam TConstruct - The construct type the metric factory receives.
|
|
13
|
+
*/
|
|
14
|
+
class AlarmDefinitionBuilder {
|
|
15
|
+
#key;
|
|
16
|
+
#alarmName;
|
|
17
|
+
#metricFactory;
|
|
18
|
+
#threshold = 0;
|
|
19
|
+
#comparisonOperator = aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD;
|
|
20
|
+
#evaluationPeriods = 1;
|
|
21
|
+
#datapointsToAlarm = 1;
|
|
22
|
+
#treatMissingData = aws_cloudwatch_1.TreatMissingData.NOT_BREACHING;
|
|
23
|
+
#description = "";
|
|
24
|
+
constructor(key) {
|
|
25
|
+
this.#key = key;
|
|
26
|
+
}
|
|
27
|
+
metric(factory) {
|
|
28
|
+
this.#metricFactory = factory;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sets an explicit CloudWatch alarm name. When unset, {@link createAlarms}
|
|
33
|
+
* derives a default from the stack name, builder id, and alarm key. Use
|
|
34
|
+
* the {@link alarmName} helper to construct branded values.
|
|
35
|
+
*/
|
|
36
|
+
alarmName(name) {
|
|
37
|
+
this.#alarmName = name;
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
threshold(value) {
|
|
41
|
+
this.#threshold = value;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
greaterThan() {
|
|
45
|
+
this.#comparisonOperator = aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
greaterThanOrEqual() {
|
|
49
|
+
this.#comparisonOperator = aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD;
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
lessThan() {
|
|
53
|
+
this.#comparisonOperator = aws_cloudwatch_1.ComparisonOperator.LESS_THAN_THRESHOLD;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
lessThanOrEqual() {
|
|
57
|
+
this.#comparisonOperator = aws_cloudwatch_1.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
evaluationPeriods(n) {
|
|
61
|
+
this.#evaluationPeriods = n;
|
|
62
|
+
return this;
|
|
63
|
+
}
|
|
64
|
+
datapointsToAlarm(n) {
|
|
65
|
+
this.#datapointsToAlarm = n;
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
treatMissingData(treatment) {
|
|
69
|
+
this.#treatMissingData = treatment;
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
description(text) {
|
|
73
|
+
this.#description = text;
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolves the deferred metric factory against a construct and
|
|
78
|
+
* returns a complete {@link AlarmDefinition}.
|
|
79
|
+
*
|
|
80
|
+
* @throws If {@link metric} was not called before resolve.
|
|
81
|
+
*/
|
|
82
|
+
resolve(construct) {
|
|
83
|
+
if (!this.#metricFactory) {
|
|
84
|
+
throw new Error(`AlarmDefinitionBuilder "${this.#key}": metric() must be called before resolve()`);
|
|
85
|
+
}
|
|
86
|
+
const definition = {
|
|
87
|
+
key: this.#key,
|
|
88
|
+
alarmName: this.#alarmName,
|
|
89
|
+
metric: this.#metricFactory(construct),
|
|
90
|
+
threshold: this.#threshold,
|
|
91
|
+
comparisonOperator: this.#comparisonOperator,
|
|
92
|
+
evaluationPeriods: this.#evaluationPeriods,
|
|
93
|
+
datapointsToAlarm: this.#datapointsToAlarm,
|
|
94
|
+
treatMissingData: this.#treatMissingData,
|
|
95
|
+
description: "",
|
|
96
|
+
};
|
|
97
|
+
definition.description =
|
|
98
|
+
typeof this.#description === "function" ? this.#description(definition) : this.#description;
|
|
99
|
+
return definition;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.AlarmDefinitionBuilder = AlarmDefinitionBuilder;
|
|
103
|
+
//# sourceMappingURL=alarm-definition-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":";;;AAAA,+DAA+F;AAI/F;;;;;;;;GAQG;AACH,MAAa,sBAAsB;IACxB,IAAI,CAAS;IACtB,UAAU,CAAa;IACvB,cAAc,CAAqC;IACnD,UAAU,GAAG,CAAC,CAAC;IACf,mBAAmB,GAAG,mCAAkB,CAAC,sBAAsB,CAAC;IAChE,kBAAkB,GAAG,CAAC,CAAC;IACvB,kBAAkB,GAAG,CAAC,CAAC;IACvB,iBAAiB,GAAG,iCAAgB,CAAC,aAAa,CAAC;IACnD,YAAY,GAAuD,EAAE,CAAC;IAEtE,YAAY,GAAW;QACrB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,OAA0C;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAe;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW;QACT,IAAI,CAAC,mBAAmB,GAAG,mCAAkB,CAAC,sBAAsB,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,mBAAmB,GAAG,mCAAkB,CAAC,kCAAkC,CAAC;QACjF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,mBAAmB,GAAG,mCAAkB,CAAC,mBAAmB,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,IAAI,CAAC,mBAAmB,GAAG,mCAAkB,CAAC,+BAA+B,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,CAAS;QACzB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,CAAS;QACzB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,SAA2B;QAC1C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,IAAwD;QAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,SAAqB;QAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,2BAA2B,IAAI,CAAC,IAAI,6CAA6C,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAoB;YAClC,GAAG,EAAE,IAAI,CAAC,IAAI;YACd,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YACtC,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,UAAU,CAAC,WAAW;YACpB,OAAO,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAE9F,OAAO,UAAU,CAAC;IACpB,CAAC;CACF;AAzGD,wDAyGC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"alarm-definition.js","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-name.d.ts","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAE5C;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAclD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,SAAM,GAAG,SAAS,CAG/E;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ3C"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.alarmName = alarmName;
|
|
4
|
+
exports.joinAlarmName = joinAlarmName;
|
|
5
|
+
exports.kebab = kebab;
|
|
6
|
+
const VALID_CHARS = /^[A-Za-z0-9\-_./#:()+ =@]+$/;
|
|
7
|
+
const MAX_LEN = 255;
|
|
8
|
+
/**
|
|
9
|
+
* Validates and brands a string as an {@link AlarmName}. The string is used
|
|
10
|
+
* verbatim — no sanitisation — so what the caller writes is exactly what
|
|
11
|
+
* appears in CloudWatch.
|
|
12
|
+
*
|
|
13
|
+
* @throws If the input is empty, exceeds 255 chars, or contains characters
|
|
14
|
+
* outside CloudWatch's allowed set: `[A-Za-z0-9-_./#:()+ =@]`.
|
|
15
|
+
*/
|
|
16
|
+
function alarmName(input) {
|
|
17
|
+
const trimmed = input.trim();
|
|
18
|
+
if (trimmed.length === 0) {
|
|
19
|
+
throw new Error("alarm name cannot be empty");
|
|
20
|
+
}
|
|
21
|
+
if (trimmed.length > MAX_LEN) {
|
|
22
|
+
throw new Error(`alarm name exceeds ${String(MAX_LEN)} chars: "${trimmed}"`);
|
|
23
|
+
}
|
|
24
|
+
if (!VALID_CHARS.test(trimmed)) {
|
|
25
|
+
throw new Error(`alarm name contains invalid characters (allowed: A-Z a-z 0-9 - _ . / # : ( ) + = @ space): "${trimmed}"`);
|
|
26
|
+
}
|
|
27
|
+
return trimmed;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Builds an {@link AlarmName} by kebab-casing each segment and joining with
|
|
31
|
+
* `sep`. Empty segments after kebab-casing are dropped, so callers can pass
|
|
32
|
+
* e.g. `Stack.of(scope).stackName` without worrying about token-resolution
|
|
33
|
+
* artefacts.
|
|
34
|
+
*/
|
|
35
|
+
function joinAlarmName(segments, sep = "/") {
|
|
36
|
+
const parts = segments.map(kebab).filter((s) => s.length > 0);
|
|
37
|
+
return alarmName(parts.join(sep));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Lower-cases and hyphenates a string: splits camelCase / PascalCase /
|
|
41
|
+
* snake_case / dotted boundaries into hyphen-separated lowercase words.
|
|
42
|
+
*/
|
|
43
|
+
function kebab(input) {
|
|
44
|
+
return input
|
|
45
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1-$2")
|
|
46
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1-$2")
|
|
47
|
+
.replace(/[_\s.]+/g, "-")
|
|
48
|
+
.replace(/-+/g, "-")
|
|
49
|
+
.replace(/^-|-$/g, "")
|
|
50
|
+
.toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=alarm-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-name.js","sourceRoot":"","sources":["../../src/alarm-name.ts"],"names":[],"mappings":";;AAoBA,8BAcC;AAQD,sCAGC;AAMD,sBAQC;AAlDD,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAClD,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;;;;;GAOG;AACH,SAAgB,SAAS,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,YAAY,OAAO,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,+FAA+F,OAAO,GAAG,CAC1G,CAAC;IACJ,CAAC;IACD,OAAO,OAAoB,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAA2B,EAAE,GAAG,GAAG,GAAG;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-alarms.d.ts","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,eAAe,EAAE,GAC7B,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAsBvB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAlarms = createAlarms;
|
|
4
|
+
const default_alarm_name_js_1 = require("./default-alarm-name.js");
|
|
5
|
+
function capitalize(s) {
|
|
6
|
+
return s[0].toUpperCase() + s.slice(1);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates CDK {@link Alarm} constructs from fully-resolved {@link AlarmDefinition}s.
|
|
10
|
+
*
|
|
11
|
+
* Validates that all definition keys are unique before creating alarms. Each
|
|
12
|
+
* alarm's `AlarmName` is taken verbatim from `def.alarmName` when supplied;
|
|
13
|
+
* otherwise it is derived from the scope, `id`, and `def.key` via
|
|
14
|
+
* {@link defaultAlarmName}.
|
|
15
|
+
*
|
|
16
|
+
* @param scope - CDK construct scope.
|
|
17
|
+
* @param id - Base identifier; each alarm's construct id is `${id}${Capitalize(key)}Alarm`.
|
|
18
|
+
* @param definitions - Fully-resolved alarm definitions.
|
|
19
|
+
* @returns A record mapping each definition's key to its created Alarm.
|
|
20
|
+
* @throws If duplicate keys are found in the definitions.
|
|
21
|
+
*/
|
|
22
|
+
function createAlarms(scope, id, definitions) {
|
|
23
|
+
const alarms = {};
|
|
24
|
+
for (const def of definitions) {
|
|
25
|
+
if (def.key in alarms) {
|
|
26
|
+
throw new Error(`Duplicate alarm key "${def.key}". Custom alarms cannot use the same key as a recommended alarm. ` +
|
|
27
|
+
`Disable the recommended alarm first, or use a different key.`);
|
|
28
|
+
}
|
|
29
|
+
alarms[def.key] = def.metric.createAlarm(scope, `${id}${capitalize(def.key)}Alarm`, {
|
|
30
|
+
alarmName: def.alarmName ?? (0, default_alarm_name_js_1.defaultAlarmName)(scope, id, def.key),
|
|
31
|
+
threshold: def.threshold,
|
|
32
|
+
evaluationPeriods: def.evaluationPeriods,
|
|
33
|
+
datapointsToAlarm: def.datapointsToAlarm,
|
|
34
|
+
treatMissingData: def.treatMissingData,
|
|
35
|
+
comparisonOperator: def.comparisonOperator,
|
|
36
|
+
alarmDescription: def.description,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return alarms;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=create-alarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-alarms.js","sourceRoot":"","sources":["../../src/create-alarms.ts"],"names":[],"mappings":";;AAuBA,oCA0BC;AA9CD,mEAA2D;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,YAAY,CAC1B,KAAiB,EACjB,EAAU,EACV,WAA8B;IAE9B,MAAM,MAAM,GAA0B,EAAE,CAAC;IAEzC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,GAAG,mEAAmE;gBAChG,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YAClF,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,IAAA,wCAAgB,EAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;YACxC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,gBAAgB,EAAE,GAAG,CAAC,WAAW;SAClC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-alarm-name.d.ts","sourceRoot":"","sources":["../../src/default-alarm-name.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAGtF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultAlarmName = defaultAlarmName;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const alarm_name_js_1 = require("./alarm-name.js");
|
|
6
|
+
/**
|
|
7
|
+
* Builds a human-readable, stack-scoped {@link AlarmName} from the alarm's
|
|
8
|
+
* scope, base id, and key.
|
|
9
|
+
*
|
|
10
|
+
* Format: `${stackName}/${kebab(id)}/${kebab(key)}`. Slashes are valid in
|
|
11
|
+
* CloudWatch alarm names and render hierarchy clearly in the console.
|
|
12
|
+
*
|
|
13
|
+
* Used by {@link createAlarms} as the fallback whenever an explicit
|
|
14
|
+
* `alarmName` is not supplied on the {@link AlarmDefinition}.
|
|
15
|
+
*/
|
|
16
|
+
function defaultAlarmName(scope, id, key) {
|
|
17
|
+
const stackName = aws_cdk_lib_1.Stack.of(scope).stackName;
|
|
18
|
+
return (0, alarm_name_js_1.joinAlarmName)([stackName, id, key]);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=default-alarm-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-alarm-name.js","sourceRoot":"","sources":["../../src/default-alarm-name.ts"],"names":[],"mappings":";;AAcA,4CAGC;AAjBD,6CAAoC;AAEpC,mDAAgE;AAEhE;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,KAAiB,EAAE,EAAU,EAAE,GAAW;IACzE,MAAM,SAAS,GAAG,mBAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC5C,OAAO,IAAA,6BAAa,EAAC,CAAC,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EACV,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.alarmNamePolicy = exports.alarmActionsPolicy = exports.resolveAlarmConfig = exports.createAlarms = exports.defaultAlarmName = exports.alarmName = exports.AlarmDefinitionBuilder = void 0;
|
|
4
|
+
var alarm_definition_builder_js_1 = require("./alarm-definition-builder.js");
|
|
5
|
+
Object.defineProperty(exports, "AlarmDefinitionBuilder", { enumerable: true, get: function () { return alarm_definition_builder_js_1.AlarmDefinitionBuilder; } });
|
|
6
|
+
var alarm_name_js_1 = require("./alarm-name.js");
|
|
7
|
+
Object.defineProperty(exports, "alarmName", { enumerable: true, get: function () { return alarm_name_js_1.alarmName; } });
|
|
8
|
+
var default_alarm_name_js_1 = require("./default-alarm-name.js");
|
|
9
|
+
Object.defineProperty(exports, "defaultAlarmName", { enumerable: true, get: function () { return default_alarm_name_js_1.defaultAlarmName; } });
|
|
10
|
+
var create_alarms_js_1 = require("./create-alarms.js");
|
|
11
|
+
Object.defineProperty(exports, "createAlarms", { enumerable: true, get: function () { return create_alarms_js_1.createAlarms; } });
|
|
12
|
+
var resolve_alarm_config_js_1 = require("./resolve-alarm-config.js");
|
|
13
|
+
Object.defineProperty(exports, "resolveAlarmConfig", { enumerable: true, get: function () { return resolve_alarm_config_js_1.resolveAlarmConfig; } });
|
|
14
|
+
var alarm_actions_policy_js_1 = require("./policies/alarm-actions-policy.js");
|
|
15
|
+
Object.defineProperty(exports, "alarmActionsPolicy", { enumerable: true, get: function () { return alarm_actions_policy_js_1.alarmActionsPolicy; } });
|
|
16
|
+
var alarm_name_policy_js_1 = require("./policies/alarm-name-policy.js");
|
|
17
|
+
Object.defineProperty(exports, "alarmNamePolicy", { enumerable: true, get: function () { return alarm_name_policy_js_1.alarmNamePolicy; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,6EAAuE;AAA9D,qIAAA,sBAAsB,OAAA;AAC/B,iDAA4D;AAAnC,0GAAA,SAAS,OAAA;AAClC,iEAA2D;AAAlD,yHAAA,gBAAgB,OAAA;AACzB,uDAAkD;AAAzC,gHAAA,YAAY,OAAA;AACrB,qEAAyF;AAAhF,6HAAA,kBAAkB,OAAA;AAC3B,8EAAwE;AAA/D,6HAAA,kBAAkB,OAAA;AAM3B,wEAKyC;AAJvC,uHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAGvE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3E,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,uBAAuB,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1C;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAgB,SAAQ,cAAc,EAAE,cAAc;IACrE,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC,kGAAkG;IAClG,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mFAAmF;IACnF,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AA4DD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAkD5F"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.alarmActionsPolicy = alarmActionsPolicy;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
|
+
const policy_matcher_js_1 = require("./policy-matcher.js");
|
|
7
|
+
function isL2AlarmLike(node) {
|
|
8
|
+
if (node === undefined)
|
|
9
|
+
return false;
|
|
10
|
+
const candidate = node;
|
|
11
|
+
return (typeof candidate.addAlarmAction === "function" &&
|
|
12
|
+
typeof candidate.addOkAction === "function" &&
|
|
13
|
+
typeof candidate.addInsufficientDataAction === "function");
|
|
14
|
+
}
|
|
15
|
+
function isAlreadyConfigured(cfn) {
|
|
16
|
+
// `cfn.alarmActions` is always a Lazy-wrapped array at aspect-visit time,
|
|
17
|
+
// even when empty. Resolve it against the owning Stack to inspect real contents.
|
|
18
|
+
const actions = cfn.alarmActions;
|
|
19
|
+
if (actions === undefined)
|
|
20
|
+
return false;
|
|
21
|
+
const resolved = aws_cdk_lib_1.Stack.of(cfn).resolve(actions);
|
|
22
|
+
if (resolved === undefined || resolved === null)
|
|
23
|
+
return false;
|
|
24
|
+
if (Array.isArray(resolved))
|
|
25
|
+
return resolved.length > 0;
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
function dedupe(items) {
|
|
29
|
+
const seen = new Set();
|
|
30
|
+
const result = [];
|
|
31
|
+
for (const item of items) {
|
|
32
|
+
if (!seen.has(item)) {
|
|
33
|
+
seen.add(item);
|
|
34
|
+
result.push(item);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
function visitAlarms(scope, visit) {
|
|
40
|
+
aws_cdk_lib_1.Aspects.of(scope).add({
|
|
41
|
+
visit(node) {
|
|
42
|
+
const isAlarm = aws_cloudwatch_1.CfnAlarm.isCfnAlarm(node);
|
|
43
|
+
const isComposite = aws_cloudwatch_1.CfnCompositeAlarm.isCfnCompositeAlarm(node);
|
|
44
|
+
if (!isAlarm && !isComposite)
|
|
45
|
+
return;
|
|
46
|
+
const parent = node.node.scope;
|
|
47
|
+
const l2 = isL2AlarmLike(parent) ? parent : undefined;
|
|
48
|
+
visit(node, l2, isComposite);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Attaches CloudWatch alarm actions to every `Alarm` and `CompositeAlarm`
|
|
54
|
+
* (L2) construct in the subtree under `scope`.
|
|
55
|
+
*
|
|
56
|
+
* The policy installs a CDK {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
57
|
+
* that fires during the synth prepare phase, so late-added alarms are also
|
|
58
|
+
* covered. Detection uses the jsii type guards
|
|
59
|
+
* `CfnAlarm.isCfnAlarm` / `CfnCompositeAlarm.isCfnCompositeAlarm` on the L1
|
|
60
|
+
* resource; the L2 parent is found via duck-typing on `addAlarmAction`.
|
|
61
|
+
* Actions are attached through the L2 so that `IAlarmAction.bind()` runs and
|
|
62
|
+
* permissions are wired correctly. Bare `CfnAlarm` nodes (created without an
|
|
63
|
+
* L2 wrapper) are detected but silently skipped.
|
|
64
|
+
*
|
|
65
|
+
* `defaults` apply to every matched alarm; `rules` append additional actions.
|
|
66
|
+
* A rule matches if any of its `match` entries matches. Set
|
|
67
|
+
* `replaceDefaults: true` on a rule to suppress defaults for its matched
|
|
68
|
+
* alarms.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* alarmActionsPolicy(app, {
|
|
73
|
+
* defaults: { alarmActions: [new SnsAction(standardTopic)] },
|
|
74
|
+
* rules: [
|
|
75
|
+
* { match: "HighSev", alarmActions: [new SnsAction(pagerTopic)] },
|
|
76
|
+
* ],
|
|
77
|
+
* });
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
function alarmActionsPolicy(scope, config) {
|
|
81
|
+
const { defaults, rules = [], skipIfAlreadyConfigured = false } = config;
|
|
82
|
+
const processed = new WeakSet();
|
|
83
|
+
visitAlarms(scope, (cfn, alarm, isComposite) => {
|
|
84
|
+
if (alarm === undefined)
|
|
85
|
+
return;
|
|
86
|
+
if (processed.has(alarm))
|
|
87
|
+
return;
|
|
88
|
+
if (skipIfAlreadyConfigured && isAlreadyConfigured(cfn))
|
|
89
|
+
return;
|
|
90
|
+
const ctx = {
|
|
91
|
+
alarm: alarm,
|
|
92
|
+
cfn,
|
|
93
|
+
id: alarm.node.id,
|
|
94
|
+
path: alarm.node.path,
|
|
95
|
+
isComposite,
|
|
96
|
+
};
|
|
97
|
+
const matched = rules.filter((r) => (0, policy_matcher_js_1.ruleMatches)(r, ctx));
|
|
98
|
+
const replaceDefaults = matched.some((r) => r.replaceDefaults === true);
|
|
99
|
+
const alarmActions = [];
|
|
100
|
+
const okActions = [];
|
|
101
|
+
const insufficientDataActions = [];
|
|
102
|
+
if (defaults !== undefined && !replaceDefaults) {
|
|
103
|
+
if (defaults.alarmActions !== undefined)
|
|
104
|
+
alarmActions.push(...defaults.alarmActions);
|
|
105
|
+
if (defaults.okActions !== undefined)
|
|
106
|
+
okActions.push(...defaults.okActions);
|
|
107
|
+
if (defaults.insufficientDataActions !== undefined) {
|
|
108
|
+
insufficientDataActions.push(...defaults.insufficientDataActions);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
for (const rule of matched) {
|
|
112
|
+
if (rule.alarmActions !== undefined)
|
|
113
|
+
alarmActions.push(...rule.alarmActions);
|
|
114
|
+
if (rule.okActions !== undefined)
|
|
115
|
+
okActions.push(...rule.okActions);
|
|
116
|
+
if (rule.insufficientDataActions !== undefined) {
|
|
117
|
+
insufficientDataActions.push(...rule.insufficientDataActions);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const uniqueAlarm = dedupe(alarmActions);
|
|
121
|
+
const uniqueOk = dedupe(okActions);
|
|
122
|
+
const uniqueInsufficient = dedupe(insufficientDataActions);
|
|
123
|
+
if (uniqueAlarm.length > 0)
|
|
124
|
+
alarm.addAlarmAction(...uniqueAlarm);
|
|
125
|
+
if (uniqueOk.length > 0)
|
|
126
|
+
alarm.addOkAction(...uniqueOk);
|
|
127
|
+
if (uniqueInsufficient.length > 0)
|
|
128
|
+
alarm.addInsufficientDataAction(...uniqueInsufficient);
|
|
129
|
+
processed.add(alarm);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=alarm-actions-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-name-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAE/F,yDAAyD;AACzD,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,SAAS,CAAC;IAC1D,iGAAiG;IACjG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACpD,4DAA4D;IAC5D,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAgDtF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.alarmNamePolicy = alarmNamePolicy;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
|
+
const alarm_name_js_1 = require("../alarm-name.js");
|
|
7
|
+
const policy_matcher_js_1 = require("./policy-matcher.js");
|
|
8
|
+
function decorate(current, prefix, suffix, sep) {
|
|
9
|
+
const parts = [];
|
|
10
|
+
if (prefix !== undefined && prefix.length > 0)
|
|
11
|
+
parts.push(prefix);
|
|
12
|
+
parts.push(current);
|
|
13
|
+
if (suffix !== undefined && suffix.length > 0)
|
|
14
|
+
parts.push(suffix);
|
|
15
|
+
return parts.join(sep);
|
|
16
|
+
}
|
|
17
|
+
function resolveAlarmName(cfn) {
|
|
18
|
+
const value = cfn.alarmName;
|
|
19
|
+
if (value === undefined)
|
|
20
|
+
return undefined;
|
|
21
|
+
const resolved = aws_cdk_lib_1.Stack.of(cfn).resolve(value);
|
|
22
|
+
return typeof resolved === "string" ? resolved : undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Decorates CloudWatch alarm names across an entire scope.
|
|
26
|
+
*
|
|
27
|
+
* Installs a CDK
|
|
28
|
+
* {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
29
|
+
* that fires during the synth prepare phase. For every `AWS::CloudWatch::Alarm`
|
|
30
|
+
* (and `AWS::CloudWatch::CompositeAlarm`) found beneath `scope`:
|
|
31
|
+
*
|
|
32
|
+
* 1. The alarm's existing name is read (set by the library default or the
|
|
33
|
+
* consumer's per-alarm override).
|
|
34
|
+
* 2. `defaults.prefix` / `defaults.suffix` decorate it, unless a matched
|
|
35
|
+
* rule sets `replaceDefaults: true`.
|
|
36
|
+
* 3. Each matching rule contributes in declaration order — `transform`
|
|
37
|
+
* replaces the current name; otherwise `prefix`/`suffix` decorate.
|
|
38
|
+
* 4. The final value is validated via {@link alarmName} and written back to
|
|
39
|
+
* `cfn.alarmName`.
|
|
40
|
+
*
|
|
41
|
+
* Use cases: stage prefixing (`prod-…`), severity tagging (`…-critical`),
|
|
42
|
+
* team scoping. Composes with per-alarm `alarmName` overrides — those run
|
|
43
|
+
* first, the policy decorates the result.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* alarmNamePolicy(app, {
|
|
48
|
+
* defaults: { prefix: "prod" },
|
|
49
|
+
* rules: [
|
|
50
|
+
* { match: /Errors$/, suffix: "critical" },
|
|
51
|
+
* { match: "throttles", suffix: "warning" },
|
|
52
|
+
* ],
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function alarmNamePolicy(scope, config) {
|
|
57
|
+
const { defaults, rules = [], separator = "-" } = config;
|
|
58
|
+
const processed = new WeakSet();
|
|
59
|
+
aws_cdk_lib_1.Aspects.of(scope).add({
|
|
60
|
+
visit(node) {
|
|
61
|
+
const isAlarm = aws_cloudwatch_1.CfnAlarm.isCfnAlarm(node);
|
|
62
|
+
const isComposite = aws_cloudwatch_1.CfnCompositeAlarm.isCfnCompositeAlarm(node);
|
|
63
|
+
if (!isAlarm && !isComposite)
|
|
64
|
+
return;
|
|
65
|
+
const cfn = node;
|
|
66
|
+
if (processed.has(cfn))
|
|
67
|
+
return;
|
|
68
|
+
const original = resolveAlarmName(cfn);
|
|
69
|
+
if (original === undefined)
|
|
70
|
+
return;
|
|
71
|
+
const parent = cfn.node.scope;
|
|
72
|
+
const ctx = {
|
|
73
|
+
alarm: undefined,
|
|
74
|
+
cfn,
|
|
75
|
+
id: parent?.node.id ?? cfn.node.id,
|
|
76
|
+
path: parent?.node.path ?? cfn.node.path,
|
|
77
|
+
isComposite,
|
|
78
|
+
};
|
|
79
|
+
const matched = rules.filter((r) => (0, policy_matcher_js_1.ruleMatches)(r, ctx));
|
|
80
|
+
const replaceDefaults = matched.some((r) => r.replaceDefaults === true);
|
|
81
|
+
let current = original;
|
|
82
|
+
if (defaults !== undefined && !replaceDefaults) {
|
|
83
|
+
current = decorate(current, defaults.prefix, defaults.suffix, separator);
|
|
84
|
+
}
|
|
85
|
+
for (const rule of matched) {
|
|
86
|
+
if (rule.transform !== undefined) {
|
|
87
|
+
current = rule.transform({ ...ctx, currentName: current });
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
current = decorate(current, rule.prefix, rule.suffix, separator);
|
|
91
|
+
}
|
|
92
|
+
if (current === original)
|
|
93
|
+
return;
|
|
94
|
+
const validated = (0, alarm_name_js_1.alarmName)(current);
|
|
95
|
+
cfn.alarmName = validated;
|
|
96
|
+
processed.add(cfn);
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=alarm-name-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alarm-name-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-matcher.d.ts","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEtF;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAIjF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAKjF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.matchesOne = matchesOne;
|
|
4
|
+
exports.ruleMatches = ruleMatches;
|
|
5
|
+
function matchesOne(matcher, ctx) {
|
|
6
|
+
if (typeof matcher === "function")
|
|
7
|
+
return matcher(ctx);
|
|
8
|
+
if (matcher instanceof RegExp)
|
|
9
|
+
return matcher.test(ctx.path);
|
|
10
|
+
return ctx.id.includes(matcher) || ctx.path.includes(matcher);
|
|
11
|
+
}
|
|
12
|
+
function ruleMatches(rule, ctx) {
|
|
13
|
+
if (rule.singleOnly === true && ctx.isComposite)
|
|
14
|
+
return false;
|
|
15
|
+
if (rule.compositeOnly === true && !ctx.isComposite)
|
|
16
|
+
return false;
|
|
17
|
+
const matchers = Array.isArray(rule.match) ? rule.match : [rule.match];
|
|
18
|
+
return matchers.some((m) => matchesOne(m, ctx));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=policy-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-matcher.js","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":";;AAgCA,gCAIC;AAED,kCAKC;AAXD,SAAgB,UAAU,CAAC,OAAqB,EAAE,GAAsB;IACtE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,OAAO,YAAY,MAAM;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,WAAW,CAAC,IAAoB,EAAE,GAAsB;IACtE,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-alarm-config.d.ts","sourceRoot":"","sources":["../../src/resolve-alarm-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,QAAQ,EAAE,mBAAmB,GAC5B,mBAAmB,CAQrB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveAlarmConfig = resolveAlarmConfig;
|
|
4
|
+
/**
|
|
5
|
+
* Resolves an absolute-threshold alarm config by layering user overrides
|
|
6
|
+
* onto the defaults. `alarmName` is propagated from user config only;
|
|
7
|
+
* defaults intentionally do not specify a name.
|
|
8
|
+
*/
|
|
9
|
+
function resolveAlarmConfig(userConfig, defaults) {
|
|
10
|
+
return {
|
|
11
|
+
alarmName: userConfig?.alarmName,
|
|
12
|
+
threshold: userConfig?.threshold ?? defaults.threshold,
|
|
13
|
+
evaluationPeriods: userConfig?.evaluationPeriods ?? defaults.evaluationPeriods,
|
|
14
|
+
datapointsToAlarm: userConfig?.datapointsToAlarm ?? defaults.datapointsToAlarm,
|
|
15
|
+
treatMissingData: userConfig?.treatMissingData ?? defaults.treatMissingData,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=resolve-alarm-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-alarm-config.js","sourceRoot":"","sources":["../../src/resolve-alarm-config.ts"],"names":[],"mappings":";;AAyBA,gDAWC;AAhBD;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,UAAmC,EACnC,QAA6B;IAE7B,OAAO;QACL,SAAS,EAAE,UAAU,EAAE,SAAS;QAChC,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,QAAQ,CAAC,SAAS;QACtD,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;QAC9E,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;QAC9E,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;KAC5E,CAAC;AACJ,CAAC"}
|