@composurecdk/cloudwatch 0.8.0 → 0.8.1
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/README.md +60 -1
- package/dist/commonjs/alarm-definition-builder.d.ts +6 -6
- package/dist/commonjs/alarm-definition-builder.d.ts.map +1 -1
- package/dist/commonjs/alarm-definition-builder.js +3 -3
- package/dist/commonjs/alarm-definition-builder.js.map +1 -1
- package/dist/commonjs/alarm-definition.d.ts +12 -2
- package/dist/commonjs/alarm-definition.d.ts.map +1 -1
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/policies/alarm-actions-policy.d.ts +19 -11
- package/dist/commonjs/policies/alarm-actions-policy.d.ts.map +1 -1
- package/dist/commonjs/policies/alarm-actions-policy.js +20 -13
- package/dist/commonjs/policies/alarm-actions-policy.js.map +1 -1
- package/dist/commonjs/policies/alarm-name-policy.d.ts.map +1 -1
- package/dist/commonjs/policies/alarm-name-policy.js +2 -3
- package/dist/commonjs/policies/alarm-name-policy.js.map +1 -1
- package/dist/commonjs/policies/policy-matcher.d.ts +15 -1
- package/dist/commonjs/policies/policy-matcher.d.ts.map +1 -1
- package/dist/commonjs/policies/policy-matcher.js +21 -0
- package/dist/commonjs/policies/policy-matcher.js.map +1 -1
- package/dist/esm/alarm-definition-builder.d.ts +6 -6
- package/dist/esm/alarm-definition-builder.d.ts.map +1 -1
- package/dist/esm/alarm-definition-builder.js +3 -3
- package/dist/esm/alarm-definition-builder.js.map +1 -1
- package/dist/esm/alarm-definition.d.ts +12 -2
- package/dist/esm/alarm-definition.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/policies/alarm-actions-policy.d.ts +19 -11
- package/dist/esm/policies/alarm-actions-policy.d.ts.map +1 -1
- package/dist/esm/policies/alarm-actions-policy.js +21 -14
- package/dist/esm/policies/alarm-actions-policy.js.map +1 -1
- package/dist/esm/policies/alarm-name-policy.d.ts.map +1 -1
- package/dist/esm/policies/alarm-name-policy.js +3 -4
- package/dist/esm/policies/alarm-name-policy.js.map +1 -1
- package/dist/esm/policies/policy-matcher.d.ts +15 -1
- package/dist/esm/policies/policy-matcher.d.ts.map +1 -1
- package/dist/esm/policies/policy-matcher.js +19 -0
- package/dist/esm/policies/policy-matcher.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -46,6 +46,40 @@ The `description` method also accepts a factory for contextual descriptions:
|
|
|
46
46
|
builder.description((def) => `Alert when invocations >= ${def.threshold} per minute`);
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
### Rate and ratio alarms
|
|
50
|
+
|
|
51
|
+
The metric factory may return either a `Metric` or a `MathExpression` (the
|
|
52
|
+
exported `AlarmMetric` union), so rate/ratio alarms share the same definition
|
|
53
|
+
shape:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { MathExpression } from "aws-cdk-lib/aws-cloudwatch";
|
|
57
|
+
|
|
58
|
+
new AlarmDefinitionBuilder<LambdaFunction>("errorRate")
|
|
59
|
+
// Guard the denominator: a divide-by-zero data point is dropped, which would
|
|
60
|
+
// otherwise push the alarm into INSUFFICIENT_DATA when there are no invocations.
|
|
61
|
+
.metric(
|
|
62
|
+
(fn) =>
|
|
63
|
+
new MathExpression({
|
|
64
|
+
expression: "IF(invocations > 0, errors / invocations, 0)",
|
|
65
|
+
usingMetrics: {
|
|
66
|
+
errors: fn.metricErrors(),
|
|
67
|
+
invocations: fn.metricInvocations(),
|
|
68
|
+
},
|
|
69
|
+
// Set the period on the expression — it overrides the period of every
|
|
70
|
+
// metric in usingMetrics (default 5 minutes otherwise).
|
|
71
|
+
period: Duration.minutes(1),
|
|
72
|
+
}),
|
|
73
|
+
)
|
|
74
|
+
.threshold(0.05)
|
|
75
|
+
.greaterThanOrEqual()
|
|
76
|
+
.treatMissingData(TreatMissingData.NOT_BREACHING);
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Only single-time-series expressions can be alarmed: a `MathExpression` whose
|
|
80
|
+
expression uses `SEARCH(...)` (or otherwise returns multiple series) is rejected
|
|
81
|
+
by CloudWatch at deploy time.
|
|
82
|
+
|
|
49
83
|
## createAlarms
|
|
50
84
|
|
|
51
85
|
Factory function that creates CDK [Alarm](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_cloudwatch.Alarm.html) constructs from fully-resolved `AlarmDefinition`s. Returns a `Record<string, Alarm>` keyed by each definition's key.
|
|
@@ -123,6 +157,8 @@ alarmActionsPolicy(app, {
|
|
|
123
157
|
});
|
|
124
158
|
```
|
|
125
159
|
|
|
160
|
+
The policy is implemented as a CDK [Aspect](https://docs.aws.amazon.com/cdk/v2/guide/aspects.html) — it has no dependency on `@composurecdk/core` and works in any CDK app. Because aspects fire during synth, the policy can be registered before or after the alarms it targets, and there is **no need to wrap the call in `afterBuild`** — calling `alarmActionsPolicy(app, …)` at app scope outside any `compose()` chain is the recommended shape. The only constraint is that any `IAlarmAction` instances in the config (e.g. `new SnsAction(topic)`) must reference constructs that already exist when the policy is called.
|
|
161
|
+
|
|
126
162
|
Per-alarm routing is expressed as rules. Matchers can be a substring (tested against both the alarm's `id` and `path`), a `RegExp` (tested against `path`), or a predicate receiving the full match context. Rules append actions on top of `defaults`; set `replaceDefaults: true` on a rule to suppress defaults for its matched alarms.
|
|
127
163
|
|
|
128
164
|
```ts
|
|
@@ -137,7 +173,30 @@ alarmActionsPolicy(app, {
|
|
|
137
173
|
|
|
138
174
|
All three action states are supported: `alarmActions`, `okActions`, and `insufficientDataActions`.
|
|
139
175
|
|
|
140
|
-
|
|
176
|
+
### Per-scope routing: different topics for different stacks
|
|
177
|
+
|
|
178
|
+
Rules route by _alarm identity_ (id, path, predicate). When you instead need to route by _scope_ — e.g. one SNS topic for everything in `us-east-1` and another for the primary region — call `alarmActionsPolicy` multiple times, once per target scope. If the topics are themselves built by the composed system, this is the case where wrapping in [`afterBuild`](../core/README.md) is load-bearing: the closure captures the build `results` so each call can reference its topic.
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
compose(
|
|
182
|
+
{ usEast1Alerts: createTopicBuilder(), siteAlerts: createTopicBuilder() },
|
|
183
|
+
{
|
|
184
|
+
/* … */
|
|
185
|
+
},
|
|
186
|
+
)
|
|
187
|
+
.withStacks({ usEast1Alerts: usEast1AlertsStack, siteAlerts: siteStack })
|
|
188
|
+
.afterBuild((_scope, _id, results) => {
|
|
189
|
+
alarmActionsPolicy(usEast1AlertsStack, {
|
|
190
|
+
defaults: { alarmActions: [new SnsAction(results.usEast1Alerts.topic)] },
|
|
191
|
+
});
|
|
192
|
+
alarmActionsPolicy(siteStack, {
|
|
193
|
+
defaults: { alarmActions: [new SnsAction(results.siteAlerts.topic)] },
|
|
194
|
+
});
|
|
195
|
+
})
|
|
196
|
+
.build(app, "MySystem");
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
If a _single_ topic covers the whole app, prefer the top-level form above — `afterBuild` adds nothing in that case.
|
|
141
200
|
|
|
142
201
|
### Limitation: L2 alarms only
|
|
143
202
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { AlarmDefinition } from "./alarm-definition.js";
|
|
1
|
+
import { TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
|
|
3
3
|
import type { AlarmName } from "./alarm-name.js";
|
|
4
4
|
/**
|
|
5
5
|
* Fluent builder for constructing deferred {@link AlarmDefinition}s.
|
|
6
6
|
*
|
|
7
|
-
* Stores a metric factory `(construct: T) =>
|
|
8
|
-
* Call {@link resolve} during build to
|
|
9
|
-
* complete {@link AlarmDefinition}.
|
|
7
|
+
* Stores a metric factory `(construct: T) => AlarmMetric` at configuration time
|
|
8
|
+
* (a `Metric` or a `MathExpression`). Call {@link resolve} during build to
|
|
9
|
+
* invoke the factory and produce a complete {@link AlarmDefinition}.
|
|
10
10
|
*
|
|
11
11
|
* @typeParam TConstruct - The construct type the metric factory receives.
|
|
12
12
|
*/
|
|
13
13
|
export declare class AlarmDefinitionBuilder<TConstruct> {
|
|
14
14
|
#private;
|
|
15
15
|
constructor(key: string);
|
|
16
|
-
metric(factory: (construct: TConstruct) =>
|
|
16
|
+
metric(factory: (construct: TConstruct) => AlarmMetric): this;
|
|
17
17
|
/**
|
|
18
18
|
* Sets an explicit CloudWatch alarm name. When unset, {@link createAlarms}
|
|
19
19
|
* derives a default from the stack name, builder id, and alarm key. Use
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,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,WAAW,GAAG,IAAI;IAK7D;;;;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"}
|
|
@@ -5,9 +5,9 @@ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
|
5
5
|
/**
|
|
6
6
|
* Fluent builder for constructing deferred {@link AlarmDefinition}s.
|
|
7
7
|
*
|
|
8
|
-
* Stores a metric factory `(construct: T) =>
|
|
9
|
-
* Call {@link resolve} during build to
|
|
10
|
-
* complete {@link AlarmDefinition}.
|
|
8
|
+
* Stores a metric factory `(construct: T) => AlarmMetric` at configuration time
|
|
9
|
+
* (a `Metric` or a `MathExpression`). Call {@link resolve} during build to
|
|
10
|
+
* invoke the factory and produce a complete {@link AlarmDefinition}.
|
|
11
11
|
*
|
|
12
12
|
* @typeParam TConstruct - The construct type the metric factory receives.
|
|
13
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import type { ComparisonOperator, Metric, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
1
|
+
import type { ComparisonOperator, MathExpression, Metric, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
2
|
import type { AlarmName } from "./alarm-name.js";
|
|
3
|
+
/**
|
|
4
|
+
* A metric an alarm can be created from: either a single {@link Metric} or a
|
|
5
|
+
* {@link MathExpression} (e.g. a rate/ratio like `errors / invocations`).
|
|
6
|
+
*
|
|
7
|
+
* Both classes carry `createAlarm(...)` — it is declared on the concrete
|
|
8
|
+
* classes, not on `IMetric` — so this union is exactly what {@link createAlarms}
|
|
9
|
+
* needs to call. When using a `MathExpression`, set its `period` explicitly:
|
|
10
|
+
* the expression overrides the period of every metric in `usingMetrics`.
|
|
11
|
+
*/
|
|
12
|
+
export type AlarmMetric = Metric | MathExpression;
|
|
3
13
|
/**
|
|
4
14
|
* A fully-resolved alarm descriptor. All fields are required —
|
|
5
15
|
* this is the canonical form consumed by {@link createAlarms}.
|
|
@@ -10,7 +20,7 @@ import type { AlarmName } from "./alarm-name.js";
|
|
|
10
20
|
export interface AlarmDefinition {
|
|
11
21
|
key: string;
|
|
12
22
|
alarmName?: AlarmName;
|
|
13
|
-
metric:
|
|
23
|
+
metric: AlarmMetric;
|
|
14
24
|
threshold: number;
|
|
15
25
|
comparisonOperator: ComparisonOperator;
|
|
16
26
|
evaluationPeriods: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,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"}
|
package/dist/commonjs/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { AlarmConfig, AlarmConfigDefaults } from "./alarm-config.js";
|
|
2
|
-
export type { AlarmDefinition } from "./alarm-definition.js";
|
|
2
|
+
export type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
|
|
3
3
|
export { AlarmDefinitionBuilder } from "./alarm-definition-builder.js";
|
|
4
4
|
export { type AlarmName, alarmName } from "./alarm-name.js";
|
|
5
5
|
export { defaultAlarmName } from "./default-alarm-name.js";
|
|
@@ -1 +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;
|
|
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,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
2
|
import { type IConstruct } from "constructs";
|
|
3
3
|
import { type AlarmRuleScope } from "./policy-matcher.js";
|
|
4
4
|
export type { AlarmMatchContext, AlarmMatcher } from "./policy-matcher.js";
|
|
@@ -23,17 +23,25 @@ export interface AlarmActionsPolicyConfig {
|
|
|
23
23
|
skipIfAlreadyConfigured?: boolean;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* Registers a CDK {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
27
|
+
* on `scope` that attaches CloudWatch alarm actions to every `Alarm` and
|
|
28
|
+
* `CompositeAlarm` (L2) construct in the subtree at synth time. Call once
|
|
29
|
+
* with any scope — an `App`, a `Stack`, or the scope passed to `.build()`
|
|
30
|
+
* for a composed system; alarms added after the call still pick up the
|
|
31
|
+
* policy, so call ordering is irrelevant as
|
|
32
|
+
* long as it happens before `app.synth()`. In particular, there is no need
|
|
33
|
+
* to wrap this call in `afterBuild` — the Aspect runs after the construct
|
|
34
|
+
* tree is finalised, not at call time. The only temporal constraint is that
|
|
35
|
+
* any `IAlarmAction` instances in `config` (e.g. `new SnsAction(topic)`)
|
|
36
|
+
* must reference constructs that already exist when the policy is called.
|
|
28
37
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* L2 wrapper) are detected but silently skipped.
|
|
38
|
+
* Detection uses the version-portable `isCfnAlarm` / `isCfnCompositeAlarm`
|
|
39
|
+
* guards (`CfnResource.isCfnResource` + `cfnResourceType`, so they work below
|
|
40
|
+
* aws-cdk-lib 2.231.0) on the L1 resource; the L2 parent is found via
|
|
41
|
+
* duck-typing on `addAlarmAction`. Actions are attached through
|
|
42
|
+
* the L2 so that `IAlarmAction.bind()` runs and permissions are wired
|
|
43
|
+
* correctly. Bare `CfnAlarm` nodes (created without an L2 wrapper) are
|
|
44
|
+
* detected but silently skipped.
|
|
37
45
|
*
|
|
38
46
|
* `defaults` apply to every matched alarm; `rules` append additional actions.
|
|
39
47
|
* A rule matches if any of its `match` entries matches. Set
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-actions-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuC,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,qBAAqB,CAAC;AAE7B,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAkD5F"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.alarmActionsPolicy = alarmActionsPolicy;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
-
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
5
|
const policy_matcher_js_1 = require("./policy-matcher.js");
|
|
7
6
|
function isL2AlarmLike(node) {
|
|
8
7
|
if (node === undefined)
|
|
@@ -39,8 +38,8 @@ function dedupe(items) {
|
|
|
39
38
|
function visitAlarms(scope, visit) {
|
|
40
39
|
aws_cdk_lib_1.Aspects.of(scope).add({
|
|
41
40
|
visit(node) {
|
|
42
|
-
const isAlarm =
|
|
43
|
-
const isComposite =
|
|
41
|
+
const isAlarm = (0, policy_matcher_js_1.isCfnAlarm)(node);
|
|
42
|
+
const isComposite = (0, policy_matcher_js_1.isCfnCompositeAlarm)(node);
|
|
44
43
|
if (!isAlarm && !isComposite)
|
|
45
44
|
return;
|
|
46
45
|
const parent = node.node.scope;
|
|
@@ -50,17 +49,25 @@ function visitAlarms(scope, visit) {
|
|
|
50
49
|
});
|
|
51
50
|
}
|
|
52
51
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
52
|
+
* Registers a CDK {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
53
|
+
* on `scope` that attaches CloudWatch alarm actions to every `Alarm` and
|
|
54
|
+
* `CompositeAlarm` (L2) construct in the subtree at synth time. Call once
|
|
55
|
+
* with any scope — an `App`, a `Stack`, or the scope passed to `.build()`
|
|
56
|
+
* for a composed system; alarms added after the call still pick up the
|
|
57
|
+
* policy, so call ordering is irrelevant as
|
|
58
|
+
* long as it happens before `app.synth()`. In particular, there is no need
|
|
59
|
+
* to wrap this call in `afterBuild` — the Aspect runs after the construct
|
|
60
|
+
* tree is finalised, not at call time. The only temporal constraint is that
|
|
61
|
+
* any `IAlarmAction` instances in `config` (e.g. `new SnsAction(topic)`)
|
|
62
|
+
* must reference constructs that already exist when the policy is called.
|
|
55
63
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* L2 wrapper) are detected but silently skipped.
|
|
64
|
+
* Detection uses the version-portable `isCfnAlarm` / `isCfnCompositeAlarm`
|
|
65
|
+
* guards (`CfnResource.isCfnResource` + `cfnResourceType`, so they work below
|
|
66
|
+
* aws-cdk-lib 2.231.0) on the L1 resource; the L2 parent is found via
|
|
67
|
+
* duck-typing on `addAlarmAction`. Actions are attached through
|
|
68
|
+
* the L2 so that `IAlarmAction.bind()` runs and permissions are wired
|
|
69
|
+
* correctly. Bare `CfnAlarm` nodes (created without an L2 wrapper) are
|
|
70
|
+
* detected but silently skipped.
|
|
64
71
|
*
|
|
65
72
|
* `defaults` apply to every matched alarm; `rules` append additional actions.
|
|
66
73
|
* A rule matches if any of its `match` entries matches. Set
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-actions-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAIpB,MAAM,qBAAqB,CAAC;AAE7B,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"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.alarmNamePolicy = alarmNamePolicy;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
-
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
5
|
const alarm_name_js_1 = require("../alarm-name.js");
|
|
7
6
|
const policy_matcher_js_1 = require("./policy-matcher.js");
|
|
8
7
|
function decorate(current, prefix, suffix, sep) {
|
|
@@ -58,8 +57,8 @@ function alarmNamePolicy(scope, config) {
|
|
|
58
57
|
const processed = new WeakSet();
|
|
59
58
|
aws_cdk_lib_1.Aspects.of(scope).add({
|
|
60
59
|
visit(node) {
|
|
61
|
-
const isAlarm =
|
|
62
|
-
const isComposite =
|
|
60
|
+
const isAlarm = (0, policy_matcher_js_1.isCfnAlarm)(node);
|
|
61
|
+
const isComposite = (0, policy_matcher_js_1.isCfnCompositeAlarm)(node);
|
|
63
62
|
if (!isAlarm && !isComposite)
|
|
64
63
|
return;
|
|
65
64
|
const cfn = node;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-name-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"alarm-name-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CfnAlarm, CfnCompositeAlarm, type IAlarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { IConstruct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Version-portable replacement for `CfnAlarm.isCfnAlarm`, which only exists in
|
|
5
|
+
* aws-cdk-lib >= 2.231.0 and throws `TypeError` on older versions inside our
|
|
6
|
+
* declared `^2.0.0` peer range (issue #146). Checks the foundational
|
|
7
|
+
* `CfnResource.isCfnResource` guard plus a `cfnResourceType` compare — exactly
|
|
8
|
+
* what the modern static does internally — so it works across the full range.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isCfnAlarm(x: IConstruct): x is CfnAlarm;
|
|
11
|
+
/**
|
|
12
|
+
* Version-portable replacement for `CfnCompositeAlarm.isCfnCompositeAlarm`.
|
|
13
|
+
* See {@link isCfnAlarm} for why this exists.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isCfnCompositeAlarm(x: IConstruct): x is CfnCompositeAlarm;
|
|
2
16
|
/**
|
|
3
17
|
* Selects which alarms a rule applies to.
|
|
4
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-matcher.d.ts","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy-matcher.d.ts","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,IAAI,QAAQ,CAEvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,IAAI,iBAAiB,CAIzE;AAED;;;;;;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"}
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCfnAlarm = isCfnAlarm;
|
|
4
|
+
exports.isCfnCompositeAlarm = isCfnCompositeAlarm;
|
|
3
5
|
exports.matchesOne = matchesOne;
|
|
4
6
|
exports.ruleMatches = ruleMatches;
|
|
7
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
9
|
+
/**
|
|
10
|
+
* Version-portable replacement for `CfnAlarm.isCfnAlarm`, which only exists in
|
|
11
|
+
* aws-cdk-lib >= 2.231.0 and throws `TypeError` on older versions inside our
|
|
12
|
+
* declared `^2.0.0` peer range (issue #146). Checks the foundational
|
|
13
|
+
* `CfnResource.isCfnResource` guard plus a `cfnResourceType` compare — exactly
|
|
14
|
+
* what the modern static does internally — so it works across the full range.
|
|
15
|
+
*/
|
|
16
|
+
function isCfnAlarm(x) {
|
|
17
|
+
return aws_cdk_lib_1.CfnResource.isCfnResource(x) && x.cfnResourceType === aws_cloudwatch_1.CfnAlarm.CFN_RESOURCE_TYPE_NAME;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Version-portable replacement for `CfnCompositeAlarm.isCfnCompositeAlarm`.
|
|
21
|
+
* See {@link isCfnAlarm} for why this exists.
|
|
22
|
+
*/
|
|
23
|
+
function isCfnCompositeAlarm(x) {
|
|
24
|
+
return (aws_cdk_lib_1.CfnResource.isCfnResource(x) && x.cfnResourceType === aws_cloudwatch_1.CfnCompositeAlarm.CFN_RESOURCE_TYPE_NAME);
|
|
25
|
+
}
|
|
5
26
|
function matchesOne(matcher, ctx) {
|
|
6
27
|
if (typeof matcher === "function")
|
|
7
28
|
return matcher(ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-matcher.js","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"policy-matcher.js","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":";;AAWA,gCAEC;AAMD,kDAIC;AAgCD,gCAIC;AAED,kCAKC;AAlED,6CAA0C;AAC1C,+DAAsF;AAGtF;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,CAAa;IACtC,OAAO,yBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,yBAAQ,CAAC,sBAAsB,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,CAAa;IAC/C,OAAO,CACL,yBAAW,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,kCAAiB,CAAC,sBAAsB,CAC/F,CAAC;AACJ,CAAC;AAgCD,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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { AlarmDefinition } from "./alarm-definition.js";
|
|
1
|
+
import { TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
|
|
3
3
|
import type { AlarmName } from "./alarm-name.js";
|
|
4
4
|
/**
|
|
5
5
|
* Fluent builder for constructing deferred {@link AlarmDefinition}s.
|
|
6
6
|
*
|
|
7
|
-
* Stores a metric factory `(construct: T) =>
|
|
8
|
-
* Call {@link resolve} during build to
|
|
9
|
-
* complete {@link AlarmDefinition}.
|
|
7
|
+
* Stores a metric factory `(construct: T) => AlarmMetric` at configuration time
|
|
8
|
+
* (a `Metric` or a `MathExpression`). Call {@link resolve} during build to
|
|
9
|
+
* invoke the factory and produce a complete {@link AlarmDefinition}.
|
|
10
10
|
*
|
|
11
11
|
* @typeParam TConstruct - The construct type the metric factory receives.
|
|
12
12
|
*/
|
|
13
13
|
export declare class AlarmDefinitionBuilder<TConstruct> {
|
|
14
14
|
#private;
|
|
15
15
|
constructor(key: string);
|
|
16
|
-
metric(factory: (construct: TConstruct) =>
|
|
16
|
+
metric(factory: (construct: TConstruct) => AlarmMetric): this;
|
|
17
17
|
/**
|
|
18
18
|
* Sets an explicit CloudWatch alarm name. When unset, {@link createAlarms}
|
|
19
19
|
* derives a default from the stack name, builder id, and alarm key. Use
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.d.ts","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,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,WAAW,GAAG,IAAI;IAK7D;;;;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"}
|
|
@@ -2,9 +2,9 @@ import { ComparisonOperator, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch
|
|
|
2
2
|
/**
|
|
3
3
|
* Fluent builder for constructing deferred {@link AlarmDefinition}s.
|
|
4
4
|
*
|
|
5
|
-
* Stores a metric factory `(construct: T) =>
|
|
6
|
-
* Call {@link resolve} during build to
|
|
7
|
-
* complete {@link AlarmDefinition}.
|
|
5
|
+
* Stores a metric factory `(construct: T) => AlarmMetric` at configuration time
|
|
6
|
+
* (a `Metric` or a `MathExpression`). Call {@link resolve} during build to
|
|
7
|
+
* invoke the factory and produce a complete {@link AlarmDefinition}.
|
|
8
8
|
*
|
|
9
9
|
* @typeParam TConstruct - The construct type the metric factory receives.
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"alarm-definition-builder.js","sourceRoot":"","sources":["../../src/alarm-definition-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
-
import type { ComparisonOperator, Metric, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
1
|
+
import type { ComparisonOperator, MathExpression, Metric, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
2
|
import type { AlarmName } from "./alarm-name.js";
|
|
3
|
+
/**
|
|
4
|
+
* A metric an alarm can be created from: either a single {@link Metric} or a
|
|
5
|
+
* {@link MathExpression} (e.g. a rate/ratio like `errors / invocations`).
|
|
6
|
+
*
|
|
7
|
+
* Both classes carry `createAlarm(...)` — it is declared on the concrete
|
|
8
|
+
* classes, not on `IMetric` — so this union is exactly what {@link createAlarms}
|
|
9
|
+
* needs to call. When using a `MathExpression`, set its `period` explicitly:
|
|
10
|
+
* the expression overrides the period of every metric in `usingMetrics`.
|
|
11
|
+
*/
|
|
12
|
+
export type AlarmMetric = Metric | MathExpression;
|
|
3
13
|
/**
|
|
4
14
|
* A fully-resolved alarm descriptor. All fields are required —
|
|
5
15
|
* this is the canonical form consumed by {@link createAlarms}.
|
|
@@ -10,7 +20,7 @@ import type { AlarmName } from "./alarm-name.js";
|
|
|
10
20
|
export interface AlarmDefinition {
|
|
11
21
|
key: string;
|
|
12
22
|
alarmName?: AlarmName;
|
|
13
|
-
metric:
|
|
23
|
+
metric: AlarmMetric;
|
|
14
24
|
threshold: number;
|
|
15
25
|
comparisonOperator: ComparisonOperator;
|
|
16
26
|
evaluationPeriods: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"alarm-definition.d.ts","sourceRoot":"","sources":["../../src/alarm-definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,MAAM,EACN,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { AlarmConfig, AlarmConfigDefaults } from "./alarm-config.js";
|
|
2
|
-
export type { AlarmDefinition } from "./alarm-definition.js";
|
|
2
|
+
export type { AlarmDefinition, AlarmMetric } from "./alarm-definition.js";
|
|
3
3
|
export { AlarmDefinitionBuilder } from "./alarm-definition-builder.js";
|
|
4
4
|
export { type AlarmName, alarmName } from "./alarm-name.js";
|
|
5
5
|
export { defaultAlarmName } from "./default-alarm-name.js";
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
2
|
import { type IConstruct } from "constructs";
|
|
3
3
|
import { type AlarmRuleScope } from "./policy-matcher.js";
|
|
4
4
|
export type { AlarmMatchContext, AlarmMatcher } from "./policy-matcher.js";
|
|
@@ -23,17 +23,25 @@ export interface AlarmActionsPolicyConfig {
|
|
|
23
23
|
skipIfAlreadyConfigured?: boolean;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* Registers a CDK {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
27
|
+
* on `scope` that attaches CloudWatch alarm actions to every `Alarm` and
|
|
28
|
+
* `CompositeAlarm` (L2) construct in the subtree at synth time. Call once
|
|
29
|
+
* with any scope — an `App`, a `Stack`, or the scope passed to `.build()`
|
|
30
|
+
* for a composed system; alarms added after the call still pick up the
|
|
31
|
+
* policy, so call ordering is irrelevant as
|
|
32
|
+
* long as it happens before `app.synth()`. In particular, there is no need
|
|
33
|
+
* to wrap this call in `afterBuild` — the Aspect runs after the construct
|
|
34
|
+
* tree is finalised, not at call time. The only temporal constraint is that
|
|
35
|
+
* any `IAlarmAction` instances in `config` (e.g. `new SnsAction(topic)`)
|
|
36
|
+
* must reference constructs that already exist when the policy is called.
|
|
28
37
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* L2 wrapper) are detected but silently skipped.
|
|
38
|
+
* Detection uses the version-portable `isCfnAlarm` / `isCfnCompositeAlarm`
|
|
39
|
+
* guards (`CfnResource.isCfnResource` + `cfnResourceType`, so they work below
|
|
40
|
+
* aws-cdk-lib 2.231.0) on the L1 resource; the L2 parent is found via
|
|
41
|
+
* duck-typing on `addAlarmAction`. Actions are attached through
|
|
42
|
+
* the L2 so that `IAlarmAction.bind()` runs and permissions are wired
|
|
43
|
+
* correctly. Bare `CfnAlarm` nodes (created without an L2 wrapper) are
|
|
44
|
+
* detected but silently skipped.
|
|
37
45
|
*
|
|
38
46
|
* `defaults` apply to every matched alarm; `rules` append additional actions.
|
|
39
47
|
* A rule matches if any of its `match` entries matches. Set
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-actions-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.d.ts","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuC,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACpG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,qBAAqB,CAAC;AAE7B,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAkD5F"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Aspects, Stack } from "aws-cdk-lib";
|
|
2
|
-
import {
|
|
3
|
-
import { ruleMatches } from "./policy-matcher.js";
|
|
2
|
+
import { isCfnAlarm, isCfnCompositeAlarm, ruleMatches, } from "./policy-matcher.js";
|
|
4
3
|
function isL2AlarmLike(node) {
|
|
5
4
|
if (node === undefined)
|
|
6
5
|
return false;
|
|
@@ -36,8 +35,8 @@ function dedupe(items) {
|
|
|
36
35
|
function visitAlarms(scope, visit) {
|
|
37
36
|
Aspects.of(scope).add({
|
|
38
37
|
visit(node) {
|
|
39
|
-
const isAlarm =
|
|
40
|
-
const isComposite =
|
|
38
|
+
const isAlarm = isCfnAlarm(node);
|
|
39
|
+
const isComposite = isCfnCompositeAlarm(node);
|
|
41
40
|
if (!isAlarm && !isComposite)
|
|
42
41
|
return;
|
|
43
42
|
const parent = node.node.scope;
|
|
@@ -47,17 +46,25 @@ function visitAlarms(scope, visit) {
|
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
48
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
49
|
+
* Registers a CDK {@link https://docs.aws.amazon.com/cdk/v2/guide/aspects.html | Aspect}
|
|
50
|
+
* on `scope` that attaches CloudWatch alarm actions to every `Alarm` and
|
|
51
|
+
* `CompositeAlarm` (L2) construct in the subtree at synth time. Call once
|
|
52
|
+
* with any scope — an `App`, a `Stack`, or the scope passed to `.build()`
|
|
53
|
+
* for a composed system; alarms added after the call still pick up the
|
|
54
|
+
* policy, so call ordering is irrelevant as
|
|
55
|
+
* long as it happens before `app.synth()`. In particular, there is no need
|
|
56
|
+
* to wrap this call in `afterBuild` — the Aspect runs after the construct
|
|
57
|
+
* tree is finalised, not at call time. The only temporal constraint is that
|
|
58
|
+
* any `IAlarmAction` instances in `config` (e.g. `new SnsAction(topic)`)
|
|
59
|
+
* must reference constructs that already exist when the policy is called.
|
|
52
60
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* L2 wrapper) are detected but silently skipped.
|
|
61
|
+
* Detection uses the version-portable `isCfnAlarm` / `isCfnCompositeAlarm`
|
|
62
|
+
* guards (`CfnResource.isCfnResource` + `cfnResourceType`, so they work below
|
|
63
|
+
* aws-cdk-lib 2.231.0) on the L1 resource; the L2 parent is found via
|
|
64
|
+
* duck-typing on `addAlarmAction`. Actions are attached through
|
|
65
|
+
* the L2 so that `IAlarmAction.bind()` runs and permissions are wired
|
|
66
|
+
* correctly. Bare `CfnAlarm` nodes (created without an L2 wrapper) are
|
|
67
|
+
* detected but silently skipped.
|
|
61
68
|
*
|
|
62
69
|
* `defaults` apply to every matched alarm; `rules` append additional actions.
|
|
63
70
|
* A rule matches if any of its `match` entries matches. Set
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-actions-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"alarm-actions-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-actions-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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,
|
|
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,EACL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAIpB,MAAM,qBAAqB,CAAC;AAE7B,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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Aspects, Stack } from "aws-cdk-lib";
|
|
2
|
-
import { CfnAlarm, CfnCompositeAlarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
2
|
import { alarmName as brandAlarmName } from "../alarm-name.js";
|
|
4
|
-
import { ruleMatches } from "./policy-matcher.js";
|
|
3
|
+
import { isCfnAlarm, isCfnCompositeAlarm, ruleMatches, } from "./policy-matcher.js";
|
|
5
4
|
function decorate(current, prefix, suffix, sep) {
|
|
6
5
|
const parts = [];
|
|
7
6
|
if (prefix !== undefined && prefix.length > 0)
|
|
@@ -55,8 +54,8 @@ export function alarmNamePolicy(scope, config) {
|
|
|
55
54
|
const processed = new WeakSet();
|
|
56
55
|
Aspects.of(scope).add({
|
|
57
56
|
visit(node) {
|
|
58
|
-
const isAlarm =
|
|
59
|
-
const isComposite =
|
|
57
|
+
const isAlarm = isCfnAlarm(node);
|
|
58
|
+
const isComposite = isCfnCompositeAlarm(node);
|
|
60
59
|
if (!isAlarm && !isComposite)
|
|
61
60
|
return;
|
|
62
61
|
const cfn = node;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alarm-name-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"alarm-name-policy.js","sourceRoot":"","sources":["../../../src/policies/alarm-name-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { CfnAlarm, CfnCompositeAlarm, type IAlarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import type { IConstruct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Version-portable replacement for `CfnAlarm.isCfnAlarm`, which only exists in
|
|
5
|
+
* aws-cdk-lib >= 2.231.0 and throws `TypeError` on older versions inside our
|
|
6
|
+
* declared `^2.0.0` peer range (issue #146). Checks the foundational
|
|
7
|
+
* `CfnResource.isCfnResource` guard plus a `cfnResourceType` compare — exactly
|
|
8
|
+
* what the modern static does internally — so it works across the full range.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isCfnAlarm(x: IConstruct): x is CfnAlarm;
|
|
11
|
+
/**
|
|
12
|
+
* Version-portable replacement for `CfnCompositeAlarm.isCfnCompositeAlarm`.
|
|
13
|
+
* See {@link isCfnAlarm} for why this exists.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isCfnCompositeAlarm(x: IConstruct): x is CfnCompositeAlarm;
|
|
2
16
|
/**
|
|
3
17
|
* Selects which alarms a rule applies to.
|
|
4
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-matcher.d.ts","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy-matcher.d.ts","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,IAAI,QAAQ,CAEvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,IAAI,iBAAiB,CAIzE;AAED;;;;;;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"}
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
import { CfnResource } from "aws-cdk-lib";
|
|
2
|
+
import { CfnAlarm, CfnCompositeAlarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
|
+
/**
|
|
4
|
+
* Version-portable replacement for `CfnAlarm.isCfnAlarm`, which only exists in
|
|
5
|
+
* aws-cdk-lib >= 2.231.0 and throws `TypeError` on older versions inside our
|
|
6
|
+
* declared `^2.0.0` peer range (issue #146). Checks the foundational
|
|
7
|
+
* `CfnResource.isCfnResource` guard plus a `cfnResourceType` compare — exactly
|
|
8
|
+
* what the modern static does internally — so it works across the full range.
|
|
9
|
+
*/
|
|
10
|
+
export function isCfnAlarm(x) {
|
|
11
|
+
return CfnResource.isCfnResource(x) && x.cfnResourceType === CfnAlarm.CFN_RESOURCE_TYPE_NAME;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Version-portable replacement for `CfnCompositeAlarm.isCfnCompositeAlarm`.
|
|
15
|
+
* See {@link isCfnAlarm} for why this exists.
|
|
16
|
+
*/
|
|
17
|
+
export function isCfnCompositeAlarm(x) {
|
|
18
|
+
return (CfnResource.isCfnResource(x) && x.cfnResourceType === CfnCompositeAlarm.CFN_RESOURCE_TYPE_NAME);
|
|
19
|
+
}
|
|
1
20
|
export function matchesOne(matcher, ctx) {
|
|
2
21
|
if (typeof matcher === "function")
|
|
3
22
|
return matcher(ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy-matcher.js","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"policy-matcher.js","sourceRoot":"","sources":["../../../src/policies/policy-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAe,MAAM,4BAA4B,CAAC;AAGtF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAAa;IACtC,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,sBAAsB,CAAC;AAC/F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAa;IAC/C,OAAO,CACL,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,KAAK,iBAAiB,CAAC,sBAAsB,CAC/F,CAAC;AACJ,CAAC;AAgCD,MAAM,UAAU,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,MAAM,UAAU,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@composurecdk/cloudwatch",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Composable CloudWatch alarm primitives for composureCDK resource packages",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"constructs": "^10.0.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^25.
|
|
45
|
-
"aws-cdk-lib": "^2.
|
|
44
|
+
"@types/node": "^25.9.1",
|
|
45
|
+
"aws-cdk-lib": "^2.257.0",
|
|
46
46
|
"constructs": "^10.6.0",
|
|
47
47
|
"typescript": "^6.0.3",
|
|
48
|
-
"vitest": "^4.1.
|
|
48
|
+
"vitest": "^4.1.7"
|
|
49
49
|
},
|
|
50
50
|
"exports": {
|
|
51
51
|
"./package.json": "./package.json",
|