@liflig/cdk 3.22.19 → 3.23.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/assets/README.md +32 -0
- package/assets/slack-error-log-handler-lambda/.python-version +1 -0
- package/assets/slack-error-log-handler-lambda/__pycache__/index.cpython-314.pyc +0 -0
- package/assets/slack-error-log-handler-lambda/__pycache__/test_handler.cpython-314-pytest-9.0.2.pyc +0 -0
- package/assets/slack-error-log-handler-lambda/index.py +411 -0
- package/assets/slack-error-log-handler-lambda/pyproject.toml +13 -0
- package/assets/slack-error-log-handler-lambda/test_handler.py +229 -0
- package/assets/slack-error-log-handler-lambda/uv.lock +176 -0
- package/lib/alarms/database-alarms.d.ts +31 -18
- package/lib/alarms/database-alarms.js +39 -18
- package/lib/alarms/index.d.ts +2 -0
- package/lib/alarms/index.js +2 -1
- package/lib/alarms/lambda-alarms.d.ts +116 -14
- package/lib/alarms/lambda-alarms.js +158 -29
- package/lib/alarms/log-filter-patterns.d.ts +5 -0
- package/lib/alarms/log-filter-patterns.js +6 -0
- package/lib/alarms/queue-alarms.d.ts +88 -0
- package/lib/alarms/queue-alarms.js +109 -0
- package/lib/alarms/service-alarms.d.ts +75 -8
- package/lib/alarms/service-alarms.js +130 -38
- package/lib/alarms/slack-alarm.d.ts +6 -1
- package/lib/alarms/slack-alarm.js +23 -5
- package/lib/ecs/fargate-service.d.ts +111 -1
- package/lib/ecs/fargate-service.js +46 -2
- package/lib/load-balancer/load-balancer.js +2 -2
- package/lib/rds/database.d.ts +83 -0
- package/lib/rds/database.js +41 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as cloudwatchActions from "aws-cdk-lib/aws-cloudwatch-actions";
|
|
2
|
+
import * as lambda from "aws-cdk-lib/aws-lambda";
|
|
2
3
|
import type * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
|
|
3
4
|
import * as sns from "aws-cdk-lib/aws-sns";
|
|
4
5
|
import * as constructs from "constructs";
|
|
@@ -15,11 +16,15 @@ export interface SlackAlarmProps {
|
|
|
15
16
|
slackWebhookUrlSecret: secretsmanager.ISecret;
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Creates
|
|
20
|
+
* - SNS Topic that can be used to action alarms, with a Lambda
|
|
19
21
|
* that will send a message to Slack for the alarm.
|
|
22
|
+
* - A reusable Lambda that accepts CloudWatch Logs subscription events and posts
|
|
23
|
+
* formatted error messages to Slack.
|
|
20
24
|
*/
|
|
21
25
|
export declare class SlackAlarm extends constructs.Construct {
|
|
22
26
|
readonly alarmTopic: sns.Topic;
|
|
23
27
|
readonly snsAction: cloudwatchActions.SnsAction;
|
|
28
|
+
readonly logHandler: lambda.Function;
|
|
24
29
|
constructor(scope: constructs.Construct, id: string, props: SlackAlarmProps);
|
|
25
30
|
}
|
|
@@ -7,21 +7,25 @@ import { Effect, PolicyStatement } from "aws-cdk-lib/aws-iam";
|
|
|
7
7
|
import * as lambda from "aws-cdk-lib/aws-lambda";
|
|
8
8
|
import * as sns from "aws-cdk-lib/aws-sns";
|
|
9
9
|
import * as constructs from "constructs";
|
|
10
|
-
const
|
|
11
|
-
const
|
|
10
|
+
const __file = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dir = path.dirname(__file);
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Creates
|
|
14
|
+
* - SNS Topic that can be used to action alarms, with a Lambda
|
|
14
15
|
* that will send a message to Slack for the alarm.
|
|
16
|
+
* - A reusable Lambda that accepts CloudWatch Logs subscription events and posts
|
|
17
|
+
* formatted error messages to Slack.
|
|
15
18
|
*/
|
|
16
19
|
export class SlackAlarm extends constructs.Construct {
|
|
17
20
|
alarmTopic;
|
|
18
21
|
snsAction;
|
|
22
|
+
logHandler;
|
|
19
23
|
constructor(scope, id, props) {
|
|
20
24
|
super(scope, id);
|
|
21
25
|
this.alarmTopic = new sns.Topic(this, "Topic");
|
|
22
26
|
this.snsAction = new cloudwatchActions.SnsAction(this.alarmTopic);
|
|
23
27
|
const slackLambda = new lambda.Function(this, "Function", {
|
|
24
|
-
code: lambda.Code.fromAsset(path.join(
|
|
28
|
+
code: lambda.Code.fromAsset(path.join(__dir, "../../assets/slack-alarm-lambda")),
|
|
25
29
|
description: "Receives CloudWatch Alarms through SNS and sends a formatted version to Slack",
|
|
26
30
|
handler: "index.handler",
|
|
27
31
|
memorySize: 128,
|
|
@@ -33,6 +37,20 @@ export class SlackAlarm extends constructs.Construct {
|
|
|
33
37
|
ENVIRONMENT_NAME: props.envName,
|
|
34
38
|
},
|
|
35
39
|
});
|
|
40
|
+
this.logHandler = new lambda.Function(this, "LogHandler", {
|
|
41
|
+
code: lambda.Code.fromAsset(path.join(__dir, "../../assets", "slack-error-log-handler-lambda")),
|
|
42
|
+
description: "Receives CloudWatch Logs subscription events and sends formatted errors to Slack",
|
|
43
|
+
handler: "index.handler",
|
|
44
|
+
memorySize: 128,
|
|
45
|
+
runtime: lambda.Runtime.PYTHON_3_14,
|
|
46
|
+
timeout: Duration.seconds(10),
|
|
47
|
+
environment: {
|
|
48
|
+
SLACK_URL_SECRET_NAME: props.slackWebhookUrlSecret.secretName,
|
|
49
|
+
PROJECT_NAME: props.projectName,
|
|
50
|
+
ENVIRONMENT_NAME: props.envName,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
props.slackWebhookUrlSecret.grantRead(this.logHandler);
|
|
36
54
|
props.slackWebhookUrlSecret.grantRead(slackLambda);
|
|
37
55
|
slackLambda.addPermission("InvokePermission", {
|
|
38
56
|
action: "lambda:InvokeFunction",
|
|
@@ -51,4 +69,4 @@ export class SlackAlarm extends constructs.Construct {
|
|
|
51
69
|
});
|
|
52
70
|
}
|
|
53
71
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stYWxhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL3NsYWNrLWFsYXJtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sb0NBQW9DLENBQUE7QUFDdkUsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBZWxDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFDbEMsVUFBVSxDQUFXO0lBQ3JCLFNBQVMsQ0FBNkI7SUFDdEMsVUFBVSxDQUFpQjtJQUUzQyxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRWpFLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3hELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsaUNBQWlDLENBQUMsQ0FDcEQ7WUFDRCxXQUFXLEVBQ1QsK0VBQStFO1lBQ2pGLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNuQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsV0FBVyxFQUFFO2dCQUNYLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVO2dCQUM3RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQy9CLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUN4RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUNuRTtZQUNELFdBQVcsRUFDVCxrRkFBa0Y7WUFDcEYsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixXQUFXLEVBQUU7Z0JBQ1gscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFVBQVU7Z0JBQzdELFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDL0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU87YUFDaEM7U0FDRixDQUFDLENBQUE7UUFFRixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN0RCxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRWxELFdBQVcsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUU7WUFDNUMsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDeEQsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtTQUNwQyxDQUFDLENBQUE7UUFDRixXQUFXLENBQUMsZUFBZSxDQUN6QixJQUFJLGVBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztZQUN0QyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFBO1FBRUQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDekMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxHQUFHLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgY2xvdWR3YXRjaEFjdGlvbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB0eXBlICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgKiBhcyBzbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zbnNcIlxuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5cbmNvbnN0IF9fZmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXIgPSBwYXRoLmRpcm5hbWUoX19maWxlKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsYWNrQWxhcm1Qcm9wcyB7XG4gIHByb2plY3ROYW1lOiBzdHJpbmdcbiAgZW52TmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBBIHBsYWludGV4dCBzZWNyZXQgY29udGFpbmluZyB0aGUgVVJMIG9mIGEgU2xhY2sgaW5jb21pbmcgd2ViaG9vay5cbiAgICogVGhlIHdlYmhvb2sgc2hvdWxkIGJlIGNyZWF0ZWQgdGhyb3VnaCBhIFNsYWNrIGFwcCwgYW5kIG9ubHkgYWxsb3dzIHBvc3RpbmcgdG8gb25lIHNwZWNpZmljIFNsYWNrIGNoYW5uZWwuXG4gICAqIFNlZSBTbGFjaydzIG9mZmljaWFsIGRvY3VtZW50YXRpb24gKGUuZy4sIGh0dHBzOi8vYXBpLnNsYWNrLmNvbS9tZXNzYWdpbmcvd2ViaG9va3MpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIE5PVEU6IEluY29taW5nIHdlYmhvb2tzIGNyZWF0ZWQgdGhyb3VnaCBsZWdhY3kgY3VzdG9tIGludGVncmF0aW9ucyBpbiBTbGFjayBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICovXG4gIHNsYWNrV2ViaG9va1VybFNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldFxufVxuXG4vKipcbiAqIENyZWF0ZXNcbiAqIC0gU05TIFRvcGljIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWN0aW9uIGFsYXJtcywgd2l0aCBhIExhbWJkYVxuICogdGhhdCB3aWxsIHNlbmQgYSBtZXNzYWdlIHRvIFNsYWNrIGZvciB0aGUgYWxhcm0uXG4gKiAtIEEgcmV1c2FibGUgTGFtYmRhIHRoYXQgYWNjZXB0cyBDbG91ZFdhdGNoIExvZ3Mgc3Vic2NyaXB0aW9uIGV2ZW50cyBhbmQgcG9zdHNcbiAqIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlcyB0byBTbGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFNsYWNrQWxhcm0gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBhbGFybVRvcGljOiBzbnMuVG9waWNcbiAgcHVibGljIHJlYWRvbmx5IHNuc0FjdGlvbjogY2xvdWR3YXRjaEFjdGlvbnMuU25zQWN0aW9uXG4gIHB1YmxpYyByZWFkb25seSBsb2dIYW5kbGVyOiBsYW1iZGEuRnVuY3Rpb25cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTbGFja0FsYXJtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmFsYXJtVG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsIFwiVG9waWNcIilcblxuICAgIHRoaXMuc25zQWN0aW9uID0gbmV3IGNsb3Vkd2F0Y2hBY3Rpb25zLlNuc0FjdGlvbih0aGlzLmFsYXJtVG9waWMpXG5cbiAgICBjb25zdCBzbGFja0xhbWJkYSA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJGdW5jdGlvblwiLCB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2RpciwgXCIuLi8uLi9hc3NldHMvc2xhY2stYWxhcm0tbGFtYmRhXCIpLFxuICAgICAgKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJlY2VpdmVzIENsb3VkV2F0Y2ggQWxhcm1zIHRocm91Z2ggU05TIGFuZCBzZW5kcyBhIGZvcm1hdHRlZCB2ZXJzaW9uIHRvIFNsYWNrXCIsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEzLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg2KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1VSTF9TRUNSRVRfTkFNRTogcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICAgIFBST0pFQ1RfTkFNRTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICAgIEVOVklST05NRU5UX05BTUU6IHByb3BzLmVudk5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ0hhbmRsZXIgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwiTG9nSGFuZGxlclwiLCB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2RpciwgXCIuLi8uLi9hc3NldHNcIiwgXCJzbGFjay1lcnJvci1sb2ctaGFuZGxlci1sYW1iZGFcIiksXG4gICAgICApLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUmVjZWl2ZXMgQ2xvdWRXYXRjaCBMb2dzIHN1YnNjcmlwdGlvbiBldmVudHMgYW5kIHNlbmRzIGZvcm1hdHRlZCBlcnJvcnMgdG8gU2xhY2tcIixcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1VSTF9TRUNSRVRfTkFNRTogcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICAgIFBST0pFQ1RfTkFNRTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICAgIEVOVklST05NRU5UX05BTUU6IHByb3BzLmVudk5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBwcm9wcy5zbGFja1dlYmhvb2tVcmxTZWNyZXQuZ3JhbnRSZWFkKHRoaXMubG9nSGFuZGxlcilcbiAgICBwcm9wcy5zbGFja1dlYmhvb2tVcmxTZWNyZXQuZ3JhbnRSZWFkKHNsYWNrTGFtYmRhKVxuXG4gICAgc2xhY2tMYW1iZGEuYWRkUGVybWlzc2lvbihcIkludm9rZVBlcm1pc3Npb25cIiwge1xuICAgICAgYWN0aW9uOiBcImxhbWJkYTpJbnZva2VGdW5jdGlvblwiLFxuICAgICAgcHJpbmNpcGFsOiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJzbnMuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIHNvdXJjZUFybjogdGhpcy5hbGFybVRvcGljLnRvcGljQXJuLFxuICAgIH0pXG4gICAgc2xhY2tMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNsb3Vkd2F0Y2g6RGVzY3JpYmVBbGFybXNcIl0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBuZXcgc25zLlN1YnNjcmlwdGlvbih0aGlzLCBcIlN1YnNjcmlwdGlvblwiLCB7XG4gICAgICBlbmRwb2ludDogc2xhY2tMYW1iZGEuZnVuY3Rpb25Bcm4sXG4gICAgICBwcm90b2NvbDogc25zLlN1YnNjcmlwdGlvblByb3RvY29sLkxBTUJEQSxcbiAgICAgIHRvcGljOiB0aGlzLmFsYXJtVG9waWMsXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -1,10 +1,107 @@
|
|
|
1
1
|
import * as cdk from "aws-cdk-lib";
|
|
2
|
+
import type * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
|
|
2
3
|
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
3
4
|
import * as ecs from "aws-cdk-lib/aws-ecs";
|
|
4
5
|
import * as elb from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
|
6
|
+
import type * as lambda from "aws-cdk-lib/aws-lambda";
|
|
5
7
|
import * as logs from "aws-cdk-lib/aws-logs";
|
|
6
8
|
import * as constructs from "constructs";
|
|
7
|
-
import
|
|
9
|
+
import { ServiceAlarms } from "../alarms";
|
|
10
|
+
import type { Parameter } from "../configure-parameters";
|
|
11
|
+
/**
|
|
12
|
+
* Configure service alarms.
|
|
13
|
+
*
|
|
14
|
+
* Alarms are enabled by default when a config object with `alarmAction` and
|
|
15
|
+
* `warningAction` is provided. To explicitly disable automatic alarms use
|
|
16
|
+
* `{ enabled: false }`.
|
|
17
|
+
*/
|
|
18
|
+
export type ServiceAlarmsConfig = {
|
|
19
|
+
enabled: false;
|
|
20
|
+
} | {
|
|
21
|
+
alarmAction: cloudwatch.IAlarmAction;
|
|
22
|
+
warningAction: cloudwatch.IAlarmAction;
|
|
23
|
+
loadBalancerFullName: string;
|
|
24
|
+
/** Optional Lambda function that will receive
|
|
25
|
+
* forwarded log events */
|
|
26
|
+
logHandler?: lambda.IFunction;
|
|
27
|
+
/**
|
|
28
|
+
* Individual alarm configuration overrides defaults.
|
|
29
|
+
*/
|
|
30
|
+
jsonErrorAlarm?: {
|
|
31
|
+
/**
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
34
|
+
enabled?: boolean;
|
|
35
|
+
alarmDescription?: string;
|
|
36
|
+
enableOkAlarm?: boolean;
|
|
37
|
+
action?: cloudwatch.IAlarmAction;
|
|
38
|
+
};
|
|
39
|
+
uncaughtJavaExceptionAlarm?: {
|
|
40
|
+
/**
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
enabled?: boolean;
|
|
44
|
+
alarmDescription?: string;
|
|
45
|
+
enableOkAlarm?: boolean;
|
|
46
|
+
action?: cloudwatch.IAlarmAction;
|
|
47
|
+
};
|
|
48
|
+
targetHealthAlarm?: {
|
|
49
|
+
/**
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
enabled?: boolean;
|
|
53
|
+
action?: cloudwatch.IAlarmAction;
|
|
54
|
+
period?: cdk.Duration;
|
|
55
|
+
evaluationPeriods?: number;
|
|
56
|
+
threshold?: number;
|
|
57
|
+
description?: string;
|
|
58
|
+
};
|
|
59
|
+
tooMany5xxResponsesFromTargetsAlarm?: {
|
|
60
|
+
/**
|
|
61
|
+
* @default true
|
|
62
|
+
*/
|
|
63
|
+
enabled?: boolean;
|
|
64
|
+
action?: cloudwatch.IAlarmAction;
|
|
65
|
+
period?: cdk.Duration;
|
|
66
|
+
evaluationPeriods?: number;
|
|
67
|
+
threshold?: number;
|
|
68
|
+
description?: string;
|
|
69
|
+
};
|
|
70
|
+
targetResponseTimeAlarm?: {
|
|
71
|
+
/**
|
|
72
|
+
* @default true
|
|
73
|
+
*/
|
|
74
|
+
enabled?: boolean;
|
|
75
|
+
action?: cloudwatch.IAlarmAction;
|
|
76
|
+
period?: cdk.Duration;
|
|
77
|
+
evaluationPeriods?: number;
|
|
78
|
+
threshold?: cdk.Duration;
|
|
79
|
+
description?: string;
|
|
80
|
+
};
|
|
81
|
+
single5xxResponseAlarm?: {
|
|
82
|
+
/**
|
|
83
|
+
* @default true
|
|
84
|
+
*/
|
|
85
|
+
enabled?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
88
|
+
*/
|
|
89
|
+
action?: cloudwatch.IAlarmAction;
|
|
90
|
+
/**
|
|
91
|
+
* @default 60 seconds
|
|
92
|
+
*/
|
|
93
|
+
period?: cdk.Duration;
|
|
94
|
+
/**
|
|
95
|
+
* @default 1
|
|
96
|
+
*/
|
|
97
|
+
evaluationPeriods?: number;
|
|
98
|
+
/**
|
|
99
|
+
* @default 1
|
|
100
|
+
*/
|
|
101
|
+
threshold?: number;
|
|
102
|
+
description?: string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
8
105
|
export interface FargateServiceProps {
|
|
9
106
|
serviceName: string;
|
|
10
107
|
vpc: ec2.IVpc;
|
|
@@ -66,6 +163,18 @@ export interface FargateServiceProps {
|
|
|
66
163
|
* @default false
|
|
67
164
|
*/
|
|
68
165
|
enableCircuitBreaker?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Either
|
|
168
|
+
* - `{ enabled: false }` to disable all alarms.
|
|
169
|
+
* - object with required `alarmAction`, `warningAction`, and `loadBalancerFullName`.
|
|
170
|
+
*
|
|
171
|
+
* When enabled, the construct will:
|
|
172
|
+
* - (By default) add a log-based JSON error alarm (enabled by default).
|
|
173
|
+
* - (By default) add target-group related alarms (target health, 5xx responses, response time)
|
|
174
|
+
* when a target group is present.
|
|
175
|
+
* - (Opt-in) optionally enable the uncaught Java exception alarm
|
|
176
|
+
*/
|
|
177
|
+
alarms: ServiceAlarmsConfig;
|
|
69
178
|
}
|
|
70
179
|
export declare class FargateService extends constructs.Construct {
|
|
71
180
|
readonly fargateService: ecs.FargateService;
|
|
@@ -73,5 +182,6 @@ export declare class FargateService extends constructs.Construct {
|
|
|
73
182
|
readonly taskDefinition: ecs.TaskDefinition;
|
|
74
183
|
readonly targetGroup: elb.ApplicationTargetGroup | undefined;
|
|
75
184
|
readonly logGroup: logs.LogGroup;
|
|
185
|
+
readonly serviceAlarms: ServiceAlarms | undefined;
|
|
76
186
|
constructor(scope: constructs.Construct, id: string, props: FargateServiceProps);
|
|
77
187
|
}
|
|
@@ -5,6 +5,7 @@ import * as ecs from "aws-cdk-lib/aws-ecs";
|
|
|
5
5
|
import * as elb from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
|
6
6
|
import * as logs from "aws-cdk-lib/aws-logs";
|
|
7
7
|
import * as constructs from "constructs";
|
|
8
|
+
import { ServiceAlarms } from "../alarms";
|
|
8
9
|
import { ConfigureParameters } from "../configure-parameters";
|
|
9
10
|
export class FargateService extends constructs.Construct {
|
|
10
11
|
fargateService;
|
|
@@ -12,6 +13,7 @@ export class FargateService extends constructs.Construct {
|
|
|
12
13
|
taskDefinition;
|
|
13
14
|
targetGroup;
|
|
14
15
|
logGroup;
|
|
16
|
+
serviceAlarms;
|
|
15
17
|
constructor(scope, id, props) {
|
|
16
18
|
super(scope, id);
|
|
17
19
|
/**
|
|
@@ -37,7 +39,7 @@ export class FargateService extends constructs.Construct {
|
|
|
37
39
|
});
|
|
38
40
|
parameters.grantRead(this.taskDefinition.taskRole);
|
|
39
41
|
const port = props.containerPort ?? 8080;
|
|
40
|
-
|
|
42
|
+
this.taskDefinition.addContainer("Container", {
|
|
41
43
|
logging: ecs.LogDriver.awsLogs({
|
|
42
44
|
logGroup: this.logGroup,
|
|
43
45
|
streamPrefix: "ecs",
|
|
@@ -111,6 +113,48 @@ export class FargateService extends constructs.Construct {
|
|
|
111
113
|
...props.overrideHealthCheck,
|
|
112
114
|
});
|
|
113
115
|
}
|
|
116
|
+
// Require explicit alarmAction and warningAction when enabled.
|
|
117
|
+
if (props.alarms && "alarmAction" in props.alarms) {
|
|
118
|
+
const alarms = props.alarms;
|
|
119
|
+
this.serviceAlarms = new ServiceAlarms(this, "Alarms", {
|
|
120
|
+
serviceName: props.serviceName,
|
|
121
|
+
alarmAction: alarms.alarmAction,
|
|
122
|
+
warningAction: alarms.warningAction,
|
|
123
|
+
logHandler: alarms.logHandler,
|
|
124
|
+
});
|
|
125
|
+
// Enabled by default (opt-out).
|
|
126
|
+
const jsonErrorOverrides = alarms.jsonErrorAlarm;
|
|
127
|
+
if (jsonErrorOverrides?.enabled ?? true) {
|
|
128
|
+
this.serviceAlarms.addJsonErrorAlarm({
|
|
129
|
+
logGroup: this.logGroup,
|
|
130
|
+
alarmDescription: jsonErrorOverrides?.alarmDescription,
|
|
131
|
+
enableOkAlarm: jsonErrorOverrides?.enableOkAlarm,
|
|
132
|
+
action: jsonErrorOverrides?.action,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// Not enabled by default (opt-in).
|
|
136
|
+
const javaExceptionOverrides = alarms.uncaughtJavaExceptionAlarm;
|
|
137
|
+
if (javaExceptionOverrides?.enabled) {
|
|
138
|
+
this.serviceAlarms.addUncaughtJavaExceptionAlarm({
|
|
139
|
+
logGroup: this.logGroup,
|
|
140
|
+
alarmDescription: javaExceptionOverrides.alarmDescription,
|
|
141
|
+
enableOkAlarm: javaExceptionOverrides.enableOkAlarm,
|
|
142
|
+
action: javaExceptionOverrides.action,
|
|
143
|
+
enabled: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
if (!props.skipTargetGroup) {
|
|
147
|
+
// All alarms enabled by-default (opt-out individually)
|
|
148
|
+
this.serviceAlarms.addTargetGroupAlarms({
|
|
149
|
+
targetGroupFullName: this.targetGroup.targetGroupFullName,
|
|
150
|
+
loadBalancerFullName: alarms.loadBalancerFullName,
|
|
151
|
+
targetHealthAlarm: alarms.targetHealthAlarm,
|
|
152
|
+
single5xxResponseAlarm: alarms.single5xxResponseAlarm,
|
|
153
|
+
tooMany5xxResponsesFromTargetsAlarm: alarms.tooMany5xxResponsesFromTargetsAlarm,
|
|
154
|
+
targetResponseTimeAlarm: alarms.targetResponseTimeAlarm,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
114
158
|
}
|
|
115
159
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy9mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBRTFDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFDMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSx3Q0FBd0MsQ0FBQTtBQUM3RCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBa0U3RCxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQ3RDLGNBQWMsQ0FBb0I7SUFDbEMsYUFBYSxDQUFtQjtJQUNoQyxjQUFjLENBQW9CO0lBQ2xDLFdBQVcsQ0FBd0M7SUFDbkQsUUFBUSxDQUFlO0lBRXZDLFlBQ0UsS0FBMkIsRUFDM0IsRUFBVSxFQUNWLEtBQTBCO1FBRTFCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEI7Ozs7V0FJRztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUNsQix1RUFBdUUsRUFDdkUsSUFBSSxDQUNMLENBQUE7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRTtZQUMvQyxTQUFTLEVBQUUsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsSUFDWixhQUFhO1lBQ2IsVUFBVSxFQUFFLEtBQUssQ0FBQyxV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QkFDcEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsU0FBUztnQkFDZixxQkFBcUIsRUFBRSxDQUFDO2dCQUN4QixHQUFHLEtBQUssQ0FBQyxtQkFBbUI7YUFDN0IsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCJcbmltcG9ydCB0eXBlIHsgQ2ZuU2VydmljZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCJcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiXG5pbXBvcnQgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCJcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgQ29uZmlndXJlUGFyYW1ldGVycyB9IGZyb20gXCIuLi9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5pbXBvcnQgdHlwZSB7IFBhcmFtZXRlciB9IGZyb20gXCIuLi9jb25maWd1cmUtcGFyYW1ldGVycy9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmdcbiAgdnBjOiBlYzIuSVZwY1xuICBjbHVzdGVyOiBlY3MuSUNsdXN0ZXJcbiAgZGVzaXJlZENvdW50OiBudW1iZXJcbiAgZWNzSW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZVxuICBwb3J0TWFwcGluZ3M/OiBlY3MuUG9ydE1hcHBpbmdbXVxuICBjb250YWluZXJIZWFsdGhDaGVjaz86IGVjcy5IZWFsdGhDaGVja1xuICAvKipcbiAgICogQGRlZmF1bHQgMjU2XG4gICAqL1xuICBjcHU/OiBudW1iZXJcbiAgLyoqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcnVudGltZVBsYXRmb3JtPzogZWNzLlJ1bnRpbWVQbGF0Zm9ybVxuICAvKipcbiAgICogQGRlZmF1bHQgNTEyXG4gICAqL1xuICBtZW1vcnlMaW1pdE1pQj86IG51bWJlclxuICAvKipcbiAgICogQGRlZmF1bHQgMiB3ZWVrc1xuICAgKi9cbiAgbG9nc1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5c1xuICAvKipcbiAgICogQGRlZmF1bHQgQXdzTG9nRHJpdmVyTW9kZS5CTE9DS0lOR1xuICAgKi9cbiAgbG9nRHJpdmVyTW9kZT86IGVjcy5Bd3NMb2dEcml2ZXJNb2RlXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAxNSBzZWNvbmRzXG4gICAqL1xuICBkZXJlZ2lzdHJhdGlvbkRlbGF5PzogY2RrLkR1cmF0aW9uXG4gIC8qKlxuICAgKiBAZGVmYXVsdCA4MDgwXG4gICAqL1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyXG4gIC8qKlxuICAgKiBAZGVmYXVsdCA2MCBzZWNvbmRzXG4gICAqL1xuICBoZWFsdGhDaGVja0dyYWNlUGVyaW9kPzogY2RrLkR1cmF0aW9uXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBhcyB3b3JrYXJvdW5kIHdoZW4gYWRkaW5nIHRoZSBzZXJ2aWNlIHRvIGEgbG9hZCBiYWxhbmNlciBhZnRlclxuICAgKiBpdCBoYXMgYmVlbiBjcmVhdGVkLiBGb3IgYXZvaWRpbmcgJ0hlYWx0aCBjaGVjayBncmFjZSBwZXJpb2QgaXMgb25seSB2YWxpZCBmb3Igc2VydmljZXMgY29uZmlndXJlZCB0byB1c2UgbG9hZCBiYWxhbmNlcnMnXG4gICAqIExpbmsgdG8gR2l0SHViIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE5ODQyXG4gICAqL1xuICBza2lwSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZD86IGJvb2xlYW5cbiAgcGFyYW1ldGVycz86IFBhcmFtZXRlcltdXG4gIG92ZXJyaWRlRmFyZ2F0ZVNlcnZpY2VQcm9wcz86IFBhcnRpYWw8ZWNzLkZhcmdhdGVTZXJ2aWNlUHJvcHM+XG4gIG92ZXJyaWRlSGVhbHRoQ2hlY2s/OiBQYXJ0aWFsPGVsYi5IZWFsdGhDaGVjaz5cbiAgb3ZlcnJpZGVUYXJnZXRHcm91cFByb3BzPzogUGFydGlhbDxlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzPlxuICBvdmVycmlkZUNvbnRhaW5lclByb3BzPzogUGFydGlhbDxlY3MuQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnM+XG4gIHNlY3JldHM/OiBSZWNvcmQ8c3RyaW5nLCBlY3MuU2VjcmV0PlxuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwVGFyZ2V0R3JvdXA/OiBib29sZWFuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ2lyY3VpdEJyZWFrZXI/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBGYXJnYXRlU2VydmljZSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGZhcmdhdGVTZXJ2aWNlOiBlY3MuRmFyZ2F0ZVNlcnZpY2VcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IGVjMi5TZWN1cml0eUdyb3VwXG4gIHB1YmxpYyByZWFkb25seSB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRHcm91cDogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgfCB1bmRlZmluZWRcbiAgcHVibGljIHJlYWRvbmx5IGxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEZhcmdhdGVTZXJ2aWNlUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIC8qKlxuICAgICAqIFNldCB0aGlzIGZsYWcgdG8gZGlzYWJsZSB0aGlzIHN0YWNrIGNyZWF0aW5nIGEgY29tcGxldGVseSBuZXcgc2VydmljZSBhbmQgYXR0ZW1wdGluZyByZXBsYWNlIHdoZW4gZW5hYmxpbmcgY2lyY3VpdCBicmVha2Vyc1xuICAgICAqIE1pdGlnYXRpbmcgdGhlIGRlcGxveW1lbnQgZXJyb3I6ICdhIHNlcnZpY2Ugd2l0aCB0aGUgbmFtZSA8Li4uPiBhbHJlYWR5IGV4aXN0cydcbiAgICAgKiBTZWU6IGdpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8yMjQ2N1xuICAgICAqL1xuICAgIHRoaXMubm9kZS5zZXRDb250ZXh0KFxuICAgICAgXCJAYXdzLWNkay9hd3MtZWNzOmRpc2FibGVFeHBsaWNpdERlcGxveW1lbnRDb250cm9sbGVyRm9yQ2lyY3VpdEJyZWFrZXJcIixcbiAgICAgIHRydWUsXG4gICAgKVxuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBDb25maWd1cmVQYXJhbWV0ZXJzKHRoaXMsIHtcbiAgICAgIHNzbVByZWZpeDogYC9saWZsaWctY2RrLyR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0vJHtcbiAgICAgICAgdGhpcy5ub2RlLmFkZHJcbiAgICAgIH0vcGFyYW1ldGVyc2AsXG4gICAgICBwYXJhbWV0ZXJzOiBwcm9wcy5wYXJhbWV0ZXJzID8/IFtdLFxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJMb2dHcm91cFwiLCB7XG4gICAgICByZXRlbnRpb246IHByb3BzLmxvZ3NSZXRlbnRpb24gPz8gbG9ncy5SZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICB9KVxuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KVxuXG4gICAgdGhpcy50YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVGFza0RlZmluaXRpb25cIixcbiAgICAgIHtcbiAgICAgICAgY3B1OiBwcm9wcy5jcHUgPz8gMjU2LFxuICAgICAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIgPz8gNTEyLFxuICAgICAgICBydW50aW1lUGxhdGZvcm06IHByb3BzLnJ1bnRpbWVQbGF0Zm9ybSxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgcGFyYW1ldGVycy5ncmFudFJlYWQodGhpcy50YXNrRGVmaW5pdGlvbi50YXNrUm9sZSlcblxuICAgIGNvbnN0IHBvcnQgPSBwcm9wcy5jb250YWluZXJQb3J0ID8/IDgwODBcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihcIkNvbnRhaW5lclwiLCB7XG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVyLmF3c0xvZ3Moe1xuICAgICAgICBsb2dHcm91cDogdGhpcy5sb2dHcm91cCxcbiAgICAgICAgc3RyZWFtUHJlZml4OiBcImVjc1wiLFxuICAgICAgICBkYXRldGltZUZvcm1hdDogXCIlWS0lbS0lZFQlSDolTTolU1wiLFxuICAgICAgICBtb2RlOiBwcm9wcy5sb2dEcml2ZXJNb2RlID8/IGVjcy5Bd3NMb2dEcml2ZXJNb2RlLkJMT0NLSU5HLFxuICAgICAgfSksXG4gICAgICBpbWFnZTogcHJvcHMuZWNzSW1hZ2UsXG4gICAgICBzZWNyZXRzOiBwcm9wcy5zZWNyZXRzLFxuICAgICAgaGVhbHRoQ2hlY2s6IHByb3BzLmNvbnRhaW5lckhlYWx0aENoZWNrLFxuICAgICAgcG9ydE1hcHBpbmdzOiBwcm9wcy5wb3J0TWFwcGluZ3MgPz8gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbmVyUG9ydDogcG9ydCxcbiAgICAgICAgICBob3N0UG9ydDogcG9ydCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTU01fUFJFRklYOiBwYXJhbWV0ZXJzLnNzbVByZWZpeCxcbiAgICAgICAgLy8gTm90IHJlYWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBvbmx5IHVzZWQgdG8gaGVscCB3aXRoIHJlZGVwbG95bWVudHMuXG4gICAgICAgIFBBUkFNU19IQVNIOiBwYXJhbWV0ZXJzLmhhc2hWYWx1ZSxcbiAgICAgICAgLi4uKHByb3BzLmVudmlyb25tZW50ID8/IHt9KSxcbiAgICAgIH0sXG4gICAgICBsaW51eFBhcmFtZXRlcnM6IG5ldyBlY3MuTGludXhQYXJhbWV0ZXJzKHRoaXMsIFwiTGludXhQYXJhbWV0ZXJzXCIsIHtcbiAgICAgICAgaW5pdFByb2Nlc3NFbmFibGVkOiB0cnVlLFxuICAgICAgfSksXG4gICAgICAuLi5wcm9wcy5vdmVycmlkZUNvbnRhaW5lclByb3BzLFxuICAgIH0pXG5cbiAgICBjb25zdCBlbmFibGVDaXJjdWl0QnJlYWtlciA9IHByb3BzLmVuYWJsZUNpcmN1aXRCcmVha2VyID8/IGZhbHNlXG5cbiAgICB0aGlzLmZhcmdhdGVTZXJ2aWNlID0gbmV3IGVjcy5GYXJnYXRlU2VydmljZSh0aGlzLCBcIlNlcnZpY2VcIiwge1xuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9LFxuICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICBjbHVzdGVyOiBwcm9wcy5jbHVzdGVyLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgIGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IHByb3BzLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QsXG4gICAgICBkZXNpcmVkQ291bnQ6IHByb3BzLmRlc2lyZWRDb3VudCxcbiAgICAgIGFzc2lnblB1YmxpY0lwOiB0cnVlLFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLnNlY3VyaXR5R3JvdXBdLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uOiBlY3MuRmFyZ2F0ZVBsYXRmb3JtVmVyc2lvbi5WRVJTSU9OMV80LFxuICAgICAgZW5hYmxlRXhlY3V0ZUNvbW1hbmQ6IHRydWUsXG4gICAgICBjaXJjdWl0QnJlYWtlcjogZW5hYmxlQ2lyY3VpdEJyZWFrZXJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBlbmFibGU6IHRydWUsXG4gICAgICAgICAgICByb2xsYmFjazogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgLi4ucHJvcHMub3ZlcnJpZGVGYXJnYXRlU2VydmljZVByb3BzLFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMuc2tpcEhlYWx0aENoZWNrR3JhY2VQZXJpb2QpIHtcbiAgICAgIDsoXG4gICAgICAgIHRoaXMuZmFyZ2F0ZVNlcnZpY2Uubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuU2VydmljZVxuICAgICAgKS5oZWFsdGhDaGVja0dyYWNlUGVyaW9kU2Vjb25kcyA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1ldGVycy5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLmZhcmdhdGVTZXJ2aWNlLm5vZGUuYWRkRGVwZW5kZW5jeShwYXJhbSlcbiAgICB9XG5cbiAgICBpZiAoIXByb3BzLnNraXBUYXJnZXRHcm91cCkge1xuICAgICAgdGhpcy50YXJnZXRHcm91cCA9IG5ldyBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCBcIlRhcmdldEdyb3VwXCIsIHtcbiAgICAgICAgcHJvdG9jb2w6IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgIHBvcnQ6IHBvcnQsXG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICB0YXJnZXRUeXBlOiBlbGIuVGFyZ2V0VHlwZS5JUCxcbiAgICAgICAgdGFyZ2V0czogW3RoaXMuZmFyZ2F0ZVNlcnZpY2VdLFxuICAgICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OlxuICAgICAgICAgIHByb3BzLmRlcmVnaXN0cmF0aW9uRGVsYXkgPz8gY2RrLkR1cmF0aW9uLnNlY29uZHMoMTUpLFxuICAgICAgICAuLi5wcm9wcy5vdmVycmlkZVRhcmdldEdyb3VwUHJvcHMsXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnRhcmdldEdyb3VwLmNvbmZpZ3VyZUhlYWx0aENoZWNrKHtcbiAgICAgICAgaW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgICBwYXRoOiBcIi9oZWFsdGhcIixcbiAgICAgICAgaGVhbHRoeVRocmVzaG9sZENvdW50OiAyLFxuICAgICAgICAuLi5wcm9wcy5vdmVycmlkZUhlYWx0aENoZWNrLFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFyZ2F0ZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy9mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUV0QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBRTFDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFDMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSx3Q0FBd0MsQ0FBQTtBQUU3RCxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFBO0FBQzVDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFFekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUE0SzdELE1BQU0sT0FBTyxjQUFlLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFDdEMsY0FBYyxDQUFvQjtJQUNsQyxhQUFhLENBQW1CO0lBQ2hDLGNBQWMsQ0FBb0I7SUFDbEMsV0FBVyxDQUF3QztJQUNuRCxRQUFRLENBQWU7SUFDdkIsYUFBYSxDQUEyQjtJQUV4RCxZQUNFLEtBQTJCLEVBQzNCLEVBQVUsRUFDVixLQUEwQjtRQUUxQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCOzs7O1dBSUc7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsdUVBQXVFLEVBQ3ZFLElBQUksQ0FDTCxDQUFBO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7WUFDL0MsU0FBUyxFQUFFLGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUNw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T0FBTyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQUM7b0JBQy9DLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUMsZ0JBQWdCO29CQUN6RCxhQUFhLEVBQUUsc0JBQXNCLENBQUMsYUFBYTtvQkFDbkQsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU07b0JBQ3JDLE9BQU8sRUFBRSxJQUFJO2lCQUNkLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMzQix1REFBdUQ7Z0JBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUM7b0JBQ3RDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxXQUFZLENBQUMsbUJBQW1CO29CQUMxRCxvQkFBb0IsRUFBRSxNQUFNLENBQUMsb0JBQW9CO29CQUNqRCxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO29CQUMzQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsc0JBQXNCO29CQUNyRCxtQ0FBbUMsRUFDakMsTUFBTSxDQUFDLG1DQUFtQztvQkFDNUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLHVCQUF1QjtpQkFDeEQsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCB0eXBlICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIlxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCJcbmltcG9ydCB0eXBlIHsgQ2ZuU2VydmljZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCJcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiXG5pbXBvcnQgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCJcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHsgU2VydmljZUFsYXJtcyB9IGZyb20gXCIuLi9hbGFybXNcIlxuaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vY29uZmlndXJlLXBhcmFtZXRlcnNcIlxuaW1wb3J0IHsgQ29uZmlndXJlUGFyYW1ldGVycyB9IGZyb20gXCIuLi9jb25maWd1cmUtcGFyYW1ldGVyc1wiXG5cbi8qKlxuICogQ29uZmlndXJlIHNlcnZpY2UgYWxhcm1zLlxuICpcbiAqIEFsYXJtcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYSBjb25maWcgb2JqZWN0IHdpdGggYGFsYXJtQWN0aW9uYCBhbmRcbiAqIGB3YXJuaW5nQWN0aW9uYCBpcyBwcm92aWRlZC4gVG8gZXhwbGljaXRseSBkaXNhYmxlIGF1dG9tYXRpYyBhbGFybXMgdXNlXG4gKiBgeyBlbmFibGVkOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgU2VydmljZUFsYXJtc0NvbmZpZyA9XG4gIHwgeyBlbmFibGVkOiBmYWxzZSB9XG4gIHwge1xuICAgICAgYWxhcm1BY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICB3YXJuaW5nQWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgbG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZ1xuICAgICAgLyoqIE9wdGlvbmFsIExhbWJkYSBmdW5jdGlvbiB0aGF0IHdpbGwgcmVjZWl2ZVxuICAgICAgICogZm9yd2FyZGVkIGxvZyBldmVudHMgKi9cbiAgICAgIGxvZ0hhbmRsZXI/OiBsYW1iZGEuSUZ1bmN0aW9uXG4gICAgICAvKipcbiAgICAgICAqIEluZGl2aWR1YWwgYWxhcm0gY29uZmlndXJhdGlvbiBvdmVycmlkZXMgZGVmYXVsdHMuXG4gICAgICAgKi9cbiAgICAgIGpzb25FcnJvckFsYXJtPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgICAgICBlbmFibGVPa0FsYXJtPzogYm9vbGVhblxuICAgICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgfVxuICAgICAgdW5jYXVnaHRKYXZhRXhjZXB0aW9uQWxhcm0/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgICAgICBlbmFibGVPa0FsYXJtPzogYm9vbGVhblxuICAgICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgfVxuICAgICAgdGFyZ2V0SGVhbHRoQWxhcm0/OiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgICAqL1xuICAgICAgICBlbmFibGVkPzogYm9vbGVhblxuICAgICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgICBwZXJpb2Q/OiBjZGsuRHVyYXRpb25cbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM/OiBudW1iZXJcbiAgICAgICAgdGhyZXNob2xkPzogbnVtYmVyXG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgICB9XG4gICAgICB0b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybT86IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAgIHBlcmlvZD86IGNkay5EdXJhdGlvblxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kcz86IG51bWJlclxuICAgICAgICB0aHJlc2hvbGQ/OiBudW1iZXJcbiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIHRhcmdldFJlc3BvbnNlVGltZUFsYXJtPzoge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICAgKi9cbiAgICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgICAgcGVyaW9kPzogY2RrLkR1cmF0aW9uXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAgIHRocmVzaG9sZD86IGNkay5EdXJhdGlvblxuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgICAgfVxuICAgICAgc2luZ2xlNXh4UmVzcG9uc2VBbGFybT86IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVmYXVsdCA2MCBzZWNvbmRzXG4gICAgICAgICAqL1xuICAgICAgICBwZXJpb2Q/OiBjZGsuRHVyYXRpb25cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAgICovXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgICAqL1xuICAgICAgICB0aHJlc2hvbGQ/OiBudW1iZXJcbiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgICAgIH1cbiAgICB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVNlcnZpY2VQcm9wcyB7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmdcbiAgdnBjOiBlYzIuSVZwY1xuICBjbHVzdGVyOiBlY3MuSUNsdXN0ZXJcbiAgZGVzaXJlZENvdW50OiBudW1iZXJcbiAgZWNzSW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZVxuICBwb3J0TWFwcGluZ3M/OiBlY3MuUG9ydE1hcHBpbmdbXVxuICBjb250YWluZXJIZWFsdGhDaGVjaz86IGVjcy5IZWFsdGhDaGVja1xuICAvKipcbiAgICogQGRlZmF1bHQgMjU2XG4gICAqL1xuICBjcHU/OiBudW1iZXJcbiAgLyoqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcnVudGltZVBsYXRmb3JtPzogZWNzLlJ1bnRpbWVQbGF0Zm9ybVxuICAvKipcbiAgICogQGRlZmF1bHQgNTEyXG4gICAqL1xuICBtZW1vcnlMaW1pdE1pQj86IG51bWJlclxuICAvKipcbiAgICogQGRlZmF1bHQgMiB3ZWVrc1xuICAgKi9cbiAgbG9nc1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5c1xuICAvKipcbiAgICogQGRlZmF1bHQgQXdzTG9nRHJpdmVyTW9kZS5CTE9DS0lOR1xuICAgKi9cbiAgbG9nRHJpdmVyTW9kZT86IGVjcy5Bd3NMb2dEcml2ZXJNb2RlXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAxNSBzZWNvbmRzXG4gICAqL1xuICBkZXJlZ2lzdHJhdGlvbkRlbGF5PzogY2RrLkR1cmF0aW9uXG4gIC8qKlxuICAgKiBAZGVmYXVsdCA4MDgwXG4gICAqL1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyXG4gIC8qKlxuICAgKiBAZGVmYXVsdCA2MCBzZWNvbmRzXG4gICAqL1xuICBoZWFsdGhDaGVja0dyYWNlUGVyaW9kPzogY2RrLkR1cmF0aW9uXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBhcyB3b3JrYXJvdW5kIHdoZW4gYWRkaW5nIHRoZSBzZXJ2aWNlIHRvIGEgbG9hZCBiYWxhbmNlciBhZnRlclxuICAgKiBpdCBoYXMgYmVlbiBjcmVhdGVkLiBGb3IgYXZvaWRpbmcgJ0hlYWx0aCBjaGVjayBncmFjZSBwZXJpb2QgaXMgb25seSB2YWxpZCBmb3Igc2VydmljZXMgY29uZmlndXJlZCB0byB1c2UgbG9hZCBiYWxhbmNlcnMnXG4gICAqIExpbmsgdG8gR2l0SHViIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE5ODQyXG4gICAqL1xuICBza2lwSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZD86IGJvb2xlYW5cbiAgcGFyYW1ldGVycz86IFBhcmFtZXRlcltdXG4gIG92ZXJyaWRlRmFyZ2F0ZVNlcnZpY2VQcm9wcz86IFBhcnRpYWw8ZWNzLkZhcmdhdGVTZXJ2aWNlUHJvcHM+XG4gIG92ZXJyaWRlSGVhbHRoQ2hlY2s/OiBQYXJ0aWFsPGVsYi5IZWFsdGhDaGVjaz5cbiAgb3ZlcnJpZGVUYXJnZXRHcm91cFByb3BzPzogUGFydGlhbDxlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzPlxuICBvdmVycmlkZUNvbnRhaW5lclByb3BzPzogUGFydGlhbDxlY3MuQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnM+XG4gIHNlY3JldHM/OiBSZWNvcmQ8c3RyaW5nLCBlY3MuU2VjcmV0PlxuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBza2lwVGFyZ2V0R3JvdXA/OiBib29sZWFuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ2lyY3VpdEJyZWFrZXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiAgRWl0aGVyXG4gICAqICAtIGB7IGVuYWJsZWQ6IGZhbHNlIH1gIHRvIGRpc2FibGUgYWxsIGFsYXJtcy5cbiAgICogIC0gb2JqZWN0IHdpdGggcmVxdWlyZWQgYGFsYXJtQWN0aW9uYCwgYHdhcm5pbmdBY3Rpb25gLCBhbmQgYGxvYWRCYWxhbmNlckZ1bGxOYW1lYC5cbiAgICpcbiAgICogIFdoZW4gZW5hYmxlZCwgdGhlIGNvbnN0cnVjdCB3aWxsOlxuICAgKiAgLSAoQnkgZGVmYXVsdCkgYWRkIGEgbG9nLWJhc2VkIEpTT04gZXJyb3IgYWxhcm0gKGVuYWJsZWQgYnkgZGVmYXVsdCkuXG4gICAqICAtIChCeSBkZWZhdWx0KSBhZGQgdGFyZ2V0LWdyb3VwIHJlbGF0ZWQgYWxhcm1zICh0YXJnZXQgaGVhbHRoLCA1eHggcmVzcG9uc2VzLCByZXNwb25zZSB0aW1lKVxuICAgKiAgd2hlbiBhIHRhcmdldCBncm91cCBpcyBwcmVzZW50LlxuICAgKiAgLSAoT3B0LWluKSBvcHRpb25hbGx5IGVuYWJsZSB0aGUgdW5jYXVnaHQgSmF2YSBleGNlcHRpb24gYWxhcm1cbiAgICovXG4gIGFsYXJtczogU2VydmljZUFsYXJtc0NvbmZpZ1xufVxuXG5leHBvcnQgY2xhc3MgRmFyZ2F0ZVNlcnZpY2UgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBmYXJnYXRlU2VydmljZTogZWNzLkZhcmdhdGVTZXJ2aWNlXG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwOiBlYzIuU2VjdXJpdHlHcm91cFxuICBwdWJsaWMgcmVhZG9ubHkgdGFza0RlZmluaXRpb246IGVjcy5UYXNrRGVmaW5pdGlvblxuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0R3JvdXA6IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwIHwgdW5kZWZpbmVkXG4gIHB1YmxpYyByZWFkb25seSBsb2dHcm91cDogbG9ncy5Mb2dHcm91cFxuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZUFsYXJtczogU2VydmljZUFsYXJtcyB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBGYXJnYXRlU2VydmljZVByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhpcyBmbGFnIHRvIGRpc2FibGUgdGhpcyBzdGFjayBjcmVhdGluZyBhIGNvbXBsZXRlbHkgbmV3IHNlcnZpY2UgYW5kIGF0dGVtcHRpbmcgcmVwbGFjZSB3aGVuIGVuYWJsaW5nIGNpcmN1aXQgYnJlYWtlcnNcbiAgICAgKiBNaXRpZ2F0aW5nIHRoZSBkZXBsb3ltZW50IGVycm9yOiAnYSBzZXJ2aWNlIHdpdGggdGhlIG5hbWUgPC4uLj4gYWxyZWFkeSBleGlzdHMnXG4gICAgICogU2VlOiBnaXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMjI0NjdcbiAgICAgKi9cbiAgICB0aGlzLm5vZGUuc2V0Q29udGV4dChcbiAgICAgIFwiQGF3cy1jZGsvYXdzLWVjczpkaXNhYmxlRXhwbGljaXREZXBsb3ltZW50Q29udHJvbGxlckZvckNpcmN1aXRCcmVha2VyXCIsXG4gICAgICB0cnVlLFxuICAgIClcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQ29uZmlndXJlUGFyYW1ldGVycyh0aGlzLCB7XG4gICAgICBzc21QcmVmaXg6IGAvbGlmbGlnLWNkay8ke2Nkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWV9LyR7XG4gICAgICAgIHRoaXMubm9kZS5hZGRyXG4gICAgICB9L3BhcmFtZXRlcnNgLFxuICAgICAgcGFyYW1ldGVyczogcHJvcHMucGFyYW1ldGVycyA/PyBbXSxcbiAgICB9KVxuXG4gICAgdGhpcy5sb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiTG9nR3JvdXBcIiwge1xuICAgICAgcmV0ZW50aW9uOiBwcm9wcy5sb2dzUmV0ZW50aW9uID8/IGxvZ3MuUmV0ZW50aW9uRGF5cy5UV09fV0VFS1MsXG4gICAgfSlcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgfSlcblxuICAgIHRoaXMudGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIlRhc2tEZWZpbml0aW9uXCIsXG4gICAgICB7XG4gICAgICAgIGNwdTogcHJvcHMuY3B1ID8/IDI1NixcbiAgICAgICAgbWVtb3J5TGltaXRNaUI6IHByb3BzLm1lbW9yeUxpbWl0TWlCID8/IDUxMixcbiAgICAgICAgcnVudGltZVBsYXRmb3JtOiBwcm9wcy5ydW50aW1lUGxhdGZvcm0sXG4gICAgICB9LFxuICAgIClcblxuICAgIHBhcmFtZXRlcnMuZ3JhbnRSZWFkKHRoaXMudGFza0RlZmluaXRpb24udGFza1JvbGUpXG5cbiAgICBjb25zdCBwb3J0ID0gcHJvcHMuY29udGFpbmVyUG9ydCA/PyA4MDgwXG4gICAgdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXCJDb250YWluZXJcIiwge1xuICAgICAgbG9nZ2luZzogZWNzLkxvZ0RyaXZlci5hd3NMb2dzKHtcbiAgICAgICAgbG9nR3JvdXA6IHRoaXMubG9nR3JvdXAsXG4gICAgICAgIHN0cmVhbVByZWZpeDogXCJlY3NcIixcbiAgICAgICAgZGF0ZXRpbWVGb3JtYXQ6IFwiJVktJW0tJWRUJUg6JU06JVNcIixcbiAgICAgICAgbW9kZTogcHJvcHMubG9nRHJpdmVyTW9kZSA/PyBlY3MuQXdzTG9nRHJpdmVyTW9kZS5CTE9DS0lORyxcbiAgICAgIH0pLFxuICAgICAgaW1hZ2U6IHByb3BzLmVjc0ltYWdlLFxuICAgICAgc2VjcmV0czogcHJvcHMuc2VjcmV0cyxcbiAgICAgIGhlYWx0aENoZWNrOiBwcm9wcy5jb250YWluZXJIZWFsdGhDaGVjayxcbiAgICAgIHBvcnRNYXBwaW5nczogcHJvcHMucG9ydE1hcHBpbmdzID8/IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRhaW5lclBvcnQ6IHBvcnQsXG4gICAgICAgICAgaG9zdFBvcnQ6IHBvcnQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU1NNX1BSRUZJWDogcGFyYW1ldGVycy5zc21QcmVmaXgsXG4gICAgICAgIC8vIE5vdCByZWFkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgb25seSB1c2VkIHRvIGhlbHAgd2l0aCByZWRlcGxveW1lbnRzLlxuICAgICAgICBQQVJBTVNfSEFTSDogcGFyYW1ldGVycy5oYXNoVmFsdWUsXG4gICAgICAgIC4uLihwcm9wcy5lbnZpcm9ubWVudCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgbGludXhQYXJhbWV0ZXJzOiBuZXcgZWNzLkxpbnV4UGFyYW1ldGVycyh0aGlzLCBcIkxpbnV4UGFyYW1ldGVyc1wiLCB7XG4gICAgICAgIGluaXRQcm9jZXNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgLi4ucHJvcHMub3ZlcnJpZGVDb250YWluZXJQcm9wcyxcbiAgICB9KVxuXG4gICAgY29uc3QgZW5hYmxlQ2lyY3VpdEJyZWFrZXIgPSBwcm9wcy5lbmFibGVDaXJjdWl0QnJlYWtlciA/PyBmYWxzZVxuXG4gICAgdGhpcy5mYXJnYXRlU2VydmljZSA9IG5ldyBlY3MuRmFyZ2F0ZVNlcnZpY2UodGhpcywgXCJTZXJ2aWNlXCIsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgfSxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgY2x1c3RlcjogcHJvcHMuY2x1c3RlcixcbiAgICAgIG1pbkhlYWx0aHlQZXJjZW50OiAxMDAsXG4gICAgICBoZWFsdGhDaGVja0dyYWNlUGVyaW9kOiBwcm9wcy5oZWFsdGhDaGVja0dyYWNlUGVyaW9kLFxuICAgICAgZGVzaXJlZENvdW50OiBwcm9wcy5kZXNpcmVkQ291bnQsXG4gICAgICBhc3NpZ25QdWJsaWNJcDogdHJ1ZSxcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5zZWN1cml0eUdyb3VwXSxcbiAgICAgIHBsYXRmb3JtVmVyc2lvbjogZWNzLkZhcmdhdGVQbGF0Zm9ybVZlcnNpb24uVkVSU0lPTjFfNCxcbiAgICAgIGVuYWJsZUV4ZWN1dGVDb21tYW5kOiB0cnVlLFxuICAgICAgY2lyY3VpdEJyZWFrZXI6IGVuYWJsZUNpcmN1aXRCcmVha2VyXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZW5hYmxlOiB0cnVlLFxuICAgICAgICAgICAgcm9sbGJhY2s6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLnByb3BzLm92ZXJyaWRlRmFyZ2F0ZVNlcnZpY2VQcm9wcyxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLnNraXBIZWFsdGhDaGVja0dyYWNlUGVyaW9kKSB7XG4gICAgICA7KFxuICAgICAgICB0aGlzLmZhcmdhdGVTZXJ2aWNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblNlcnZpY2VcbiAgICAgICkuaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFNlY29uZHMgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHBhcmFtZXRlcnMucGFyYW1ldGVycykge1xuICAgICAgdGhpcy5mYXJnYXRlU2VydmljZS5ub2RlLmFkZERlcGVuZGVuY3kocGFyYW0pXG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5za2lwVGFyZ2V0R3JvdXApIHtcbiAgICAgIHRoaXMudGFyZ2V0R3JvdXAgPSBuZXcgZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAodGhpcywgXCJUYXJnZXRHcm91cFwiLCB7XG4gICAgICAgIHByb3RvY29sOiBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQLFxuICAgICAgICBwb3J0OiBwb3J0LFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdGFyZ2V0VHlwZTogZWxiLlRhcmdldFR5cGUuSVAsXG4gICAgICAgIHRhcmdldHM6IFt0aGlzLmZhcmdhdGVTZXJ2aWNlXSxcbiAgICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTpcbiAgICAgICAgICBwcm9wcy5kZXJlZ2lzdHJhdGlvbkRlbGF5ID8/IGNkay5EdXJhdGlvbi5zZWNvbmRzKDE1KSxcbiAgICAgICAgLi4ucHJvcHMub3ZlcnJpZGVUYXJnZXRHcm91cFByb3BzLFxuICAgICAgfSlcblxuICAgICAgdGhpcy50YXJnZXRHcm91cC5jb25maWd1cmVIZWFsdGhDaGVjayh7XG4gICAgICAgIGludGVydmFsOiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgcGF0aDogXCIvaGVhbHRoXCIsXG4gICAgICAgIGhlYWx0aHlUaHJlc2hvbGRDb3VudDogMixcbiAgICAgICAgLi4ucHJvcHMub3ZlcnJpZGVIZWFsdGhDaGVjayxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZSBleHBsaWNpdCBhbGFybUFjdGlvbiBhbmQgd2FybmluZ0FjdGlvbiB3aGVuIGVuYWJsZWQuXG4gICAgaWYgKHByb3BzLmFsYXJtcyAmJiBcImFsYXJtQWN0aW9uXCIgaW4gcHJvcHMuYWxhcm1zKSB7XG4gICAgICBjb25zdCBhbGFybXMgPSBwcm9wcy5hbGFybXNcblxuICAgICAgdGhpcy5zZXJ2aWNlQWxhcm1zID0gbmV3IFNlcnZpY2VBbGFybXModGhpcywgXCJBbGFybXNcIiwge1xuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIGFsYXJtQWN0aW9uOiBhbGFybXMuYWxhcm1BY3Rpb24sXG4gICAgICAgIHdhcm5pbmdBY3Rpb246IGFsYXJtcy53YXJuaW5nQWN0aW9uLFxuICAgICAgICBsb2dIYW5kbGVyOiBhbGFybXMubG9nSGFuZGxlcixcbiAgICAgIH0pXG5cbiAgICAgIC8vIEVuYWJsZWQgYnkgZGVmYXVsdCAob3B0LW91dCkuXG4gICAgICBjb25zdCBqc29uRXJyb3JPdmVycmlkZXMgPSBhbGFybXMuanNvbkVycm9yQWxhcm1cbiAgICAgIGlmIChqc29uRXJyb3JPdmVycmlkZXM/LmVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNlcnZpY2VBbGFybXMuYWRkSnNvbkVycm9yQWxhcm0oe1xuICAgICAgICAgIGxvZ0dyb3VwOiB0aGlzLmxvZ0dyb3VwLFxuICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGpzb25FcnJvck92ZXJyaWRlcz8uYWxhcm1EZXNjcmlwdGlvbixcbiAgICAgICAgICBlbmFibGVPa0FsYXJtOiBqc29uRXJyb3JPdmVycmlkZXM/LmVuYWJsZU9rQWxhcm0sXG4gICAgICAgICAgYWN0aW9uOiBqc29uRXJyb3JPdmVycmlkZXM/LmFjdGlvbixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gTm90IGVuYWJsZWQgYnkgZGVmYXVsdCAob3B0LWluKS5cbiAgICAgIGNvbnN0IGphdmFFeGNlcHRpb25PdmVycmlkZXMgPSBhbGFybXMudW5jYXVnaHRKYXZhRXhjZXB0aW9uQWxhcm1cbiAgICAgIGlmIChqYXZhRXhjZXB0aW9uT3ZlcnJpZGVzPy5lbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc2VydmljZUFsYXJtcy5hZGRVbmNhdWdodEphdmFFeGNlcHRpb25BbGFybSh7XG4gICAgICAgICAgbG9nR3JvdXA6IHRoaXMubG9nR3JvdXAsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogamF2YUV4Y2VwdGlvbk92ZXJyaWRlcy5hbGFybURlc2NyaXB0aW9uLFxuICAgICAgICAgIGVuYWJsZU9rQWxhcm06IGphdmFFeGNlcHRpb25PdmVycmlkZXMuZW5hYmxlT2tBbGFybSxcbiAgICAgICAgICBhY3Rpb246IGphdmFFeGNlcHRpb25PdmVycmlkZXMuYWN0aW9uLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICghcHJvcHMuc2tpcFRhcmdldEdyb3VwKSB7XG4gICAgICAgIC8vIEFsbCBhbGFybXMgZW5hYmxlZCBieS1kZWZhdWx0IChvcHQtb3V0IGluZGl2aWR1YWxseSlcbiAgICAgICAgdGhpcy5zZXJ2aWNlQWxhcm1zLmFkZFRhcmdldEdyb3VwQWxhcm1zKHtcbiAgICAgICAgICB0YXJnZXRHcm91cEZ1bGxOYW1lOiB0aGlzLnRhcmdldEdyb3VwIS50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICAgIGxvYWRCYWxhbmNlckZ1bGxOYW1lOiBhbGFybXMubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgICAgdGFyZ2V0SGVhbHRoQWxhcm06IGFsYXJtcy50YXJnZXRIZWFsdGhBbGFybSxcbiAgICAgICAgICBzaW5nbGU1eHhSZXNwb25zZUFsYXJtOiBhbGFybXMuc2luZ2xlNXh4UmVzcG9uc2VBbGFybSxcbiAgICAgICAgICB0b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybTpcbiAgICAgICAgICAgIGFsYXJtcy50b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybSxcbiAgICAgICAgICB0YXJnZXRSZXNwb25zZVRpbWVBbGFybTogYWxhcm1zLnRhcmdldFJlc3BvbnNlVGltZUFsYXJtLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -38,7 +38,7 @@ export class LoadBalancer extends constructs.Construct {
|
|
|
38
38
|
targetType: elb.TargetType.INSTANCE,
|
|
39
39
|
});
|
|
40
40
|
this.httpsListener = this.loadBalancer.addListener("HttpsListener", {
|
|
41
|
-
sslPolicy: elb.SslPolicy.
|
|
41
|
+
sslPolicy: elb.SslPolicy.RECOMMENDED_TLS,
|
|
42
42
|
protocol: elb.ApplicationProtocol.HTTPS,
|
|
43
43
|
port: 443,
|
|
44
44
|
certificates: props.certificates,
|
|
@@ -57,4 +57,4 @@ export class LoadBalancer extends constructs.Construct {
|
|
|
57
57
|
this.loadBalancer.logAccessLogs(this.accessLogsBucket);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2FkLWJhbGFuY2VyL2xvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFFbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssR0FBRyxNQUFNLHdDQUF3QyxDQUFBO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN2RSxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3hDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBU3hDLE1BQU0sT0FBTyxZQUFhLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFDcEMsWUFBWSxDQUE2QjtJQUN6QyxhQUFhLENBQXlCO0lBQ3RDLGdCQUFnQixDQUFXO0lBRTNDLFlBQ0UsS0FBMkIsRUFDM0IsRUFBVSxFQUNWLEtBQXdCO1FBRXhCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3hFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztnQkFDbEMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTTthQUNsQyxDQUFDO1lBQ0YsR0FBRyxLQUFLLENBQUMseUJBQXlCO1NBQ25DLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxZQUFZO2FBQ2QsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUMzQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7YUFDRCxTQUFTLENBQUMsZUFBZSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDO2dCQUM5QixJQUFJLEVBQUUsS0FBSztnQkFDWCxRQUFRLEVBQUUsT0FBTztnQkFDakIsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQztTQUNILENBQUMsQ0FBQTtRQUVKLG9EQUFvRDtRQUNwRCw0REFBNEQ7UUFDNUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsQ0FDdkQsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLFFBQVEsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSTtZQUN0QyxJQUFJLEVBQUUsRUFBRTtZQUNSLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVE7U0FDcEMsQ0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDbEUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZTtZQUN4QyxRQUFRLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUs7WUFDdkMsSUFBSSxFQUFFLEdBQUc7WUFDVCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsbUJBQW1CLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxHQUFHLEtBQUssQ0FBQywwQkFBMEI7U0FDcEMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDOUQsVUFBVSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1lBQzFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTO1lBQ2pELGNBQWMsRUFBRTtnQkFDZDtvQkFDRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUNsQzthQUNGO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDeEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgdHlwZSAqIGFzIGNlcnRpZmljYXRlbWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiXG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0ICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiXG5pbXBvcnQgeyBMaXN0ZW5lckFjdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclByb3BzIHtcbiAgY2VydGlmaWNhdGVzOiBjZXJ0aWZpY2F0ZW1hbmFnZXIuSUNlcnRpZmljYXRlW11cbiAgdnBjOiBlYzIuSVZwY1xuICBvdmVycmlkZUxvYWRCYWxhbmNlclByb3BzPzogUGFydGlhbDxlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJQcm9wcz5cbiAgb3ZlcnJpZGVIdHRwc0xpc3RlbmVyUHJvcHM/OiBQYXJ0aWFsPGVsYi5CYXNlQXBwbGljYXRpb25MaXN0ZW5lclByb3BzPlxufVxuXG5leHBvcnQgY2xhc3MgTG9hZEJhbGFuY2VyIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyOiBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJcbiAgcHVibGljIHJlYWRvbmx5IGh0dHBzTGlzdGVuZXI6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyXG4gIHB1YmxpYyByZWFkb25seSBhY2Nlc3NMb2dzQnVja2V0OiBzMy5CdWNrZXRcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTG9hZEJhbGFuY2VyUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubG9hZEJhbGFuY2VyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcih0aGlzLCBcIkxvYWRCYWxhbmNlclwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGludGVybmV0RmFjaW5nOiB0cnVlLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLm92ZXJyaWRlTG9hZEJhbGFuY2VyUHJvcHMsXG4gICAgfSlcblxuICAgIHRoaXMubG9hZEJhbGFuY2VyXG4gICAgICAuYWRkTGlzdGVuZXIoXCJIdHRwTGlzdGVuZXJcIiwge1xuICAgICAgICBwb3J0OiA4MCxcbiAgICAgIH0pXG4gICAgICAuYWRkQWN0aW9uKFwiSHR0cHNSZWRpcmVjdFwiLCB7XG4gICAgICAgIGFjdGlvbjogTGlzdGVuZXJBY3Rpb24ucmVkaXJlY3Qoe1xuICAgICAgICAgIHBvcnQ6IFwiNDQzXCIsXG4gICAgICAgICAgcHJvdG9jb2w6IFwiSFRUUFNcIixcbiAgICAgICAgICBwZXJtYW5lbnQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgfSlcblxuICAgIC8vIFRoZSBMb2FkIEJhbGFuY2VyIHJlcXVpcmUgYSBkZWZhdWx0IHRhcmdldCBncm91cC5cbiAgICAvLyBXZSB3aWxsIG5vdCBjb25uZWN0IGFueXRoaW5nIHRvIHRoZSBkZWZhdWx0IHRhcmdldCBncm91cC5cbiAgICBjb25zdCBkZWZhdWx0VGFyZ2V0R3JvdXAgPSBuZXcgZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJEZWZhdWx0VGFyZ2V0R3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgcHJvdG9jb2w6IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgIHBvcnQ6IDgwLFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgdGFyZ2V0VHlwZTogZWxiLlRhcmdldFR5cGUuSU5TVEFOQ0UsXG4gICAgICB9LFxuICAgIClcblxuICAgIHRoaXMuaHR0cHNMaXN0ZW5lciA9IHRoaXMubG9hZEJhbGFuY2VyLmFkZExpc3RlbmVyKFwiSHR0cHNMaXN0ZW5lclwiLCB7XG4gICAgICBzc2xQb2xpY3k6IGVsYi5Tc2xQb2xpY3kuUkVDT01NRU5ERURfVExTLFxuICAgICAgcHJvdG9jb2w6IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgcG9ydDogNDQzLFxuICAgICAgY2VydGlmaWNhdGVzOiBwcm9wcy5jZXJ0aWZpY2F0ZXMsXG4gICAgICBkZWZhdWx0VGFyZ2V0R3JvdXBzOiBbZGVmYXVsdFRhcmdldEdyb3VwXSxcbiAgICAgIC4uLnByb3BzLm92ZXJyaWRlSHR0cHNMaXN0ZW5lclByb3BzLFxuICAgIH0pXG5cbiAgICB0aGlzLmFjY2Vzc0xvZ3NCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsIFwiQWNjZXNzTG9nc0J1Y2tldFwiLCB7XG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4cGlyYXRpb246IGNkay5EdXJhdGlvbi5kYXlzKDMwKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIHRoaXMubG9hZEJhbGFuY2VyLmxvZ0FjY2Vzc0xvZ3ModGhpcy5hY2Nlc3NMb2dzQnVja2V0KVxuICB9XG59XG4iXX0=
|
package/lib/rds/database.d.ts
CHANGED
|
@@ -1,8 +1,81 @@
|
|
|
1
1
|
import * as cdk from "aws-cdk-lib";
|
|
2
|
+
import type * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
|
|
2
3
|
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
3
4
|
import * as rds from "aws-cdk-lib/aws-rds";
|
|
4
5
|
import type * as sm from "aws-cdk-lib/aws-secretsmanager";
|
|
5
6
|
import * as constructs from "constructs";
|
|
7
|
+
/**
|
|
8
|
+
* Configure database alarms.
|
|
9
|
+
*
|
|
10
|
+
* Alarms are enabled by default (when you supply an `alarmAction` and
|
|
11
|
+
* `warningAction`). To explicitly disable automatic alarms use
|
|
12
|
+
* `{ enabled: false }`.
|
|
13
|
+
*/
|
|
14
|
+
export type DatabaseAlarmsConfig = {
|
|
15
|
+
enabled: false;
|
|
16
|
+
} | {
|
|
17
|
+
/**
|
|
18
|
+
* When alarms are enabled, both actions are required.
|
|
19
|
+
*/
|
|
20
|
+
alarmAction: cloudwatch.IAlarmAction;
|
|
21
|
+
warningAction: cloudwatch.IAlarmAction;
|
|
22
|
+
/**
|
|
23
|
+
* CPU credits alarm config
|
|
24
|
+
*/
|
|
25
|
+
cpuCreditsAlarm?: {
|
|
26
|
+
/**
|
|
27
|
+
* @default true if instance type is burstable
|
|
28
|
+
*/
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
/** Whether to attach OK actions for this alarm. @default true */
|
|
31
|
+
enableOkAlarm?: boolean;
|
|
32
|
+
action?: cloudwatch.IAlarmAction;
|
|
33
|
+
/** @default 10% of maximum earned credits for instance type */
|
|
34
|
+
threshold?: number;
|
|
35
|
+
appendToAlarmDescription?: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Storage space alarm overrides
|
|
39
|
+
*/
|
|
40
|
+
storageSpaceAlarms?: {
|
|
41
|
+
/**
|
|
42
|
+
* Set to `false` to disable all storage space alarms (both low and critically low).
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
enabled?: boolean;
|
|
46
|
+
lowStorageSpaceAlarm?: {
|
|
47
|
+
action?: cloudwatch.IAlarmAction;
|
|
48
|
+
/** Whether to attach OK actions for this alarm. @default true */
|
|
49
|
+
enableOkAlarm?: boolean;
|
|
50
|
+
/** @default 25% of allocated storage */
|
|
51
|
+
threshold?: cdk.Size;
|
|
52
|
+
};
|
|
53
|
+
criticallyLowStorageSpaceAlarm?: {
|
|
54
|
+
action?: cloudwatch.IAlarmAction;
|
|
55
|
+
/** Whether to attach OK actions for this alarm. @default true */
|
|
56
|
+
enableOkAlarm?: boolean;
|
|
57
|
+
/** @default 5% of allocated storage */
|
|
58
|
+
threshold?: cdk.Size;
|
|
59
|
+
};
|
|
60
|
+
appendToAlarmDescription?: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* CPU utilization alarm overrides.
|
|
64
|
+
*/
|
|
65
|
+
cpuUtilizationAlarm?: {
|
|
66
|
+
enabled?: boolean;
|
|
67
|
+
/** Whether to attach OK actions for this alarm. @default true */
|
|
68
|
+
enableOkAlarm?: boolean;
|
|
69
|
+
action?: cloudwatch.IAlarmAction;
|
|
70
|
+
/** @default 80 */
|
|
71
|
+
threshold?: number;
|
|
72
|
+
/** @default 5 */
|
|
73
|
+
evaluationPeriods?: number;
|
|
74
|
+
/** @default 2 minutes */
|
|
75
|
+
period?: cdk.Duration;
|
|
76
|
+
appendToAlarmDescription?: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
6
79
|
export interface DatabaseProps extends cdk.StackProps {
|
|
7
80
|
vpc: ec2.IVpc;
|
|
8
81
|
engine: rds.IInstanceEngine;
|
|
@@ -37,6 +110,16 @@ export interface DatabaseProps extends cdk.StackProps {
|
|
|
37
110
|
*/
|
|
38
111
|
usePublicSubnets?: boolean;
|
|
39
112
|
overrideDbOptions?: Partial<rds.DatabaseInstanceSourceProps>;
|
|
113
|
+
/**
|
|
114
|
+
* Configure database alarms.
|
|
115
|
+
*
|
|
116
|
+
* This property is required and must be one of two shapes:
|
|
117
|
+
* - `{ enabled: false }` to explicitly disable automatic alarms
|
|
118
|
+
* - `{ alarmAction, warningAction }` to enable alarms and provide both channels
|
|
119
|
+
*
|
|
120
|
+
* Default: enabled.
|
|
121
|
+
*/
|
|
122
|
+
alarms: DatabaseAlarmsConfig;
|
|
40
123
|
}
|
|
41
124
|
export declare class Database extends constructs.Construct {
|
|
42
125
|
readonly secret: sm.ISecret;
|