truemark-cdk-lib 0.0.4 → 0.0.10
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/aws-lambda/lib/helper.d.ts +4 -0
- package/aws-lambda/lib/helper.js +38 -0
- package/aws-lambda/lib/index.d.ts +2 -1
- package/aws-lambda/lib/index.js +3 -2
- package/aws-lambda/lib/python-function.d.ts +40 -0
- package/aws-lambda/lib/python-function.js +132 -0
- package/aws-lambda/lib/{standard-functions.d.ts → standard-function.d.ts} +9 -46
- package/aws-lambda/lib/standard-function.js +3 -0
- package/aws-sqs/index.d.ts +1 -0
- package/aws-sqs/index.js +14 -0
- package/aws-sqs/lib/index.d.ts +1 -0
- package/aws-sqs/lib/index.js +14 -0
- package/aws-sqs/lib/standard-queue.d.ts +132 -0
- package/aws-sqs/lib/standard-queue.js +129 -0
- package/index.d.ts +1 -0
- package/index.js +2 -1
- package/package.json +13 -7
- package/aws-lambda/lib/standard-functions.js +0 -164
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
|
+
import { CustomAlarmThreshold } from "cdk-monitoring-constructs";
|
|
4
|
+
export declare function toAlarmProps(prop: string, warningThreshold?: number | Duration, criticalThreshold?: number | Duration, warningAlarmActions?: IAlarmAction[], criticalAlarmActions?: IAlarmAction[], warningDefaultThreshold?: number | Duration, criticalDefaultThreshold?: number | Duration): Record<string, CustomAlarmThreshold> | undefined;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toAlarmProps = void 0;
|
|
4
|
+
const aws_monitoring_1 = require("../../aws-monitoring");
|
|
5
|
+
function toAlarmProps(prop, warningThreshold, criticalThreshold, warningAlarmActions, criticalAlarmActions, warningDefaultThreshold, criticalDefaultThreshold) {
|
|
6
|
+
let alarmProps = {};
|
|
7
|
+
if (criticalThreshold !== undefined) {
|
|
8
|
+
alarmProps.Critical = {
|
|
9
|
+
[prop]: criticalThreshold,
|
|
10
|
+
actionsEnabled: true,
|
|
11
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
else if (criticalDefaultThreshold !== undefined) {
|
|
15
|
+
alarmProps.Critical = {
|
|
16
|
+
[prop]: criticalDefaultThreshold,
|
|
17
|
+
actionsEnabled: true,
|
|
18
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (warningThreshold !== undefined) {
|
|
22
|
+
alarmProps.Warning = {
|
|
23
|
+
[prop]: warningThreshold,
|
|
24
|
+
actionsEnabled: true,
|
|
25
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
else if (warningDefaultThreshold !== undefined) {
|
|
29
|
+
alarmProps.Warning = {
|
|
30
|
+
[prop]: warningDefaultThreshold,
|
|
31
|
+
actionsEnabled: true,
|
|
32
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return Object.keys(alarmProps).length > 0 ? alarmProps : undefined;
|
|
36
|
+
}
|
|
37
|
+
exports.toAlarmProps = toAlarmProps;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLHlEQUFrRTtBQUVsRSxTQUFnQixZQUFZLENBQzFCLElBQVksRUFDWixnQkFBb0MsRUFDcEMsaUJBQXFDLEVBQ3JDLG1CQUFvQyxFQUNwQyxvQkFBcUMsRUFDckMsdUJBQTJDLEVBQzNDLHdCQUE0QztJQUU1QyxJQUFJLFVBQVUsR0FBeUMsRUFBRSxDQUFBO0lBQ3pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUI7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztTQUNsRixDQUFBO0tBQ0Y7U0FBTSxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtRQUNqRCxVQUFVLENBQUMsUUFBUSxHQUFHO1lBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2hDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGNBQWMsRUFBRSxJQUFJLDZDQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFDLENBQUM7U0FDbEYsQ0FBQTtLQUNGO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUNuQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQjtZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVBQUUsSUFBSSw2Q0FBNEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxDQUFDO1NBQ2pGLENBQUE7S0FDRjtTQUFNLElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFO1FBQ2hELFVBQVUsQ0FBQyxPQUFPLEdBQUc7WUFDbkIsQ0FBQyxJQUFJLENBQUMsRUFBRSx1QkFBdUI7WUFDL0IsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQztTQUNqRixDQUFBO0tBQ0Y7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDcEUsQ0FBQztBQXJDRCxvQ0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0R1cmF0aW9ufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7SUFsYXJtQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7Q3VzdG9tQWxhcm1UaHJlc2hvbGR9IGZyb20gXCJjZGstbW9uaXRvcmluZy1jb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1N0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3l9IGZyb20gXCIuLi8uLi9hd3MtbW9uaXRvcmluZ1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9BbGFybVByb3BzKFxuICBwcm9wOiBzdHJpbmcsXG4gIHdhcm5pbmdUaHJlc2hvbGQ/OiBudW1iZXIgfCBEdXJhdGlvbixcbiAgY3JpdGljYWxUaHJlc2hvbGQ/OiBudW1iZXIgfCBEdXJhdGlvbixcbiAgd2FybmluZ0FsYXJtQWN0aW9ucz86IElBbGFybUFjdGlvbltdLFxuICBjcml0aWNhbEFsYXJtQWN0aW9ucz86IElBbGFybUFjdGlvbltdLFxuICB3YXJuaW5nRGVmYXVsdFRocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uLFxuICBjcml0aWNhbERlZmF1bHRUaHJlc2hvbGQ/OiBudW1iZXIgfCBEdXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWxhcm1UaHJlc2hvbGQ+IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGFsYXJtUHJvcHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFsYXJtVGhyZXNob2xkPiA9IHt9XG4gIGlmIChjcml0aWNhbFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5Dcml0aWNhbCA9IHtcbiAgICAgIFtwcm9wXTogY3JpdGljYWxUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogY3JpdGljYWxBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfSBlbHNlIGlmIChjcml0aWNhbERlZmF1bHRUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuQ3JpdGljYWwgPSB7XG4gICAgICBbcHJvcF06IGNyaXRpY2FsRGVmYXVsdFRocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiBjcml0aWNhbEFsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9XG4gIGlmICh3YXJuaW5nVGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLldhcm5pbmcgPSB7XG4gICAgICBbcHJvcF06IHdhcm5pbmdUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogd2FybmluZ0FsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9IGVsc2UgaWYgKHdhcm5pbmdEZWZhdWx0VGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLldhcm5pbmcgPSB7XG4gICAgICBbcHJvcF06IHdhcm5pbmdEZWZhdWx0VGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IHdhcm5pbmdBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoYWxhcm1Qcm9wcykubGVuZ3RoID4gMCA/IGFsYXJtUHJvcHMgOiB1bmRlZmluZWRcbn1cbiJdfQ==
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from './standard-
|
|
1
|
+
export * from './standard-function';
|
|
2
|
+
export * from './python-function';
|
package/aws-lambda/lib/index.js
CHANGED
|
@@ -10,5 +10,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
10
10
|
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./standard-
|
|
14
|
-
|
|
13
|
+
__exportStar(require("./standard-function"), exports);
|
|
14
|
+
__exportStar(require("./python-function"), exports);
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsb0RBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zdGFuZGFyZC1mdW5jdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3B5dGhvbi1mdW5jdGlvbic7XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { StandardFunctionProps } from "./standard-function";
|
|
2
|
+
import { Function, Runtime } from "aws-cdk-lib/aws-lambda";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
import { MonitoringFacade } from "cdk-monitoring-constructs";
|
|
5
|
+
import { LogAlarm } from "../../aws-cloudwatch";
|
|
6
|
+
export interface PythonFunctionProps extends StandardFunctionProps {
|
|
7
|
+
/**
|
|
8
|
+
* The runtime environment for the Lambda function. Must be one of the Python runtimes.
|
|
9
|
+
*
|
|
10
|
+
* @default Runtime.PYTHON_3_9
|
|
11
|
+
*/
|
|
12
|
+
readonly runtime?: Runtime;
|
|
13
|
+
/**
|
|
14
|
+
* Location on the filesystem the Lambda assets are found.
|
|
15
|
+
*
|
|
16
|
+
* Example: path.join(__dirname, '..', 'mylambda')
|
|
17
|
+
*/
|
|
18
|
+
readonly entry: string;
|
|
19
|
+
/**
|
|
20
|
+
* File containing the handler.
|
|
21
|
+
*
|
|
22
|
+
* @default 'index.py'
|
|
23
|
+
*/
|
|
24
|
+
readonly index?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Exported handler function
|
|
27
|
+
*
|
|
28
|
+
* @default 'handler'
|
|
29
|
+
*/
|
|
30
|
+
readonly handler?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class PythonFunction extends Construct {
|
|
33
|
+
static readonly DEFAULT_LOG_METRIC_PATTERN = "\"[ERROR]\"";
|
|
34
|
+
static readonly DEFAULT_LOG_INSIGHTS_PATTERN = "\\[ERROR\\]";
|
|
35
|
+
readonly monitoring: MonitoringFacade;
|
|
36
|
+
readonly function: Function;
|
|
37
|
+
readonly criticalLogAlarm: LogAlarm;
|
|
38
|
+
readonly warningLogAlarm: LogAlarm;
|
|
39
|
+
constructor(scope: Construct, id: string, props: PythonFunctionProps);
|
|
40
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PythonFunction = void 0;
|
|
4
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const cdk_monitoring_constructs_1 = require("cdk-monitoring-constructs");
|
|
7
|
+
const aws_cloudwatch_1 = require("../../aws-cloudwatch");
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const fs = require("fs");
|
|
10
|
+
const path = require("path");
|
|
11
|
+
const logs = require("aws-cdk-lib/aws-logs");
|
|
12
|
+
const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
13
|
+
const helper_1 = require("./helper");
|
|
14
|
+
class PythonFunction extends constructs_1.Construct {
|
|
15
|
+
constructor(scope, id, props) {
|
|
16
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
|
|
17
|
+
super(scope, id);
|
|
18
|
+
this.monitoring = new cdk_monitoring_constructs_1.MonitoringFacade(this, 'Monitoring', {
|
|
19
|
+
metricFactoryDefaults: {},
|
|
20
|
+
alarmFactoryDefaults: {
|
|
21
|
+
actionsEnabled: true,
|
|
22
|
+
alarmNamePrefix: scope.node.path.replace(/\//g, '-'),
|
|
23
|
+
},
|
|
24
|
+
dashboardFactory: props.dashboardFactory
|
|
25
|
+
});
|
|
26
|
+
let bundling = fs.existsSync(path.join(props.entry, 'requirements.txt')) ? {
|
|
27
|
+
image: (_b = (_a = props.runtime) === null || _a === void 0 ? void 0 : _a.bundlingImage) !== null && _b !== void 0 ? _b : aws_lambda_1.Runtime.PYTHON_3_9.bundlingImage,
|
|
28
|
+
command: [
|
|
29
|
+
'bash', '-c', [
|
|
30
|
+
'pip install --target /asset-output/ -r requirements.txt',
|
|
31
|
+
'cp -ra * /asset-output/'
|
|
32
|
+
].join('&&')
|
|
33
|
+
],
|
|
34
|
+
outputType: aws_cdk_lib_1.BundlingOutput.NOT_ARCHIVED,
|
|
35
|
+
} : undefined;
|
|
36
|
+
this.function = new aws_lambda_1.Function(this, id, {
|
|
37
|
+
runtime: (_c = props.runtime) !== null && _c !== void 0 ? _c : aws_lambda_1.Runtime.PYTHON_3_9,
|
|
38
|
+
tracing: (_d = props.tracing) !== null && _d !== void 0 ? _d : aws_lambda_1.Tracing.PASS_THROUGH,
|
|
39
|
+
logRetention: (_e = props.logRetention) !== null && _e !== void 0 ? _e : logs.RetentionDays.THREE_DAYS,
|
|
40
|
+
architecture: (_f = props.architecture) !== null && _f !== void 0 ? _f : aws_lambda_1.Architecture.ARM_64,
|
|
41
|
+
vpc: props.vpc,
|
|
42
|
+
vpcSubnets: props.vpcSubnets,
|
|
43
|
+
memorySize: (_g = props.memorySize) !== null && _g !== void 0 ? _g : 768,
|
|
44
|
+
timeout: (_h = props.timeout) !== null && _h !== void 0 ? _h : aws_cdk_lib_1.Duration.seconds(30),
|
|
45
|
+
environment: props.environment,
|
|
46
|
+
description: props.description,
|
|
47
|
+
code: aws_lambda_1.Code.fromAsset(props.entry, { bundling }),
|
|
48
|
+
handler: ((_j = props.index) !== null && _j !== void 0 ? _j : 'index.py').replace('.py', '') + '.' + ((_k = props.handler) !== null && _k !== void 0 ? _k : 'handler'),
|
|
49
|
+
});
|
|
50
|
+
const warnProps = props.warningAlarmProps;
|
|
51
|
+
const warnActions = [];
|
|
52
|
+
(_l = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyActions) === null || _l === void 0 ? void 0 : _l.forEach((action) => warnActions.push(action));
|
|
53
|
+
(_m = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyTopics) === null || _m === void 0 ? void 0 : _m.forEach((topic) => warnActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
54
|
+
const critProps = props.criticalAlarmProps;
|
|
55
|
+
const critActions = [];
|
|
56
|
+
(_o = critProps === null || critProps === void 0 ? void 0 : critProps.notifyActions) === null || _o === void 0 ? void 0 : _o.forEach((action) => critActions.push(action));
|
|
57
|
+
(_p = critProps === null || critProps === void 0 ? void 0 : critProps.notifyTopics) === null || _p === void 0 ? void 0 : _p.forEach((topic) => critActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
58
|
+
this.monitoring.monitorLambdaFunction({
|
|
59
|
+
lambdaFunction: this.function,
|
|
60
|
+
lambdaInsightsEnabled: true,
|
|
61
|
+
addToAlarmDashboard: true,
|
|
62
|
+
addToDetailDashboard: true,
|
|
63
|
+
addToSummaryDashboard: true,
|
|
64
|
+
addLatencyP50Alarm: helper_1.toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p50Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p50Latency, warnActions, critActions),
|
|
65
|
+
addLatencyP90Alarm: helper_1.toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p90Latency, warnActions, critActions),
|
|
66
|
+
addLatencyP99Alarm: helper_1.toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p99Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p99Latency, warnActions, critActions),
|
|
67
|
+
addFaultCountAlarm: helper_1.toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxFaults, critProps === null || critProps === void 0 ? void 0 : critProps.maxFaults, warnActions, critActions, undefined, 0),
|
|
68
|
+
addFaultRateAlarm: helper_1.toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgFaults, critProps === null || critProps === void 0 ? void 0 : critProps.avgFaults, warnActions, critActions),
|
|
69
|
+
addLowTpsAlarm: helper_1.toAlarmProps('minTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minTps, critProps === null || critProps === void 0 ? void 0 : critProps.minTps, warnActions, critActions),
|
|
70
|
+
addHighTpsAlarm: helper_1.toAlarmProps('maxTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTps, critProps === null || critProps === void 0 ? void 0 : critProps.maxTps, warnActions, critActions),
|
|
71
|
+
addThrottlesCountAlarm: helper_1.toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.maxThrottles, warnActions, critActions, undefined, 0),
|
|
72
|
+
addThrottlesRateAlarm: helper_1.toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.avgThrottles, warnActions, critActions),
|
|
73
|
+
addConcurrentExecutionsCountAlarm: helper_1.toAlarmProps('maxRunningTasks', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxConcurrentExecutions, critProps === null || critProps === void 0 ? void 0 : critProps.maxConcurrentExecutions, warnActions, critActions),
|
|
74
|
+
addMaxIteratorAgeAlarm: helper_1.toAlarmProps('maxAgeInMillis', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIteratorAge, critProps === null || critProps === void 0 ? void 0 : critProps.maxIteratorAge, warnActions, critActions),
|
|
75
|
+
addEnhancedMonitoringMaxCpuTotalTimeAlarm: helper_1.toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.maxCpuTime, warnActions, critActions),
|
|
76
|
+
addEnhancedMonitoringP90CpuTotalTimeAlarm: helper_1.toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90CpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.p90CpuTime, warnActions, critActions),
|
|
77
|
+
addEnhancedMonitoringAvgCpuTotalTimeAlarm: helper_1.toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.avgCpuTime, warnActions, critActions),
|
|
78
|
+
addEnhancedMonitoringMaxMemoryUtilizationAlarm: helper_1.toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxMemory, critProps === null || critProps === void 0 ? void 0 : critProps.maxMemory, warnActions, critActions),
|
|
79
|
+
addEnhancedMonitoringP90MemoryUtilizationAlarm: helper_1.toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Memory, critProps === null || critProps === void 0 ? void 0 : critProps.p90Memory, warnActions, critActions),
|
|
80
|
+
addEnhancedMonitoringAvgMemoryUtilizationAlarm: helper_1.toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgMemory, critProps === null || critProps === void 0 ? void 0 : critProps.avgMemory, warnActions, critActions),
|
|
81
|
+
});
|
|
82
|
+
// Add log monitoring to dashboard
|
|
83
|
+
let critMaxLogCount = (_r = (_q = props.criticalAlarmProps) === null || _q === void 0 ? void 0 : _q.maxLogCount) !== null && _r !== void 0 ? _r : 1;
|
|
84
|
+
let pattern = '';
|
|
85
|
+
if (critMaxLogCount > 0) {
|
|
86
|
+
pattern = (_t = (_s = props.criticalAlarmProps) === null || _s === void 0 ? void 0 : _s.dashboardLogPattern) !== null && _t !== void 0 ? _t : PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN;
|
|
87
|
+
}
|
|
88
|
+
if (((_u = props.warningAlarmProps) === null || _u === void 0 ? void 0 : _u.maxLogCount) !== undefined && pattern !== props.warningAlarmProps.dashboardLogPattern) {
|
|
89
|
+
pattern += (pattern !== '' ? '|' : '') + props.warningAlarmProps.dashboardLogPattern;
|
|
90
|
+
}
|
|
91
|
+
if (pattern !== '') {
|
|
92
|
+
this.monitoring.monitorLog({
|
|
93
|
+
logGroupName: this.function.logGroup.logGroupName,
|
|
94
|
+
pattern,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Add critical log alarm
|
|
98
|
+
if (critMaxLogCount > 0) {
|
|
99
|
+
this.criticalLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsCritical', {
|
|
100
|
+
logGroup: this.function.logGroup,
|
|
101
|
+
pattern: (_w = (_v = props.criticalAlarmProps) === null || _v === void 0 ? void 0 : _v.metricLogPattern) !== null && _w !== void 0 ? _w : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
|
|
102
|
+
threshold: critMaxLogCount,
|
|
103
|
+
evaluationPeriods: 3
|
|
104
|
+
});
|
|
105
|
+
if (((_x = props.criticalAlarmProps) === null || _x === void 0 ? void 0 : _x.notifyActions) !== undefined) {
|
|
106
|
+
this.criticalLogAlarm.addAlarmActions(props.criticalAlarmProps.notifyActions);
|
|
107
|
+
}
|
|
108
|
+
if (((_y = props.criticalAlarmProps) === null || _y === void 0 ? void 0 : _y.notifyTopics) !== undefined) {
|
|
109
|
+
this.criticalLogAlarm.addAlarmTopics(props.criticalAlarmProps.notifyTopics);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// Add warning log alarm
|
|
113
|
+
if (((_z = props.warningAlarmProps) === null || _z === void 0 ? void 0 : _z.maxLogCount) !== undefined && props.warningAlarmProps.maxLogCount > 0) {
|
|
114
|
+
this.warningLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsWarning', {
|
|
115
|
+
logGroup: this.function.logGroup,
|
|
116
|
+
pattern: (_1 = (_0 = props.warningAlarmProps) === null || _0 === void 0 ? void 0 : _0.metricLogPattern) !== null && _1 !== void 0 ? _1 : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
|
|
117
|
+
threshold: props.warningAlarmProps.maxLogCount,
|
|
118
|
+
evaluationPeriods: 3
|
|
119
|
+
});
|
|
120
|
+
if (((_2 = props.warningAlarmProps) === null || _2 === void 0 ? void 0 : _2.notifyActions) !== undefined) {
|
|
121
|
+
this.warningLogAlarm.addAlarmActions(props.warningAlarmProps.notifyActions);
|
|
122
|
+
}
|
|
123
|
+
if (((_3 = props.warningAlarmProps) === null || _3 === void 0 ? void 0 : _3.notifyTopics) !== undefined) {
|
|
124
|
+
this.warningLogAlarm.addAlarmTopics(props.warningAlarmProps.notifyTopics);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.PythonFunction = PythonFunction;
|
|
130
|
+
PythonFunction.DEFAULT_LOG_METRIC_PATTERN = '"[ERROR]"';
|
|
131
|
+
PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN = '\\\[ERROR\\\]';
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0aG9uLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHl0aG9uLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVEQUFzRjtBQUN0RiwyQ0FBcUM7QUFDckMseUVBT21DO0FBQ25DLHlEQUE4QztBQUM5Qyw2Q0FBc0U7QUFDdEUseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2Q0FBNkM7QUFFN0MsK0VBQTZEO0FBQzdELHFDQUFzQztBQWlDdEMsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFTM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjs7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksNENBQWdCLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUN6RCxxQkFBcUIsRUFBRSxFQUFFO1lBQ3pCLG9CQUFvQixFQUFFO2dCQUNwQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsZUFBZSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2FBQ3JEO1lBQ0QsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLFFBQVEsR0FBZ0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RyxLQUFLLGNBQUUsS0FBSyxDQUFDLE9BQU8sMENBQUUsYUFBYSxtQ0FBRSxvQkFBTyxDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQ3JFLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsSUFBSSxFQUFFO29CQUNaLHlEQUF5RDtvQkFDekQseUJBQXlCO2lCQUMxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7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QUcsQ0FBQyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSx5QkFBUSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ3ZELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ2hDLE9BQU8sY0FBRSxLQUFLLENBQUMsaUJBQWlCLDBDQUFFLGdCQUFnQixtQ0FBRSxjQUFjLENBQUMsMEJBQTBCO2dCQUM3RixTQUFTLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVc7Z0JBQzlDLGlCQUFpQixFQUFFLENBQUM7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxPQUFBLEtBQUssQ0FBQyxpQkFBaUIsMENBQUUsYUFBYSxNQUFLLFNBQVMsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzdFO1lBQ0QsSUFBSSxPQUFBLEtBQUssQ0FBQyxpQkFBaUIsMENBQUUsWUFBWSxNQUFLLFNBQVMsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzNFO1NBQ0Y7SUFDSCxDQUFDOztBQWhJSCx3Q0FpSUM7QUEvSGlCLHlDQUEwQixHQUFHLFdBQVcsQ0FBQztBQUN6QywyQ0FBNEIsR0FBRyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1N0YW5kYXJkRnVuY3Rpb25Qcm9wc30gZnJvbSBcIi4vc3RhbmRhcmQtZnVuY3Rpb25cIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSwgVHJhY2luZ30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgRHVyYXRpb25UaHJlc2hvbGQsXG4gIEVycm9yQ291bnRUaHJlc2hvbGQsXG4gIEVycm9yUmF0ZVRocmVzaG9sZCwgSGlnaFRwc1RocmVzaG9sZCxcbiAgTGF0ZW5jeVRocmVzaG9sZCxcbiAgTG93VHBzVGhyZXNob2xkLCBNYXhBZ2VUaHJlc2hvbGQsXG4gIE1vbml0b3JpbmdGYWNhZGUsIFJ1bm5pbmdUYXNrQ291bnRUaHJlc2hvbGQsIFVzYWdlVGhyZXNob2xkXG59IGZyb20gXCJjZGstbW9uaXRvcmluZy1jb25zdHJ1Y3RzXCI7XG5pbXBvcnQge0xvZ0FsYXJtfSBmcm9tIFwiLi4vLi4vYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7QnVuZGxpbmdPcHRpb25zLCBCdW5kbGluZ091dHB1dCwgRHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHtJQWxhcm1BY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHtTbnNBY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zXCI7XG5pbXBvcnQge3RvQWxhcm1Qcm9wc30gZnJvbSBcIi4vaGVscGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uRnVuY3Rpb25Qcm9wcyBleHRlbmRzIFN0YW5kYXJkRnVuY3Rpb25Qcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLiBNdXN0IGJlIG9uZSBvZiB0aGUgUHl0aG9uIHJ1bnRpbWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSdW50aW1lLlBZVEhPTl8zXzlcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbiBvbiB0aGUgZmlsZXN5c3RlbSB0aGUgTGFtYmRhIGFzc2V0cyBhcmUgZm91bmQuXG4gICAqXG4gICAqIEV4YW1wbGU6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdteWxhbWJkYScpXG4gICAqL1xuICByZWFkb25seSBlbnRyeTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEZpbGUgY29udGFpbmluZyB0aGUgaGFuZGxlci5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2luZGV4LnB5J1xuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXg/OiBzdHJpbmdcblxuICAvKipcbiAgICogRXhwb3J0ZWQgaGFuZGxlciBmdW5jdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAnaGFuZGxlcidcbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZXI/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFB5dGhvbkZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9MT0dfTUVUUklDX1BBVFRFUk4gPSAnXCJbRVJST1JdXCInO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9MT0dfSU5TSUdIVFNfUEFUVEVSTiA9ICdcXFxcXFxbRVJST1JcXFxcXFxdJztcbiAgcmVhZG9ubHkgZGVjbGFyZSBtb25pdG9yaW5nOiBNb25pdG9yaW5nRmFjYWRlXG4gIHJlYWRvbmx5IGRlY2xhcmUgZnVuY3Rpb246IEZ1bmN0aW9uO1xuICByZWFkb25seSBkZWNsYXJlIGNyaXRpY2FsTG9nQWxhcm06IExvZ0FsYXJtO1xuICByZWFkb25seSBkZWNsYXJlIHdhcm5pbmdMb2dBbGFybTogTG9nQWxhcm07XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB5dGhvbkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5tb25pdG9yaW5nID0gbmV3IE1vbml0b3JpbmdGYWNhZGUodGhpcywgJ01vbml0b3JpbmcnLCB7XG4gICAgICBtZXRyaWNGYWN0b3J5RGVmYXVsdHM6IHt9LFxuICAgICAgYWxhcm1GYWN0b3J5RGVmYXVsdHM6IHtcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGFsYXJtTmFtZVByZWZpeDogc2NvcGUubm9kZS5wYXRoLnJlcGxhY2UoL1xcLy9nLCAnLScpLFxuICAgICAgfSxcbiAgICAgIGRhc2hib2FyZEZhY3Rvcnk6IHByb3BzLmRhc2hib2FyZEZhY3RvcnlcbiAgICB9KTtcblxuICAgIGxldCBidW5kbGluZzogQnVuZGxpbmdPcHRpb25zIHwgdW5kZWZpbmVkID0gZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvcHMuZW50cnksICdyZXF1aXJlbWVudHMudHh0JykpID8ge1xuICAgICAgaW1hZ2U6IHByb3BzLnJ1bnRpbWU/LmJ1bmRsaW5nSW1hZ2U/P1J1bnRpbWUuUFlUSE9OXzNfOS5idW5kbGluZ0ltYWdlLFxuICAgICAgY29tbWFuZDogW1xuICAgICAgICAnYmFzaCcsICctYycsIFtcbiAgICAgICAgICAncGlwIGluc3RhbGwgLS10YXJnZXQgL2Fzc2V0LW91dHB1dC8gLXIgcmVxdWlyZW1lbnRzLnR4dCcsXG4gICAgICAgICAgJ2NwIC1yYSAqIC9hc3NldC1vdXRwdXQvJ1xuICAgICAgICBdLmpvaW4oJyYmJylcbiAgICAgIF0sXG4gICAgICBvdXRwdXRUeXBlOiBCdW5kbGluZ091dHB1dC5OT1RfQVJDSElWRUQsXG4gICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCBpZCwge1xuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZT8/UnVudGltZS5QWVRIT05fM185LFxuICAgICAgdHJhY2luZzogcHJvcHMudHJhY2luZz8/VHJhY2luZy5QQVNTX1RIUk9VR0gsXG4gICAgICBsb2dSZXRlbnRpb246IHByb3BzLmxvZ1JldGVudGlvbj8/bG9ncy5SZXRlbnRpb25EYXlzLlRIUkVFX0RBWVMsXG4gICAgICBhcmNoaXRlY3R1cmU6IHByb3BzLmFyY2hpdGVjdHVyZT8/QXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMudnBjU3VibmV0cyxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemU/Pzc2OCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXQ/P0R1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocHJvcHMuZW50cnksIHtidW5kbGluZ30pLFxuICAgICAgaGFuZGxlcjogKHByb3BzLmluZGV4Pz8naW5kZXgucHknKS5yZXBsYWNlKCcucHknLCAnJykgKyAnLicgKyAocHJvcHMuaGFuZGxlcj8/J2hhbmRsZXInKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdhcm5Qcm9wcyA9IHByb3BzLndhcm5pbmdBbGFybVByb3BzO1xuICAgIGNvbnN0IHdhcm5BY3Rpb25zOiBJQWxhcm1BY3Rpb25bXSA9IFtdO1xuICAgIHdhcm5Qcm9wcz8ubm90aWZ5QWN0aW9ucz8uZm9yRWFjaCgoYWN0aW9uKSA9PiB3YXJuQWN0aW9ucy5wdXNoKGFjdGlvbikpO1xuICAgIHdhcm5Qcm9wcz8ubm90aWZ5VG9waWNzPy5mb3JFYWNoKCh0b3BpYykgPT4gd2FybkFjdGlvbnMucHVzaChuZXcgU25zQWN0aW9uKHRvcGljKSkpO1xuICAgIGNvbnN0IGNyaXRQcm9wcyA9IHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcztcbiAgICBjb25zdCBjcml0QWN0aW9uczogSUFsYXJtQWN0aW9uW10gPSBbXTtcbiAgICBjcml0UHJvcHM/Lm5vdGlmeUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gY3JpdEFjdGlvbnMucHVzaChhY3Rpb24pKTtcbiAgICBjcml0UHJvcHM/Lm5vdGlmeVRvcGljcz8uZm9yRWFjaCgodG9waWMpID0+IGNyaXRBY3Rpb25zLnB1c2gobmV3IFNuc0FjdGlvbih0b3BpYykpKTtcblxuICAgIHRoaXMubW9uaXRvcmluZy5tb25pdG9yTGFtYmRhRnVuY3Rpb24oe1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuZnVuY3Rpb24sXG4gICAgICBsYW1iZGFJbnNpZ2h0c0VuYWJsZWQ6IHRydWUsXG4gICAgICBhZGRUb0FsYXJtRGFzaGJvYXJkOiB0cnVlLFxuICAgICAgYWRkVG9EZXRhaWxEYXNoYm9hcmQ6IHRydWUsXG4gICAgICBhZGRUb1N1bW1hcnlEYXNoYm9hcmQ6IHRydWUsXG4gICAgICBhZGRMYXRlbmN5UDUwQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TGF0ZW5jeScsIHdhcm5Qcm9wcz8ucDUwTGF0ZW5jeSwgY3JpdFByb3BzPy5wNTBMYXRlbmN5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIExhdGVuY3lUaHJlc2hvbGQ+LFxuICAgICAgYWRkTGF0ZW5jeVA5MEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heExhdGVuY3knLCB3YXJuUHJvcHM/LnA5MExhdGVuY3ksIGNyaXRQcm9wcz8ucDkwTGF0ZW5jeSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBMYXRlbmN5VGhyZXNob2xkPixcbiAgICAgIGFkZExhdGVuY3lQOTlBbGFybTogdG9BbGFybVByb3BzKCdtYXhMYXRlbmN5Jywgd2FyblByb3BzPy5wOTlMYXRlbmN5LCBjcml0UHJvcHM/LnA5OUxhdGVuY3ksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTGF0ZW5jeVRocmVzaG9sZD4sXG4gICAgICBhZGRGYXVsdENvdW50QWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RXJyb3JDb3VudCcsIHdhcm5Qcm9wcz8ubWF4RmF1bHRzLCBjcml0UHJvcHM/Lm1heEZhdWx0cywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zLCB1bmRlZmluZWQsIDApIGFzIFJlY29yZDxzdHJpbmcsIEVycm9yQ291bnRUaHJlc2hvbGQ+LFxuICAgICAgYWRkRmF1bHRSYXRlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RXJyb3JSYXRlJywgd2FyblByb3BzPy5hdmdGYXVsdHMsIGNyaXRQcm9wcz8uYXZnRmF1bHRzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIEVycm9yUmF0ZVRocmVzaG9sZD4sXG4gICAgICBhZGRMb3dUcHNBbGFybTogdG9BbGFybVByb3BzKCdtaW5UcHMnLCB3YXJuUHJvcHM/Lm1pblRwcywgY3JpdFByb3BzPy5taW5UcHMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTG93VHBzVGhyZXNob2xkPixcbiAgICAgIGFkZEhpZ2hUcHNBbGFybTogdG9BbGFybVByb3BzKCdtYXhUcHMnLCB3YXJuUHJvcHM/Lm1heFRwcywgY3JpdFByb3BzPy5tYXhUcHMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgSGlnaFRwc1RocmVzaG9sZD4sXG4gICAgICBhZGRUaHJvdHRsZXNDb3VudEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heEVycm9yQ291bnQnLCB3YXJuUHJvcHM/Lm1heFRocm90dGxlcywgY3JpdFByb3BzPy5tYXhUaHJvdHRsZXMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCAwKSBhcyBSZWNvcmQ8c3RyaW5nLCBFcnJvckNvdW50VGhyZXNob2xkPixcbiAgICAgIGFkZFRocm90dGxlc1JhdGVBbGFybTogdG9BbGFybVByb3BzKCdtYXhFcnJvclJhdGUnLCB3YXJuUHJvcHM/LmF2Z1Rocm90dGxlcywgY3JpdFByb3BzPy5hdmdUaHJvdHRsZXMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgRXJyb3JSYXRlVGhyZXNob2xkPixcbiAgICAgIGFkZENvbmN1cnJlbnRFeGVjdXRpb25zQ291bnRBbGFybTogdG9BbGFybVByb3BzKCdtYXhSdW5uaW5nVGFza3MnLCB3YXJuUHJvcHM/Lm1heENvbmN1cnJlbnRFeGVjdXRpb25zLCBjcml0UHJvcHM/Lm1heENvbmN1cnJlbnRFeGVjdXRpb25zLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIFJ1bm5pbmdUYXNrQ291bnRUaHJlc2hvbGQ+LFxuICAgICAgYWRkTWF4SXRlcmF0b3JBZ2VBbGFybTogdG9BbGFybVByb3BzKCdtYXhBZ2VJbk1pbGxpcycsIHdhcm5Qcm9wcz8ubWF4SXRlcmF0b3JBZ2UsIGNyaXRQcm9wcz8ubWF4SXRlcmF0b3JBZ2UsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4QWdlVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ01heENwdVRvdGFsVGltZUFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heER1cmF0aW9uJywgd2FyblByb3BzPy5tYXhDcHVUaW1lLCBjcml0UHJvcHM/Lm1heENwdVRpbWUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgRHVyYXRpb25UaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nUDkwQ3B1VG90YWxUaW1lQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RHVyYXRpb24nLCB3YXJuUHJvcHM/LnA5MENwdVRpbWUsIGNyaXRQcm9wcz8ucDkwQ3B1VGltZSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBEdXJhdGlvblRocmVzaG9sZD4sXG4gICAgICBhZGRFbmhhbmNlZE1vbml0b3JpbmdBdmdDcHVUb3RhbFRpbWVBbGFybTogdG9BbGFybVByb3BzKCdtYXhEdXJhdGlvbicsIHdhcm5Qcm9wcz8uYXZnQ3B1VGltZSwgY3JpdFByb3BzPy5hdmdDcHVUaW1lLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzICBSZWNvcmQ8c3RyaW5nLCBEdXJhdGlvblRocmVzaG9sZD4sXG4gICAgICBhZGRFbmhhbmNlZE1vbml0b3JpbmdNYXhNZW1vcnlVdGlsaXphdGlvbkFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heFVzYWdlUGVyY2VudCcsIHdhcm5Qcm9wcz8ubWF4TWVtb3J5LCBjcml0UHJvcHM/Lm1heE1lbW9yeSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyAgUmVjb3JkPHN0cmluZywgVXNhZ2VUaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nUDkwTWVtb3J5VXRpbGl6YXRpb25BbGFybTogdG9BbGFybVByb3BzKCdtYXhVc2FnZVBlcmNlbnQnLCB3YXJuUHJvcHM/LnA5ME1lbW9yeSwgY3JpdFByb3BzPy5wOTBNZW1vcnksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgVXNhZ2VUaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nQXZnTWVtb3J5VXRpbGl6YXRpb25BbGFybTogdG9BbGFybVByb3BzKCdtYXhVc2FnZVBlcmNlbnQnLCB3YXJuUHJvcHM/LmF2Z01lbW9yeSwgY3JpdFByb3BzPy5hdmdNZW1vcnksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgVXNhZ2VUaHJlc2hvbGQ+LFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGxvZyBtb25pdG9yaW5nIHRvIGRhc2hib2FyZFxuICAgIGxldCBjcml0TWF4TG9nQ291bnQgPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM/Lm1heExvZ0NvdW50Pz8xXG4gICAgbGV0IHBhdHRlcm4gPSAnJztcbiAgICBpZiAoY3JpdE1heExvZ0NvdW50ID4gMCkge1xuICAgICAgcGF0dGVybiA9IHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8uZGFzaGJvYXJkTG9nUGF0dGVybj8/UHl0aG9uRnVuY3Rpb24uREVGQVVMVF9MT0dfSU5TSUdIVFNfUEFUVEVSTlxuICAgIH1cbiAgICBpZiAocHJvcHMud2FybmluZ0FsYXJtUHJvcHM/Lm1heExvZ0NvdW50ICE9PSB1bmRlZmluZWQgJiYgcGF0dGVybiAhPT0gcHJvcHMud2FybmluZ0FsYXJtUHJvcHMuZGFzaGJvYXJkTG9nUGF0dGVybikge1xuICAgICAgcGF0dGVybiArPSAocGF0dGVybiAhPT0gJycgPyAnfCcgOiAnJykgKyBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5kYXNoYm9hcmRMb2dQYXR0ZXJuXG4gICAgfVxuICAgIGlmIChwYXR0ZXJuICE9PSAnJykge1xuICAgICAgdGhpcy5tb25pdG9yaW5nLm1vbml0b3JMb2coe1xuICAgICAgICBsb2dHcm91cE5hbWU6IHRoaXMuZnVuY3Rpb24ubG9nR3JvdXAubG9nR3JvdXBOYW1lLFxuICAgICAgICBwYXR0ZXJuLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGNyaXRpY2FsIGxvZyBhbGFybVxuICAgIGlmIChjcml0TWF4TG9nQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmNyaXRpY2FsTG9nQWxhcm0gPSBuZXcgTG9nQWxhcm0odGhpcywgJ0xvZ3NDcml0aWNhbCcsIHtcbiAgICAgICAgbG9nR3JvdXA6IHRoaXMuZnVuY3Rpb24ubG9nR3JvdXAsXG4gICAgICAgIHBhdHRlcm46IHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8ubWV0cmljTG9nUGF0dGVybj8/UHl0aG9uRnVuY3Rpb24uREVGQVVMVF9MT0dfTUVUUklDX1BBVFRFUk4sXG4gICAgICAgIHRocmVzaG9sZDogY3JpdE1heExvZ0NvdW50LFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogM1xuICAgICAgfSk7XG4gICAgICBpZiAocHJvcHMuY3JpdGljYWxBbGFybVByb3BzPy5ub3RpZnlBY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jcml0aWNhbExvZ0FsYXJtLmFkZEFsYXJtQWN0aW9ucyhwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHMubm90aWZ5QWN0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY3JpdGljYWxBbGFybVByb3BzPy5ub3RpZnlUb3BpY3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNyaXRpY2FsTG9nQWxhcm0uYWRkQWxhcm1Ub3BpY3MocHJvcHMuY3JpdGljYWxBbGFybVByb3BzLm5vdGlmeVRvcGljcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIHdhcm5pbmcgbG9nIGFsYXJtXG4gICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5tYXhMb2dDb3VudCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLndhcm5pbmdBbGFybVByb3BzLm1heExvZ0NvdW50ID4gMCkge1xuICAgICAgdGhpcy53YXJuaW5nTG9nQWxhcm0gPSBuZXcgTG9nQWxhcm0odGhpcywgJ0xvZ3NXYXJuaW5nJywge1xuICAgICAgICBsb2dHcm91cDogdGhpcy5mdW5jdGlvbi5sb2dHcm91cCxcbiAgICAgICAgcGF0dGVybjogcHJvcHMud2FybmluZ0FsYXJtUHJvcHM/Lm1ldHJpY0xvZ1BhdHRlcm4/P1B5dGhvbkZ1bmN0aW9uLkRFRkFVTFRfTE9HX01FVFJJQ19QQVRURVJOLFxuICAgICAgICB0aHJlc2hvbGQ6IHByb3BzLndhcm5pbmdBbGFybVByb3BzLm1heExvZ0NvdW50LFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogM1xuICAgICAgfSk7XG4gICAgICBpZiAocHJvcHMud2FybmluZ0FsYXJtUHJvcHM/Lm5vdGlmeUFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLndhcm5pbmdMb2dBbGFybS5hZGRBbGFybUFjdGlvbnMocHJvcHMud2FybmluZ0FsYXJtUHJvcHMubm90aWZ5QWN0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMud2FybmluZ0FsYXJtUHJvcHM/Lm5vdGlmeVRvcGljcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZ0FsYXJtLmFkZEFsYXJtVG9waWNzKHByb3BzLndhcm5pbmdBbGFybVByb3BzLm5vdGlmeVRvcGljcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import { IAlarmAction } from 'aws-cdk-lib/aws-cloudwatch';
|
|
9
|
-
import { LogAlarm } from '../../aws-cloudwatch';
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { ITopic } from "aws-cdk-lib/aws-sns";
|
|
3
|
+
import { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
|
|
4
|
+
import { Architecture, Tracing } from "aws-cdk-lib/aws-lambda";
|
|
5
|
+
import * as logs from "aws-cdk-lib/aws-logs";
|
|
6
|
+
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
7
|
+
import { IDashboardFactory } from "cdk-monitoring-constructs";
|
|
10
8
|
export interface StandardFunctionAlarmProps {
|
|
11
9
|
/**
|
|
12
10
|
* Maximum 50th percentile latency
|
|
@@ -84,11 +82,11 @@ export interface StandardFunctionAlarmProps {
|
|
|
84
82
|
/**
|
|
85
83
|
* Topics to send alarm notifications
|
|
86
84
|
*/
|
|
87
|
-
readonly notifyTopics?: [
|
|
85
|
+
readonly notifyTopics?: ITopic[];
|
|
88
86
|
/**
|
|
89
87
|
* Actions to send alarm notifications
|
|
90
88
|
*/
|
|
91
|
-
readonly notifyActions?: [
|
|
89
|
+
readonly notifyActions?: IAlarmAction[];
|
|
92
90
|
/**
|
|
93
91
|
* Log pattern to match for metrics.
|
|
94
92
|
*
|
|
@@ -180,38 +178,3 @@ export interface StandardFunctionProps {
|
|
|
180
178
|
*/
|
|
181
179
|
readonly warningAlarmProps?: StandardFunctionAlarmProps;
|
|
182
180
|
}
|
|
183
|
-
export interface PythonFunctionProps extends StandardFunctionProps {
|
|
184
|
-
/**
|
|
185
|
-
* The runtime environment for the Lambda function. Must be one of the Python runtimes.
|
|
186
|
-
*
|
|
187
|
-
* @default Runtime.PYTHON_3_9
|
|
188
|
-
*/
|
|
189
|
-
readonly runtime?: Runtime;
|
|
190
|
-
/**
|
|
191
|
-
* Location on the filesystem the Lambda assets are found.
|
|
192
|
-
*
|
|
193
|
-
* Example: path.join(__dirname, '..', 'mylambda')
|
|
194
|
-
*/
|
|
195
|
-
readonly entry: string;
|
|
196
|
-
/**
|
|
197
|
-
* File containing the handler.
|
|
198
|
-
*
|
|
199
|
-
* @default 'index.py'
|
|
200
|
-
*/
|
|
201
|
-
readonly index?: string;
|
|
202
|
-
/**
|
|
203
|
-
* Exported handler function
|
|
204
|
-
*
|
|
205
|
-
* @default 'handler'
|
|
206
|
-
*/
|
|
207
|
-
readonly handler?: string;
|
|
208
|
-
}
|
|
209
|
-
export declare class PythonFunction extends Construct {
|
|
210
|
-
static readonly DEFAULT_LOG_METRIC_PATTERN = "\"[ERROR]\"";
|
|
211
|
-
static readonly DEFAULT_LOG_INSIGHTS_PATTERN = "\\[ERROR\\]";
|
|
212
|
-
readonly monitoring: MonitoringFacade;
|
|
213
|
-
readonly function: Function;
|
|
214
|
-
readonly criticalLogAlarm: LogAlarm;
|
|
215
|
-
readonly warningLogAlarm: LogAlarm;
|
|
216
|
-
constructor(scope: Construct, id: string, props: PythonFunctionProps);
|
|
217
|
-
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFuZGFyZC1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEdXJhdGlvbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0lUb3BpY30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zbnNcIjtcbmltcG9ydCB7SUFsYXJtQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBSdW50aW1lLCBUcmFjaW5nfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtJRGFzaGJvYXJkRmFjdG9yeX0gZnJvbSBcImNkay1tb25pdG9yaW5nLWNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZEZ1bmN0aW9uQWxhcm1Qcm9wcyB7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gNTB0aCBwZXJjZW50aWxlIGxhdGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHA1MExhdGVuY3k/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSA5MHRoIHBlcmNlbnRpbGUgbGF0ZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgcDkwTGF0ZW5jeT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIDk5dGggcGVyY2VudGlsZSBsYXRlbmN5XG4gICAqL1xuICByZWFkb25seSBwOTlMYXRlbmN5PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGZhdWx0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSBtYXhGYXVsdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF2ZXJhZ2UgbnVtYmVyIG9mIGZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgYXZnRmF1bHRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWluVHBzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHRyYW5zYWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4VHBzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiB0aHJvdHRsZXNcbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VGhyb3R0bGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBdmVyYWdlIG51bWJlciBvZiB0aHJvdHRsZXNcbiAgICovXG4gIHJlYWRvbmx5IGF2Z1Rocm90dGxlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBjb25jdXJyZW50IGV4ZWN1dGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbnRFeGVjdXRpb25zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdGltZSBkYXRhIHdhaXRzIGJlZm9yZSBiZWluZyBwcm9jZXNzZWQgYnkgdGhlIGZ1bmN0aW9uLlxuICAgKiBTZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wcmVtaXVtc3VwcG9ydC9rbm93bGVkZ2UtY2VudGVyL2xhbWJkYS1pdGVyYXRvci1hZ2UvXG4gICAqL1xuICByZWFkb25seSBtYXhJdGVyYXRvckFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBhbW91bnQgb2YgQ1BVIHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IG1heENwdVRpbWU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogOTB0aCBwZXJjZW50aWxlIENQVSB0aW1lXG4gICAqL1xuICByZWFkb25seSBwOTBDcHVUaW1lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEF2ZXJhZ2UgQ1BVIHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IGF2Z0NwdVRpbWU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5XG4gICAqL1xuICByZWFkb25seSBtYXhNZW1vcnk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIDkwdGggcGVyY2VudGlsZSBtZW1vcnlcbiAgICovXG4gIHJlYWRvbmx5IHA5ME1lbW9yeT86IG51bWJlcjtcblxuICAvKipcbiAgICogQXZlcmFnZSBtZW1vcnlcbiAgICovXG4gIHJlYWRvbmx5IGF2Z01lbW9yeT86IG51bWJlcjtcblxuICAvKipcbiAgICogVG9waWNzIHRvIHNlbmQgYWxhcm0gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZ5VG9waWNzPzogSVRvcGljW107XG5cbiAgLyoqXG4gICAqIEFjdGlvbnMgdG8gc2VuZCBhbGFybSBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZnlBY3Rpb25zPzogSUFsYXJtQWN0aW9uW107XG5cbiAgLyoqXG4gICAqIExvZyBwYXR0ZXJuIHRvIG1hdGNoIGZvciBtZXRyaWNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnXFxcXFxcW0VSUk9SXFxcXFxcXSdcbiAgICovXG4gIHJlYWRvbmx5IG1ldHJpY0xvZ1BhdHRlcm4/OiBzdHJpbmdcblxuICAvKipcbiAgICogTG9nIHBhdHRlcm4gdG8gbWF0Y2ggZm9yIHRoZSBkYXNoYm9hcmRcbiAgICpcbiAgICogQGRlZmF1bHQgJ1wiW0VSUk9SXVwiJ1xuICAgKi9cbiAgcmVhZG9ubHkgZGFzaGJvYXJkTG9nUGF0dGVybj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBsb2cgZXZlbnRzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwIGZvciBDcml0aWNhbCBBbGFybVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TG9nQ291bnQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZEZ1bmN0aW9uUHJvcHMge1xuXG4gIC8qKlxuICAgKiBFbmFibGUgQVdTIFgtUmF5IFRyYWNpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRyYWNpbmcuUEFTU19USFJPVUdIXG4gICAqL1xuICByZWFkb25seSB0cmFjaW5nPzogVHJhY2luZztcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkYXlzIHRvIHJldGFpbiBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfREFZU1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIGFyY2hpdGVjdHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLkFSTV82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgbGFtYmRhIG5ldHdvcmsgaW50ZXJmYWNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vdCBwbGFjZWQgaW4gYSBWUENcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbGFtYmRhIGluc2lkZSB0aGUgVlBDLiBPbmx5IHVzZWQgaWYgJ3ZwYycgaXMgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVlBDIGRlZmF1bHQgc3RyYXRlZ3kgaXMgdXNlZCBpZiBub3Qgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB2cGNTdWJuZXRzPzogZWMyLlN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogQW1vdW50IG9mIG1lbW9yeSBpbiBNQiBhbmQgcHJvcG9ydGlvbmFsbHkgQ1BVIHBvd2VyIHRvIGFsbG9jYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCA3NjhcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGV4ZWN1dGlvbiB0aW1lIChpbiBzZWNvbmRzKSBhZnRlciB3aGljaCB0aGUgTGFtYmRhIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzApXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBtYWtlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRGFzaGJvYXJkRmFjdG9yeSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIENsb3VkV2F0Y2ggZGFzaGJvYXJkcy5cbiAgICpcbiAgICogSWYgbm90IGRlZmluZWQsIGRhc2hib2FyZHMgYXJlIG5vdCBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBkYXNoYm9hcmRGYWN0b3J5PzogSURhc2hib2FyZEZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZHMgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogSWYgbm8gcHJvcGVydGllcyBhcmUgcHJvdmlkZWQsIGEgc2V0IG9mIGRlZmF1bHQgYWxhcm1zIGFyZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JpdGljYWxBbGFybVByb3BzPzogU3RhbmRhcmRGdW5jdGlvbkFsYXJtUHJvcHM7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZCBmb3Igd2FybmluZyBhbGFybXMuXG4gICAqXG4gICAqIElmIG5vIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkLCBhIHNldCBvZiBkZWZhdWx0IGFsYXJtcyBhcmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdBbGFybVByb3BzPzogU3RhbmRhcmRGdW5jdGlvbkFsYXJtUHJvcHM7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
package/aws-sqs/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./lib"), exports);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './standard-queue';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./standard-queue"), exports);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLXF1ZXVlJztcbiJdfQ==
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { Duration } from "aws-cdk-lib";
|
|
3
|
+
import { Queue } from "aws-cdk-lib/aws-sqs";
|
|
4
|
+
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
5
|
+
import { IAlarmAction } from "aws-cdk-lib/aws-cloudwatch";
|
|
6
|
+
import { ITopic } from 'aws-cdk-lib/aws-sns';
|
|
7
|
+
import * as iam from "aws-cdk-lib/aws-iam";
|
|
8
|
+
import { MonitoringFacade, IDashboardFactory } from "cdk-monitoring-constructs";
|
|
9
|
+
/**
|
|
10
|
+
* Alarm properties for StandardQueue
|
|
11
|
+
*/
|
|
12
|
+
export interface StandardQueueAlarmProps {
|
|
13
|
+
/**
|
|
14
|
+
* Minimum number of messages visible.
|
|
15
|
+
*/
|
|
16
|
+
readonly minSize?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Maximum number of messages visible.
|
|
19
|
+
*/
|
|
20
|
+
readonly maxSize?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Maximum approximate age of the oldest message in the queue.
|
|
23
|
+
*
|
|
24
|
+
* @default Duration.minutes(15) for critical alarm
|
|
25
|
+
*/
|
|
26
|
+
readonly maxAge?: Duration;
|
|
27
|
+
/**
|
|
28
|
+
* Maximum time to drain the queue.
|
|
29
|
+
*/
|
|
30
|
+
readonly maxTimeToDrain?: Duration;
|
|
31
|
+
/**
|
|
32
|
+
* Minimum number of incoming messages.
|
|
33
|
+
*/
|
|
34
|
+
readonly minIncoming?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Maximum number of incoming messages.
|
|
37
|
+
*/
|
|
38
|
+
readonly maxIncoming?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Maximum number of visible messages in the dead-letter queue
|
|
41
|
+
*
|
|
42
|
+
* @default 0 for critical alarm
|
|
43
|
+
*/
|
|
44
|
+
readonly deadLetterQueueMaxSize?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Maximum age of the oldest messages in the dead-letter queue
|
|
47
|
+
*/
|
|
48
|
+
readonly deadLetterQueueMaxAge?: Duration;
|
|
49
|
+
/**
|
|
50
|
+
* Maximum number of incoming messages in the dead-letter queue
|
|
51
|
+
*/
|
|
52
|
+
readonly deadLetterQueueMaxIncoming?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Topics to send alarm notifications
|
|
55
|
+
*/
|
|
56
|
+
readonly notifyTopics?: [ITopic];
|
|
57
|
+
/**
|
|
58
|
+
* Actions to send alarm notifications
|
|
59
|
+
*/
|
|
60
|
+
readonly notifyActions?: [IAlarmAction];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Properties for a StandardQueue
|
|
64
|
+
*/
|
|
65
|
+
export interface StandardQueueProps {
|
|
66
|
+
/**
|
|
67
|
+
* The number of seconds Amazon SQS retains a message. Value must be between
|
|
68
|
+
* 60 and 1209600 seconds (14 days).
|
|
69
|
+
*
|
|
70
|
+
* @default Duration.seconds(1209600)
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
readonly retentionPeriod?: Duration;
|
|
74
|
+
/**
|
|
75
|
+
* The number of seconds a consumer has to handle the message and delete it
|
|
76
|
+
* from the queue before it becomes visible again for another consumer. Value
|
|
77
|
+
* must be between 0 and 43200 seconds (12 hours).
|
|
78
|
+
*
|
|
79
|
+
* @default Duration.seconds(30)
|
|
80
|
+
*/
|
|
81
|
+
readonly visibilityTimeout?: Duration;
|
|
82
|
+
/**
|
|
83
|
+
* The KMS key to use for encryption. If not set, the AWS master key for SQS
|
|
84
|
+
* will be used.
|
|
85
|
+
*/
|
|
86
|
+
readonly encryptionMasterKey?: kms.IKey;
|
|
87
|
+
/**
|
|
88
|
+
* The length of time that Amazon SQS reuses a data key before calling KMS again.
|
|
89
|
+
* This value affects pricing as you are charged for KMS usage. Value must be
|
|
90
|
+
* between 60 and 86,400 seconds (24 hours).
|
|
91
|
+
*
|
|
92
|
+
* @default Duration.minutes(15)
|
|
93
|
+
*/
|
|
94
|
+
readonly dataKeyReuse?: Duration;
|
|
95
|
+
/**
|
|
96
|
+
* The maximum number of times a message can be unsuccessful before being moved
|
|
97
|
+
* to the dead-letter queue. Set this value to -1 to disable the dead-letter queue.
|
|
98
|
+
*
|
|
99
|
+
* @default 3
|
|
100
|
+
*/
|
|
101
|
+
readonly maxReceiveCount?: number;
|
|
102
|
+
/**
|
|
103
|
+
* The DashboardFactory to use when generating CloudWatch dashboards.
|
|
104
|
+
*
|
|
105
|
+
* If not defined, dashboards are not generated.
|
|
106
|
+
*/
|
|
107
|
+
readonly dashboardFactory?: IDashboardFactory;
|
|
108
|
+
/**
|
|
109
|
+
* Alarm thresholds for critical alarms.
|
|
110
|
+
*
|
|
111
|
+
* If no properties are provided, a set of default alarms are created.
|
|
112
|
+
*/
|
|
113
|
+
readonly criticalAlarmProps?: StandardQueueAlarmProps;
|
|
114
|
+
/**
|
|
115
|
+
* Alarm threshold for warning alarms.
|
|
116
|
+
*
|
|
117
|
+
* If no properties are provided, a set of default alarms are created.
|
|
118
|
+
*/
|
|
119
|
+
readonly warningAlarmProps?: StandardQueueAlarmProps;
|
|
120
|
+
}
|
|
121
|
+
export declare class StandardQueue extends Construct {
|
|
122
|
+
static readonly DEFAULT_MAX_RECEIVE_COUNT = 3;
|
|
123
|
+
static readonly DEFAULT_RETENTION_PERIOD: Duration;
|
|
124
|
+
readonly monitoring: MonitoringFacade;
|
|
125
|
+
readonly queue: Queue;
|
|
126
|
+
readonly deadLetterQueue: Queue;
|
|
127
|
+
constructor(scope: Construct, id: string, props?: StandardQueueProps);
|
|
128
|
+
grantConsumeMessages(grantee: iam.IGrantable): iam.Grant;
|
|
129
|
+
grantSendMessages(grantee: iam.IGrantable): iam.Grant;
|
|
130
|
+
grantPurge(grantee: iam.IGrantable): iam.Grant;
|
|
131
|
+
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
132
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StandardQueue = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const aws_sqs_1 = require("aws-cdk-lib/aws-sqs");
|
|
7
|
+
const cdk_monitoring_constructs_1 = require("cdk-monitoring-constructs");
|
|
8
|
+
const aws_monitoring_1 = require("../../aws-monitoring");
|
|
9
|
+
const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
10
|
+
function toAlarmProps(prop, warningThreshold, criticalThreshold, warningAlarmActions, criticalAlarmActions, warningDefaultThreshold, criticalDefaultThreshold) {
|
|
11
|
+
let alarmProps = {};
|
|
12
|
+
if (criticalThreshold !== undefined) {
|
|
13
|
+
alarmProps.Critical = {
|
|
14
|
+
[prop]: criticalThreshold,
|
|
15
|
+
actionsEnabled: true,
|
|
16
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
else if (criticalDefaultThreshold !== undefined) {
|
|
20
|
+
alarmProps.Critical = {
|
|
21
|
+
[prop]: criticalDefaultThreshold,
|
|
22
|
+
actionsEnabled: true,
|
|
23
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (warningThreshold !== undefined) {
|
|
27
|
+
alarmProps.Warning = {
|
|
28
|
+
[prop]: warningThreshold,
|
|
29
|
+
actionsEnabled: true,
|
|
30
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else if (warningDefaultThreshold !== undefined) {
|
|
34
|
+
alarmProps.Warning = {
|
|
35
|
+
[prop]: warningDefaultThreshold,
|
|
36
|
+
actionsEnabled: true,
|
|
37
|
+
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return Object.keys(alarmProps).length > 0 ? alarmProps : undefined;
|
|
41
|
+
}
|
|
42
|
+
class StandardQueue extends constructs_1.Construct {
|
|
43
|
+
constructor(scope, id, props = {}) {
|
|
44
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
45
|
+
super(scope, id);
|
|
46
|
+
this.monitoring = new cdk_monitoring_constructs_1.MonitoringFacade(this, 'Monitoring', {
|
|
47
|
+
metricFactoryDefaults: {},
|
|
48
|
+
alarmFactoryDefaults: {
|
|
49
|
+
actionsEnabled: true,
|
|
50
|
+
alarmNamePrefix: scope.node.path.replace(/\//g, '-')
|
|
51
|
+
},
|
|
52
|
+
dashboardFactory: props.dashboardFactory
|
|
53
|
+
});
|
|
54
|
+
const encryption = props.encryptionMasterKey === undefined ? aws_sqs_1.QueueEncryption.KMS_MANAGED : aws_sqs_1.QueueEncryption.KMS;
|
|
55
|
+
// Setup dead-letter queue
|
|
56
|
+
const maxReceiveCount = (_a = props.maxReceiveCount) !== null && _a !== void 0 ? _a : StandardQueue.DEFAULT_MAX_RECEIVE_COUNT;
|
|
57
|
+
if (maxReceiveCount > 0) {
|
|
58
|
+
this.deadLetterQueue = new aws_sqs_1.Queue(this, 'DeadLetter', {
|
|
59
|
+
encryption,
|
|
60
|
+
encryptionMasterKey: props.encryptionMasterKey,
|
|
61
|
+
dataKeyReuse: (_b = props.dataKeyReuse) !== null && _b !== void 0 ? _b : aws_cdk_lib_1.Duration.minutes(15),
|
|
62
|
+
retentionPeriod: StandardQueue.DEFAULT_RETENTION_PERIOD
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Setup queue
|
|
66
|
+
this.queue = new aws_sqs_1.Queue(this, id, {
|
|
67
|
+
encryption,
|
|
68
|
+
encryptionMasterKey: props.encryptionMasterKey,
|
|
69
|
+
dataKeyReuse: (_c = props.dataKeyReuse) !== null && _c !== void 0 ? _c : aws_cdk_lib_1.Duration.minutes(15),
|
|
70
|
+
retentionPeriod: (_d = props.retentionPeriod) !== null && _d !== void 0 ? _d : StandardQueue.DEFAULT_RETENTION_PERIOD,
|
|
71
|
+
deadLetterQueue: props.maxReceiveCount === undefined || props.maxReceiveCount <= 0 ? undefined : {
|
|
72
|
+
maxReceiveCount: props.maxReceiveCount,
|
|
73
|
+
queue: this.deadLetterQueue
|
|
74
|
+
},
|
|
75
|
+
visibilityTimeout: (_e = props.visibilityTimeout) !== null && _e !== void 0 ? _e : aws_cdk_lib_1.Duration.seconds(30),
|
|
76
|
+
});
|
|
77
|
+
const warnProps = props.warningAlarmProps;
|
|
78
|
+
const warnActions = [];
|
|
79
|
+
(_f = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyActions) === null || _f === void 0 ? void 0 : _f.forEach((action) => warnActions.push(action));
|
|
80
|
+
(_g = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyTopics) === null || _g === void 0 ? void 0 : _g.forEach((topic) => warnActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
81
|
+
const critProps = props.criticalAlarmProps;
|
|
82
|
+
const critActions = [];
|
|
83
|
+
(_h = critProps === null || critProps === void 0 ? void 0 : critProps.notifyActions) === null || _h === void 0 ? void 0 : _h.forEach((action) => critActions.push(action));
|
|
84
|
+
(_j = critProps === null || critProps === void 0 ? void 0 : critProps.notifyTopics) === null || _j === void 0 ? void 0 : _j.forEach((topic) => critActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
85
|
+
if (maxReceiveCount > 0) {
|
|
86
|
+
this.monitoring.monitorSqsQueueWithDlq({
|
|
87
|
+
queue: this.queue,
|
|
88
|
+
deadLetterQueue: this.deadLetterQueue,
|
|
89
|
+
addQueueMinSizeAlarm: toAlarmProps('minMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minSize, critProps === null || critProps === void 0 ? void 0 : critProps.minSize, warnActions, critActions),
|
|
90
|
+
addQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxSize, critProps === null || critProps === void 0 ? void 0 : critProps.maxSize, warnActions, critActions),
|
|
91
|
+
addQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_k = warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxAge) === null || _k === void 0 ? void 0 : _k.toSeconds(), (_l = critProps === null || critProps === void 0 ? void 0 : critProps.maxAge) === null || _l === void 0 ? void 0 : _l.toSeconds(), warnActions, critActions, undefined, aws_cdk_lib_1.Duration.minutes(15).toSeconds()),
|
|
92
|
+
addQueueMaxTimeToDrainMessagesAlarm: toAlarmProps('maxTimeToDrain', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTimeToDrain, critProps === null || critProps === void 0 ? void 0 : critProps.maxTimeToDrain, warnActions, critActions),
|
|
93
|
+
addQueueMinIncomingMessagesAlarm: toAlarmProps('minIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.minIncoming, warnActions, critActions),
|
|
94
|
+
addQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.maxIncoming, warnActions, critActions),
|
|
95
|
+
addDeadLetterQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxSize, critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxSize, warnActions, critActions, undefined, 0),
|
|
96
|
+
addDeadLetterQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_m = warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxAge) === null || _m === void 0 ? void 0 : _m.toSeconds(), (_o = critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxAge) === null || _o === void 0 ? void 0 : _o.toSeconds(), warnActions, critActions),
|
|
97
|
+
addDeadLetterQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.deadLetterQueueMaxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.deadLetterQueueMaxIncoming, warnActions, critActions),
|
|
98
|
+
addDeadLetterQueueToSummaryDashboard: this.queue !== undefined,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.monitoring.monitorSqsQueue({
|
|
103
|
+
queue: this.queue,
|
|
104
|
+
addQueueMinSizeAlarm: toAlarmProps('minMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minSize, critProps === null || critProps === void 0 ? void 0 : critProps.minSize, warnActions, critActions),
|
|
105
|
+
addQueueMaxSizeAlarm: toAlarmProps('maxMessageCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxSize, critProps === null || critProps === void 0 ? void 0 : critProps.maxSize, warnActions, critActions),
|
|
106
|
+
addQueueMaxMessageAgeAlarm: toAlarmProps('maxAgeInSeconds', (_p = warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxAge) === null || _p === void 0 ? void 0 : _p.toSeconds(), (_q = critProps === null || critProps === void 0 ? void 0 : critProps.maxAge) === null || _q === void 0 ? void 0 : _q.toSeconds(), warnActions, critActions, undefined, aws_cdk_lib_1.Duration.minutes(15).toSeconds()),
|
|
107
|
+
addQueueMaxTimeToDrainMessagesAlarm: toAlarmProps('maxTimeToDrain', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTimeToDrain, critProps === null || critProps === void 0 ? void 0 : critProps.maxTimeToDrain, warnActions, critActions),
|
|
108
|
+
addQueueMinIncomingMessagesAlarm: toAlarmProps('minIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.minIncoming, warnActions, critActions),
|
|
109
|
+
addQueueMaxIncomingMessagesAlarm: toAlarmProps('maxIncomingMessagesCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIncoming, critProps === null || critProps === void 0 ? void 0 : critProps.maxIncoming, warnActions, critActions)
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
grantConsumeMessages(grantee) {
|
|
114
|
+
return this.queue.grantConsumeMessages(grantee);
|
|
115
|
+
}
|
|
116
|
+
grantSendMessages(grantee) {
|
|
117
|
+
return this.queue.grantSendMessages(grantee);
|
|
118
|
+
}
|
|
119
|
+
grantPurge(grantee) {
|
|
120
|
+
return this.queue.grantPurge(grantee);
|
|
121
|
+
}
|
|
122
|
+
grant(grantee, ...actions) {
|
|
123
|
+
return this.queue.grant(grantee, ...actions);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.StandardQueue = StandardQueue;
|
|
127
|
+
StandardQueue.DEFAULT_MAX_RECEIVE_COUNT = 3;
|
|
128
|
+
StandardQueue.DEFAULT_RETENTION_PERIOD = aws_cdk_lib_1.Duration.seconds(1209600);
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtcXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFuZGFyZC1xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBcUM7QUFDckMsNkNBQXFDO0FBQ3JDLGlEQUEyRDtBQUszRCx5RUFTbUM7QUFDbkMseURBQWtFO0FBQ2xFLCtFQUE2RDtBQXVJN0QsU0FBUyxZQUFZLENBQ25CLElBQVksRUFDWixnQkFBb0MsRUFDcEMsaUJBQXFDLEVBQ3JDLG1CQUFvQyxFQUNwQyxvQkFBcUMsRUFDckMsdUJBQTJDLEVBQzNDLHdCQUE0QztJQUU1QyxJQUFJLFVBQVUsR0FBeUMsRUFBRSxDQUFBO0lBQ3pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUI7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztTQUNsRixDQUFBO0tBQ0Y7U0FBTSxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtRQUNqRCxVQUFVLENBQUMsUUFBUSxHQUFHO1lBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2hDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGNBQWMsRUFBRSxJQUFJLDZDQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFDLENBQUM7U0FDbEYsQ0FBQTtLQUNGO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUNuQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQjtZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVBQUUsSUFBSSw2Q0FBNEIsQ0FBQyxFQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBQyxDQUFDO1NBQ2pGLENB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R0gsc0NBbUdDO0FBakdpQix1Q0FBeUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsc0NBQXdCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7RHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtRdWV1ZSwgUXVldWVFbmNyeXB0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHtJQWxhcm1BY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHtJVG9waWN9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQsXG4gIE1heE1lc3NhZ2VBZ2VUaHJlc2hvbGQsXG4gIE1heE1lc3NhZ2VDb3VudFRocmVzaG9sZCxcbiAgTWF4VGltZVRvRHJhaW5UaHJlc2hvbGQsIE1pbkluY29taW5nTWVzc2FnZXNDb3VudFRocmVzaG9sZCxcbiAgTW9uaXRvcmluZ0ZhY2FkZSxcbiAgSURhc2hib2FyZEZhY3RvcnksXG4gIE1pbk1lc3NhZ2VDb3VudFRocmVzaG9sZCxcbiAgQ3VzdG9tQWxhcm1UaHJlc2hvbGRcbn0gZnJvbSBcImNkay1tb25pdG9yaW5nLWNvbnN0cnVjdHNcIjtcbmltcG9ydCB7U3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneX0gZnJvbSAnLi4vLi4vYXdzLW1vbml0b3JpbmcnO1xuaW1wb3J0IHtTbnNBY3Rpb259IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zXCI7XG5cbi8qKlxuICogQWxhcm0gcHJvcGVydGllcyBmb3IgU3RhbmRhcmRRdWV1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkUXVldWVBbGFybVByb3BzIHtcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgbWVzc2FnZXMgdmlzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IG1pblNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHZpc2libGUuXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFwcHJveGltYXRlIGFnZSBvZiB0aGUgb2xkZXN0IG1lc3NhZ2UgaW4gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KSBmb3IgY3JpdGljYWwgYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IG1heEFnZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIHRpbWUgdG8gZHJhaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4VGltZVRvRHJhaW4/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBtaW5JbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMuXG4gICAqL1xuICByZWFkb25seSBtYXhJbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgdmlzaWJsZSBtZXNzYWdlcyBpbiB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAgICpcbiAgICogQGRlZmF1bHQgMCBmb3IgY3JpdGljYWwgYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZU1heFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gYWdlIG9mIHRoZSBvbGRlc3QgbWVzc2FnZXMgaW4gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVNYXhBZ2U/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaW5jb21pbmcgbWVzc2FnZXMgaW4gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVNYXhJbmNvbWluZz86IG51bWJlcjtcblxuICAvKipcbiAgICogVG9waWNzIHRvIHNlbmQgYWxhcm0gbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZ5VG9waWNzPzogW0lUb3BpY107XG5cbiAgLyoqXG4gICAqIEFjdGlvbnMgdG8gc2VuZCBhbGFybSBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZnlBY3Rpb25zPzogW0lBbGFybUFjdGlvbl07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBTdGFuZGFyZFF1ZXVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmRRdWV1ZVByb3BzIHtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIEFtYXpvbiBTUVMgcmV0YWlucyBhIG1lc3NhZ2UuIFZhbHVlIG11c3QgYmUgYmV0d2VlblxuICAgKiA2MCBhbmQgMTIwOTYwMCBzZWNvbmRzICgxNCBkYXlzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygxMjA5NjAwKVxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uUGVyaW9kPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBhIGNvbnN1bWVyIGhhcyB0byBoYW5kbGUgdGhlIG1lc3NhZ2UgYW5kIGRlbGV0ZSBpdFxuICAgKiBmcm9tIHRoZSBxdWV1ZSBiZWZvcmUgaXQgYmVjb21lcyB2aXNpYmxlIGFnYWluIGZvciBhbm90aGVyIGNvbnN1bWVyLiBWYWx1ZVxuICAgKiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNDMyMDAgc2Vjb25kcyAoMTIgaG91cnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMwKVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eVRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdG8gdXNlIGZvciBlbmNyeXB0aW9uLiBJZiBub3Qgc2V0LCB0aGUgQVdTIG1hc3RlciBrZXkgZm9yIFNRU1xuICAgKiB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uTWFzdGVyS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBsZW5ndGggb2YgdGltZSB0aGF0IEFtYXpvbiBTUVMgcmV1c2VzIGEgZGF0YSBrZXkgYmVmb3JlIGNhbGxpbmcgS01TIGFnYWluLlxuICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgcHJpY2luZyBhcyB5b3UgYXJlIGNoYXJnZWQgZm9yIEtNUyB1c2FnZS4gVmFsdWUgbXVzdCBiZVxuICAgKiBiZXR3ZWVuIDYwIGFuZCA4Niw0MDAgc2Vjb25kcyAoMjQgaG91cnMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5taW51dGVzKDE1KVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YUtleVJldXNlPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBiZWZvcmUgYmVpbmcgbW92ZWRcbiAgICogdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLiBTZXQgdGhpcyB2YWx1ZSB0byAtMSB0byBkaXNhYmxlIHRoZSBkZWFkLWxldHRlciBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4UmVjZWl2ZUNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRGFzaGJvYXJkRmFjdG9yeSB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIENsb3VkV2F0Y2ggZGFzaGJvYXJkcy5cbiAgICpcbiAgICogSWYgbm90IGRlZmluZWQsIGRhc2hib2FyZHMgYXJlIG5vdCBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBkYXNoYm9hcmRGYWN0b3J5PzogSURhc2hib2FyZEZhY3Rvcnk7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZHMgZm9yIGNyaXRpY2FsIGFsYXJtcy5cbiAgICpcbiAgICogSWYgbm8gcHJvcGVydGllcyBhcmUgcHJvdmlkZWQsIGEgc2V0IG9mIGRlZmF1bHQgYWxhcm1zIGFyZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JpdGljYWxBbGFybVByb3BzPzogU3RhbmRhcmRRdWV1ZUFsYXJtUHJvcHM7XG5cbiAgLyoqXG4gICAqIEFsYXJtIHRocmVzaG9sZCBmb3Igd2FybmluZyBhbGFybXMuXG4gICAqXG4gICAqIElmIG5vIHByb3BlcnRpZXMgYXJlIHByb3ZpZGVkLCBhIHNldCBvZiBkZWZhdWx0IGFsYXJtcyBhcmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHdhcm5pbmdBbGFybVByb3BzPzogU3RhbmRhcmRRdWV1ZUFsYXJtUHJvcHM7XG59XG5cbmZ1bmN0aW9uIHRvQWxhcm1Qcm9wcyhcbiAgcHJvcDogc3RyaW5nLFxuICB3YXJuaW5nVGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIGNyaXRpY2FsVGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIHdhcm5pbmdBbGFybUFjdGlvbnM/OiBJQWxhcm1BY3Rpb25bXSxcbiAgY3JpdGljYWxBbGFybUFjdGlvbnM/OiBJQWxhcm1BY3Rpb25bXSxcbiAgd2FybmluZ0RlZmF1bHRUaHJlc2hvbGQ/OiBudW1iZXIgfCBEdXJhdGlvbixcbiAgY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFsYXJtVGhyZXNob2xkPiB8IHVuZGVmaW5lZCB7XG4gIGxldCBhbGFybVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BbGFybVRocmVzaG9sZD4gPSB7fVxuICBpZiAoY3JpdGljYWxUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuQ3JpdGljYWwgPSB7XG4gICAgICBbcHJvcF06IGNyaXRpY2FsVGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IGNyaXRpY2FsQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAoY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLkNyaXRpY2FsID0ge1xuICAgICAgW3Byb3BdOiBjcml0aWNhbERlZmF1bHRUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogY3JpdGljYWxBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfVxuICBpZiAod2FybmluZ1RocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5XYXJuaW5nID0ge1xuICAgICAgW3Byb3BdOiB3YXJuaW5nVGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IHdhcm5pbmdBbGFybUFjdGlvbnN9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh3YXJuaW5nRGVmYXVsdFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5XYXJuaW5nID0ge1xuICAgICAgW3Byb3BdOiB3YXJuaW5nRGVmYXVsdFRocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiB3YXJuaW5nQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGFsYXJtUHJvcHMpLmxlbmd0aCA+IDAgPyBhbGFybVByb3BzIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFF1ZXVlIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfUkVDRUlWRV9DT1VOVCA9IDM7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1JFVEVOVElPTl9QRVJJT0QgPSBEdXJhdGlvbi5zZWNvbmRzKDEyMDk2MDApO1xuXG4gIHJlYWRvbmx5IG1vbml0b3Jpbmc6IE1vbml0b3JpbmdGYWNhZGU7XG4gIHJlYWRvbmx5IHF1ZXVlOiBRdWV1ZTtcbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlOiBRdWV1ZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhbmRhcmRRdWV1ZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5tb25pdG9yaW5nID0gbmV3IE1vbml0b3JpbmdGYWNhZGUodGhpcywgJ01vbml0b3JpbmcnLCB7XG4gICAgICBtZXRyaWNGYWN0b3J5RGVmYXVsdHM6IHt9LFxuICAgICAgYWxhcm1GYWN0b3J5RGVmYXVsdHM6IHtcbiAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICAgIGFsYXJtTmFtZVByZWZpeDogc2NvcGUubm9kZS5wYXRoLnJlcGxhY2UoL1xcLy9nLCAnLScpXG4gICAgICB9LFxuICAgICAgZGFzaGJvYXJkRmFjdG9yeTogcHJvcHMuZGFzaGJvYXJkRmFjdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbiA9IHByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkgPT09IHVuZGVmaW5lZCA/IFF1ZXVlRW5jcnlwdGlvbi5LTVNfTUFOQUdFRCA6IFF1ZXVlRW5jcnlwdGlvbi5LTVM7XG5cbiAgICAvLyBTZXR1cCBkZWFkLWxldHRlciBxdWV1ZVxuICAgIGNvbnN0IG1heFJlY2VpdmVDb3VudCA9IHByb3BzLm1heFJlY2VpdmVDb3VudD8/U3RhbmRhcmRRdWV1ZS5ERUZBVUxUX01BWF9SRUNFSVZFX0NPVU5UO1xuICAgIGlmIChtYXhSZWNlaXZlQ291bnQgPiAwKSB7XG4gICAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSA9IG5ldyBRdWV1ZSh0aGlzLCAnRGVhZExldHRlcicsIHtcbiAgICAgICAgZW5jcnlwdGlvbixcbiAgICAgICAgZW5jcnlwdGlvbk1hc3RlcktleTogcHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSxcbiAgICAgICAgZGF0YUtleVJldXNlOiBwcm9wcy5kYXRhS2V5UmV1c2U/P0R1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgICByZXRlbnRpb25QZXJpb2Q6IFN0YW5kYXJkUXVldWUuREVGQVVMVF9SRVRFTlRJT05fUEVSSU9EXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBxdWV1ZVxuICAgIHRoaXMucXVldWUgPSBuZXcgUXVldWUodGhpcywgaWQsIHtcbiAgICAgIGVuY3J5cHRpb24sXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBwcm9wcy5lbmNyeXB0aW9uTWFzdGVyS2V5LFxuICAgICAgZGF0YUtleVJldXNlOiBwcm9wcy5kYXRhS2V5UmV1c2U/P0R1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5yZXRlbnRpb25QZXJpb2Q/P1N0YW5kYXJkUXVldWUuREVGQVVMVF9SRVRFTlRJT05fUEVSSU9ELFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBwcm9wcy5tYXhSZWNlaXZlQ291bnQgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5tYXhSZWNlaXZlQ291bnQgPD0gMCA/IHVuZGVmaW5lZCA6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBwcm9wcy5tYXhSZWNlaXZlQ291bnQsXG4gICAgICAgIHF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgfSxcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiBwcm9wcy52aXNpYmlsaXR5VGltZW91dD8/RHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgfSk7XG5cbiAgICBjb25zdCB3YXJuUHJvcHMgPSBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcztcbiAgICBjb25zdCB3YXJuQWN0aW9uczogSUFsYXJtQWN0aW9uW10gPSBbXTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gd2FybkFjdGlvbnMucHVzaChhY3Rpb24pKTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeVRvcGljcz8uZm9yRWFjaCgodG9waWMpID0+IHdhcm5BY3Rpb25zLnB1c2gobmV3IFNuc0FjdGlvbih0b3BpYykpKTtcbiAgICBjb25zdCBjcml0UHJvcHMgPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM7XG4gICAgY29uc3QgY3JpdEFjdGlvbnM6IElBbGFybUFjdGlvbltdID0gW107XG4gICAgY3JpdFByb3BzPy5ub3RpZnlBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGNyaXRBY3Rpb25zLnB1c2goYWN0aW9uKSk7XG4gICAgY3JpdFByb3BzPy5ub3RpZnlUb3BpY3M/LmZvckVhY2goKHRvcGljKSA9PiBjcml0QWN0aW9ucy5wdXNoKG5ldyBTbnNBY3Rpb24odG9waWMpKSk7XG5cbiAgICBpZiAobWF4UmVjZWl2ZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5tb25pdG9yaW5nLm1vbml0b3JTcXNRdWV1ZVdpdGhEbHEoe1xuICAgICAgICBxdWV1ZTogdGhpcy5xdWV1ZSxcbiAgICAgICAgZGVhZExldHRlclF1ZXVlOiB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSxcbiAgICAgICAgYWRkUXVldWVNaW5TaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluTWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5taW5TaXplLCBjcml0UHJvcHM/Lm1pblNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluTWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5tYXhTaXplLCBjcml0UHJvcHM/Lm1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5tYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/Lm1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCBEdXJhdGlvbi5taW51dGVzKDE1KS50b1NlY29uZHMoKSkgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWF4VGltZVRvRHJhaW5NZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21heFRpbWVUb0RyYWluJywgd2FyblByb3BzPy5tYXhUaW1lVG9EcmFpbiwgY3JpdFByb3BzPy5tYXhUaW1lVG9EcmFpbiwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhUaW1lVG9EcmFpblRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWluSW5jb21pbmdNZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21pbkluY29taW5nTWVzc2FnZXNDb3VudCcsIHdhcm5Qcm9wcz8ubWluSW5jb21pbmcsIGNyaXRQcm9wcz8ubWluSW5jb21pbmcsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluSW5jb21pbmdNZXNzYWdlc0NvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhJbmNvbWluZ01lc3NhZ2VzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4SW5jb21pbmdNZXNzYWdlc0NvdW50Jywgd2FyblByb3BzPy5tYXhJbmNvbWluZywgY3JpdFByb3BzPy5tYXhJbmNvbWluZywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhZGREZWFkTGV0dGVyUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5kZWFkTGV0dGVyUXVldWVNYXhTaXplLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCAwKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhNZXNzYWdlQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhZGREZWFkTGV0dGVyUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5kZWFkTGV0dGVyUXVldWVNYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZERlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nTWVzc2FnZXNBbGFybTogdG9BbGFybVByb3BzKCdtYXhJbmNvbWluZ01lc3NhZ2VzQ291bnQnLCB3YXJuUHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nLCBjcml0UHJvcHM/LmRlYWRMZXR0ZXJRdWV1ZU1heEluY29taW5nLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIE1heEluY29taW5nTWVzc2FnZXNDb3VudFRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZERlYWRMZXR0ZXJRdWV1ZVRvU3VtbWFyeURhc2hib2FyZDogdGhpcy5xdWV1ZSAhPT0gdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5tb25pdG9yU3FzUXVldWUoe1xuICAgICAgICBxdWV1ZTogdGhpcy5xdWV1ZSxcbiAgICAgICAgYWRkUXVldWVNaW5TaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluTWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5taW5TaXplLCBjcml0UHJvcHM/Lm1pblNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluTWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhTaXplQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TWVzc2FnZUNvdW50Jywgd2FyblByb3BzPy5tYXhTaXplLCBjcml0UHJvcHM/Lm1heFNpemUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUNvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhNZXNzYWdlQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5TZWNvbmRzJywgd2FyblByb3BzPy5tYXhBZ2U/LnRvU2Vjb25kcygpLCBjcml0UHJvcHM/Lm1heEFnZT8udG9TZWNvbmRzKCksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCBEdXJhdGlvbi5taW51dGVzKDE1KS50b1NlY29uZHMoKSkgYXMgUmVjb3JkPHN0cmluZywgTWF4TWVzc2FnZUFnZVRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWF4VGltZVRvRHJhaW5NZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21heFRpbWVUb0RyYWluJywgd2FyblByb3BzPy5tYXhUaW1lVG9EcmFpbiwgY3JpdFByb3BzPy5tYXhUaW1lVG9EcmFpbiwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhUaW1lVG9EcmFpblRocmVzaG9sZD4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFkZFF1ZXVlTWluSW5jb21pbmdNZXNzYWdlc0FsYXJtOiB0b0FsYXJtUHJvcHMoJ21pbkluY29taW5nTWVzc2FnZXNDb3VudCcsIHdhcm5Qcm9wcz8ubWluSW5jb21pbmcsIGNyaXRQcm9wcz8ubWluSW5jb21pbmcsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTWluSW5jb21pbmdNZXNzYWdlc0NvdW50VGhyZXNob2xkPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkUXVldWVNYXhJbmNvbWluZ01lc3NhZ2VzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4SW5jb21pbmdNZXNzYWdlc0NvdW50Jywgd2FyblByb3BzPy5tYXhJbmNvbWluZywgY3JpdFByb3BzPy5tYXhJbmNvbWluZywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBNYXhJbmNvbWluZ01lc3NhZ2VzQ291bnRUaHJlc2hvbGQ+IHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBncmFudENvbnN1bWVNZXNzYWdlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFNlbmRNZXNzYWdlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ3JhbnRTZW5kTWVzc2FnZXMoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFB1cmdlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5ncmFudFB1cmdlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5xdWV1ZS5ncmFudChncmFudGVlLCAuLi5hY3Rpb25zKTtcbiAgfVxufVxuIl19
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -4,4 +4,5 @@ exports.aws_cloudwatch = require("./aws-cloudwatch");
|
|
|
4
4
|
exports.aws_lambda = require("./aws-lambda");
|
|
5
5
|
exports.aws_monitoring = require("./aws-monitoring");
|
|
6
6
|
exports.aws_route53 = require("./aws-route53");
|
|
7
|
-
|
|
7
|
+
exports.aws_sqs = require("./aws-sqs");
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFtRDtBQUNuRCw2Q0FBMkM7QUFDM0MscURBQW1EO0FBQ25ELCtDQUE2QztBQUM3Qyx1Q0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBhd3NfY2xvdWR3YXRjaCBmcm9tICcuL2F3cy1jbG91ZHdhdGNoJztcbmV4cG9ydCAqIGFzIGF3c19sYW1iZGEgZnJvbSAnLi9hd3MtbGFtYmRhJztcbmV4cG9ydCAqIGFzIGF3c19tb25pdG9yaW5nIGZyb20gJy4vYXdzLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogYXMgYXdzX3JvdXRlNTMgZnJvbSAnLi9hd3Mtcm91dGU1Myc7XG5leHBvcnQgKiBhcyBhd3Nfc3FzIGZyb20gJy4vYXdzLXNxcyc7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "truemark-cdk-lib",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -11,29 +11,35 @@
|
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@types/jest": "^27.4.1",
|
|
13
13
|
"@types/node": "10.17.27",
|
|
14
|
-
"aws-cdk-lib": "2.
|
|
14
|
+
"aws-cdk-lib": "2.18.0",
|
|
15
15
|
"constructs": "10.0.5",
|
|
16
16
|
"jest": "^27.5.1",
|
|
17
17
|
"ts-jest": "^27.1.4",
|
|
18
18
|
"typescript": "~3.9.7"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
|
-
"aws-cdk-lib": "2.
|
|
21
|
+
"aws-cdk-lib": "^2.18.0",
|
|
22
22
|
"constructs": "^10.0.5"
|
|
23
23
|
},
|
|
24
24
|
"exports": {
|
|
25
25
|
".": "./index.js",
|
|
26
26
|
"./package.json": "./package.json",
|
|
27
|
-
"./aws-
|
|
28
|
-
"./aws-monitoring": "./aws-monitoring/index.js",
|
|
27
|
+
"./aws-cloudwatch": "./aws-cloudwatch/index.js",
|
|
29
28
|
"./aws-lambda": "./aws-lambda/index.js",
|
|
30
|
-
"./aws-
|
|
29
|
+
"./aws-monitoring": "./aws-monitoring/index.js",
|
|
30
|
+
"./aws-route53": "./aws-route53/index.js",
|
|
31
|
+
"./aws-sqs": "./aws-sqs/index.js"
|
|
31
32
|
},
|
|
32
33
|
"publishConfig": {
|
|
33
34
|
"access": "public"
|
|
34
35
|
},
|
|
35
36
|
"dependencies": {
|
|
37
|
+
"@aws-cdk/aws-apigatewayv2-alpha": "^2.18.0-alpha.0",
|
|
38
|
+
"@aws-cdk/aws-apigatewayv2-integrations-alpha": "^2.18.0-alpha.0",
|
|
39
|
+
"@aws-cdk/aws-appsync-alpha": "^2.18.0-alpha.0",
|
|
40
|
+
"@aws-cdk/aws-redshift-alpha": "^2.18.0-alpha.0",
|
|
41
|
+
"@aws-cdk/aws-synthetics-alpha": "^2.18.0-alpha.0",
|
|
36
42
|
"cdk-monitoring-constructs": "^1.6.4"
|
|
37
43
|
},
|
|
38
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "9d0ae6c34b288ca6e6397f3ebcdfc09367ec7885"
|
|
39
45
|
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PythonFunction = void 0;
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
6
|
-
const constructs_1 = require("constructs");
|
|
7
|
-
const logs = require("aws-cdk-lib/aws-logs");
|
|
8
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
-
const cdk_monitoring_constructs_1 = require("cdk-monitoring-constructs");
|
|
10
|
-
const aws_cloudwatch_1 = require("../../aws-cloudwatch");
|
|
11
|
-
const aws_monitoring_1 = require("../../aws-monitoring");
|
|
12
|
-
const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
13
|
-
const path = require("path");
|
|
14
|
-
function toAlarmProps(prop, warningThreshold, criticalThreshold, warningAlarmActions, criticalAlarmActions, warningDefaultThreshold, criticalDefaultThreshold) {
|
|
15
|
-
let alarmProps = {};
|
|
16
|
-
if (criticalThreshold !== undefined) {
|
|
17
|
-
alarmProps.Critical = {
|
|
18
|
-
[prop]: criticalThreshold,
|
|
19
|
-
actionsEnabled: true,
|
|
20
|
-
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
else if (criticalDefaultThreshold !== undefined) {
|
|
24
|
-
alarmProps.Critical = {
|
|
25
|
-
[prop]: criticalDefaultThreshold,
|
|
26
|
-
actionsEnabled: true,
|
|
27
|
-
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: criticalAlarmActions })
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
if (warningThreshold !== undefined) {
|
|
31
|
-
alarmProps.Warning = {
|
|
32
|
-
[prop]: warningThreshold,
|
|
33
|
-
actionsEnabled: true,
|
|
34
|
-
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
else if (warningDefaultThreshold !== undefined) {
|
|
38
|
-
alarmProps.Warning = {
|
|
39
|
-
[prop]: warningDefaultThreshold,
|
|
40
|
-
actionsEnabled: true,
|
|
41
|
-
actionOverride: new aws_monitoring_1.StandardAlarmActionsStrategy({ actions: warningAlarmActions })
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
return Object.keys(alarmProps).length > 0 ? alarmProps : undefined;
|
|
45
|
-
}
|
|
46
|
-
class PythonFunction extends constructs_1.Construct {
|
|
47
|
-
constructor(scope, id, props) {
|
|
48
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
|
|
49
|
-
super(scope, id);
|
|
50
|
-
this.monitoring = new cdk_monitoring_constructs_1.MonitoringFacade(this, 'Monitoring', {
|
|
51
|
-
metricFactoryDefaults: {},
|
|
52
|
-
alarmFactoryDefaults: {
|
|
53
|
-
actionsEnabled: true,
|
|
54
|
-
alarmNamePrefix: scope.node.path.replace(/\//g, '-'),
|
|
55
|
-
},
|
|
56
|
-
dashboardFactory: props.dashboardFactory
|
|
57
|
-
});
|
|
58
|
-
let bundling = fs.existsSync(path.join(props.entry, 'requirements.txt')) ? {
|
|
59
|
-
image: (_b = (_a = props.runtime) === null || _a === void 0 ? void 0 : _a.bundlingImage) !== null && _b !== void 0 ? _b : aws_lambda_1.Runtime.PYTHON_3_9.bundlingImage,
|
|
60
|
-
command: [
|
|
61
|
-
'bash', '-c', [
|
|
62
|
-
'pip install --target /asset-output/ -r requirements.txt',
|
|
63
|
-
'cp -ra * /asset-output/'
|
|
64
|
-
].join('&&')
|
|
65
|
-
],
|
|
66
|
-
outputType: aws_cdk_lib_1.BundlingOutput.NOT_ARCHIVED,
|
|
67
|
-
} : undefined;
|
|
68
|
-
this.function = new aws_lambda_1.Function(this, id, {
|
|
69
|
-
runtime: (_c = props.runtime) !== null && _c !== void 0 ? _c : aws_lambda_1.Runtime.PYTHON_3_9,
|
|
70
|
-
tracing: (_d = props.tracing) !== null && _d !== void 0 ? _d : aws_lambda_1.Tracing.PASS_THROUGH,
|
|
71
|
-
logRetention: (_e = props.logRetention) !== null && _e !== void 0 ? _e : logs.RetentionDays.THREE_DAYS,
|
|
72
|
-
architecture: (_f = props.architecture) !== null && _f !== void 0 ? _f : aws_lambda_1.Architecture.ARM_64,
|
|
73
|
-
vpc: props.vpc,
|
|
74
|
-
vpcSubnets: props.vpcSubnets,
|
|
75
|
-
memorySize: (_g = props.memorySize) !== null && _g !== void 0 ? _g : 768,
|
|
76
|
-
timeout: (_h = props.timeout) !== null && _h !== void 0 ? _h : aws_cdk_lib_1.Duration.seconds(30),
|
|
77
|
-
environment: props.environment,
|
|
78
|
-
description: props.description,
|
|
79
|
-
code: aws_lambda_1.Code.fromAsset(props.entry, { bundling }),
|
|
80
|
-
handler: ((_j = props.index) !== null && _j !== void 0 ? _j : 'index.py').replace('.py', '') + '.' + ((_k = props.handler) !== null && _k !== void 0 ? _k : 'handler')
|
|
81
|
-
});
|
|
82
|
-
const warnProps = props.warningAlarmProps;
|
|
83
|
-
const warnActions = [];
|
|
84
|
-
(_l = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyActions) === null || _l === void 0 ? void 0 : _l.forEach((action) => warnActions.push(action));
|
|
85
|
-
(_m = warnProps === null || warnProps === void 0 ? void 0 : warnProps.notifyTopics) === null || _m === void 0 ? void 0 : _m.forEach((topic) => warnActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
86
|
-
const critProps = props.criticalAlarmProps;
|
|
87
|
-
const critActions = [];
|
|
88
|
-
(_o = critProps === null || critProps === void 0 ? void 0 : critProps.notifyActions) === null || _o === void 0 ? void 0 : _o.forEach((action) => critActions.push(action));
|
|
89
|
-
(_p = critProps === null || critProps === void 0 ? void 0 : critProps.notifyTopics) === null || _p === void 0 ? void 0 : _p.forEach((topic) => critActions.push(new aws_cloudwatch_actions_1.SnsAction(topic)));
|
|
90
|
-
this.monitoring.monitorLambdaFunction({
|
|
91
|
-
lambdaFunction: this.function,
|
|
92
|
-
lambdaInsightsEnabled: true,
|
|
93
|
-
addToAlarmDashboard: true,
|
|
94
|
-
addToDetailDashboard: true,
|
|
95
|
-
addToSummaryDashboard: true,
|
|
96
|
-
addLatencyP50Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p50Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p50Latency, warnActions, critActions),
|
|
97
|
-
addLatencyP90Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p90Latency, warnActions, critActions),
|
|
98
|
-
addLatencyP99Alarm: toAlarmProps('maxLatency', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p99Latency, critProps === null || critProps === void 0 ? void 0 : critProps.p99Latency, warnActions, critActions),
|
|
99
|
-
addFaultCountAlarm: toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxFaults, critProps === null || critProps === void 0 ? void 0 : critProps.maxFaults, warnActions, critActions, undefined, 0),
|
|
100
|
-
addFaultRateAlarm: toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgFaults, critProps === null || critProps === void 0 ? void 0 : critProps.avgFaults, warnActions, critActions),
|
|
101
|
-
addLowTpsAlarm: toAlarmProps('minTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.minTps, critProps === null || critProps === void 0 ? void 0 : critProps.minTps, warnActions, critActions),
|
|
102
|
-
addHighTpsAlarm: toAlarmProps('maxTps', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxTps, critProps === null || critProps === void 0 ? void 0 : critProps.maxTps, warnActions, critActions),
|
|
103
|
-
addThrottlesCountAlarm: toAlarmProps('maxErrorCount', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.maxThrottles, warnActions, critActions, undefined, 0),
|
|
104
|
-
addThrottlesRateAlarm: toAlarmProps('maxErrorRate', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgThrottles, critProps === null || critProps === void 0 ? void 0 : critProps.avgThrottles, warnActions, critActions),
|
|
105
|
-
addConcurrentExecutionsCountAlarm: toAlarmProps('maxRunningTasks', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxConcurrentExecutions, critProps === null || critProps === void 0 ? void 0 : critProps.maxConcurrentExecutions, warnActions, critActions),
|
|
106
|
-
addMaxIteratorAgeAlarm: toAlarmProps('maxAgeInMillis', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxIteratorAge, critProps === null || critProps === void 0 ? void 0 : critProps.maxIteratorAge, warnActions, critActions),
|
|
107
|
-
addEnhancedMonitoringMaxCpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.maxCpuTime, warnActions, critActions),
|
|
108
|
-
addEnhancedMonitoringP90CpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90CpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.p90CpuTime, warnActions, critActions),
|
|
109
|
-
addEnhancedMonitoringAvgCpuTotalTimeAlarm: toAlarmProps('maxDuration', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgCpuTime, critProps === null || critProps === void 0 ? void 0 : critProps.avgCpuTime, warnActions, critActions),
|
|
110
|
-
addEnhancedMonitoringMaxMemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.maxMemory, critProps === null || critProps === void 0 ? void 0 : critProps.maxMemory, warnActions, critActions),
|
|
111
|
-
addEnhancedMonitoringP90MemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.p90Memory, critProps === null || critProps === void 0 ? void 0 : critProps.p90Memory, warnActions, critActions),
|
|
112
|
-
addEnhancedMonitoringAvgMemoryUtilizationAlarm: toAlarmProps('maxUsagePercent', warnProps === null || warnProps === void 0 ? void 0 : warnProps.avgMemory, critProps === null || critProps === void 0 ? void 0 : critProps.avgMemory, warnActions, critActions),
|
|
113
|
-
});
|
|
114
|
-
// Add log monitoring to dashboard
|
|
115
|
-
let critMaxLogCount = (_r = (_q = props.criticalAlarmProps) === null || _q === void 0 ? void 0 : _q.maxLogCount) !== null && _r !== void 0 ? _r : 1;
|
|
116
|
-
let pattern = '';
|
|
117
|
-
if (critMaxLogCount > 0) {
|
|
118
|
-
pattern = (_t = (_s = props.criticalAlarmProps) === null || _s === void 0 ? void 0 : _s.dashboardLogPattern) !== null && _t !== void 0 ? _t : PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN;
|
|
119
|
-
}
|
|
120
|
-
if (((_u = props.warningAlarmProps) === null || _u === void 0 ? void 0 : _u.maxLogCount) !== undefined && pattern !== props.warningAlarmProps.dashboardLogPattern) {
|
|
121
|
-
pattern += (pattern !== '' ? '|' : '') + props.warningAlarmProps.dashboardLogPattern;
|
|
122
|
-
}
|
|
123
|
-
if (pattern !== '') {
|
|
124
|
-
this.monitoring.monitorLog({
|
|
125
|
-
logGroupName: this.function.logGroup.logGroupName,
|
|
126
|
-
pattern,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
// Add critical log alarm
|
|
130
|
-
if (critMaxLogCount > 0) {
|
|
131
|
-
this.criticalLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsCritical', {
|
|
132
|
-
logGroup: this.function.logGroup,
|
|
133
|
-
pattern: (_w = (_v = props.criticalAlarmProps) === null || _v === void 0 ? void 0 : _v.metricLogPattern) !== null && _w !== void 0 ? _w : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
|
|
134
|
-
threshold: critMaxLogCount,
|
|
135
|
-
evaluationPeriods: 3
|
|
136
|
-
});
|
|
137
|
-
if (((_x = props.criticalAlarmProps) === null || _x === void 0 ? void 0 : _x.notifyActions) !== undefined) {
|
|
138
|
-
this.criticalLogAlarm.addAlarmActions(props.criticalAlarmProps.notifyActions);
|
|
139
|
-
}
|
|
140
|
-
if (((_y = props.criticalAlarmProps) === null || _y === void 0 ? void 0 : _y.notifyTopics) !== undefined) {
|
|
141
|
-
this.criticalLogAlarm.addAlarmTopics(props.criticalAlarmProps.notifyTopics);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Add warning log alarm
|
|
145
|
-
if (((_z = props.warningAlarmProps) === null || _z === void 0 ? void 0 : _z.maxLogCount) !== undefined && props.warningAlarmProps.maxLogCount > 0) {
|
|
146
|
-
this.warningLogAlarm = new aws_cloudwatch_1.LogAlarm(this, 'LogsWarning', {
|
|
147
|
-
logGroup: this.function.logGroup,
|
|
148
|
-
pattern: (_1 = (_0 = props.warningAlarmProps) === null || _0 === void 0 ? void 0 : _0.metricLogPattern) !== null && _1 !== void 0 ? _1 : PythonFunction.DEFAULT_LOG_METRIC_PATTERN,
|
|
149
|
-
threshold: props.warningAlarmProps.maxLogCount,
|
|
150
|
-
evaluationPeriods: 3
|
|
151
|
-
});
|
|
152
|
-
if (((_2 = props.warningAlarmProps) === null || _2 === void 0 ? void 0 : _2.notifyActions) !== undefined) {
|
|
153
|
-
this.warningLogAlarm.addAlarmActions(props.warningAlarmProps.notifyActions);
|
|
154
|
-
}
|
|
155
|
-
if (((_3 = props.warningAlarmProps) === null || _3 === void 0 ? void 0 : _3.notifyTopics) !== undefined) {
|
|
156
|
-
this.warningLogAlarm.addAlarmTopics(props.warningAlarmProps.notifyTopics);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
exports.PythonFunction = PythonFunction;
|
|
162
|
-
PythonFunction.DEFAULT_LOG_METRIC_PATTERN = '"[ERROR]"';
|
|
163
|
-
PythonFunction.DEFAULT_LOG_INSIGHTS_PATTERN = '\\\[ERROR\\\]';
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RhbmRhcmQtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qix1REFBc0Y7QUFDdEYsMkNBQXFDO0FBQ3JDLDZDQUE2QztBQUU3Qyw2Q0FBc0U7QUFDdEUseUVBYW1DO0FBR25DLHlEQUE4QztBQUM5Qyx5REFBa0U7QUFDbEUsK0VBQTZEO0FBQzdELDZCQUE2QjtBQWtQN0IsU0FBUyxZQUFZLENBQ25CLElBQVksRUFDWixnQkFBb0MsRUFDcEMsaUJBQXFDLEVBQ3JDLG1CQUFvQyxFQUNwQyxvQkFBcUMsRUFDckMsdUJBQTJDLEVBQzNDLHdCQUE0QztJQUU1QyxJQUFJLFVBQVUsR0FBeUMsRUFBRSxDQUFBO0lBQ3pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDcEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxpQkFBaUI7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsY0FBYyxFQUFFLElBQUksNkNBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUMsQ0FBQztTQUNsRixDQUFBO0tBQ0Y7U0FBTSxJQUFJLHdCQUF3QixLQUFLLFNBQVMsRUFBRTtRQUNqRCxVQUFVLENBQUMsUUFBUSxHQUFHO1lBQ3BCLENBQUMsSUFBSSxDQUFDLEVBQUUsd0JBQXdCO1lBQ2hDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLGNBQWMsRUFBRSxJQUFJLDZDQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFDLENBQUM7U0FDbEYsQ0FBQTtLQUNGO0lBQ0QsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRztZQUNuQixDQUFDLElBQUksQ0FBQyxFQUFFLGdCQUFnQjtZQUN4QixjQUFjLEVBQUUsSUFBSTtZQUNwQixjQUFjLEVB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QzthQUM3RTtTQUNGO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksT0FBQSxLQUFLLENBQUMsaUJBQWlCLDBDQUFFLFdBQVcsTUFBSyxTQUFTLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLHlCQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtnQkFDdkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDaEMsT0FBTyxjQUFFLEtBQUssQ0FBQyxpQkFBaUIsMENBQUUsZ0JBQWdCLG1DQUFFLGNBQWMsQ0FBQywwQkFBMEI7Z0JBQzdGLFNBQVMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDOUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxhQUFhLE1BQUssU0FBUyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDN0U7WUFDRCxJQUFJLE9BQUEsS0FBSyxDQUFDLGlCQUFpQiwwQ0FBRSxZQUFZLE1BQUssU0FBUyxFQUFFO2dCQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDM0U7U0FDRjtJQUNILENBQUM7O0FBaElILHdDQWlJQztBQS9IaUIseUNBQTBCLEdBQUcsV0FBVyxDQUFDO0FBQ3pDLDJDQUE0QixHQUFHLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7QXJjaGl0ZWN0dXJlLCBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSwgVHJhY2luZ30gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7QnVuZGxpbmdPcHRpb25zLCBCdW5kbGluZ091dHB1dCwgRHVyYXRpb259IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIEN1c3RvbUFsYXJtVGhyZXNob2xkLFxuICBEdXJhdGlvblRocmVzaG9sZCxcbiAgRXJyb3JDb3VudFRocmVzaG9sZCxcbiAgRXJyb3JSYXRlVGhyZXNob2xkLFxuICBIaWdoVHBzVGhyZXNob2xkLFxuICBJRGFzaGJvYXJkRmFjdG9yeSxcbiAgTGF0ZW5jeVRocmVzaG9sZCxcbiAgTG93VHBzVGhyZXNob2xkLFxuICBNYXhBZ2VUaHJlc2hvbGQsXG4gIE1vbml0b3JpbmdGYWNhZGUsXG4gIFJ1bm5pbmdUYXNrQ291bnRUaHJlc2hvbGQsXG4gIFVzYWdlVGhyZXNob2xkLFxufSBmcm9tICdjZGstbW9uaXRvcmluZy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7SVRvcGljfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc25zJztcbmltcG9ydCB7SUFsYXJtQWN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge0xvZ0FsYXJtfSBmcm9tICcuLi8uLi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQge1N0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3l9IGZyb20gJy4uLy4uL2F3cy1tb25pdG9yaW5nJztcbmltcG9ydCB7U25zQWN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gtYWN0aW9uc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkRnVuY3Rpb25BbGFybVByb3BzIHtcblxuICAvKipcbiAgICogTWF4aW11bSA1MHRoIHBlcmNlbnRpbGUgbGF0ZW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgcDUwTGF0ZW5jeT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIDkwdGggcGVyY2VudGlsZSBsYXRlbmN5XG4gICAqL1xuICByZWFkb25seSBwOTBMYXRlbmN5PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE1heGltdW0gOTl0aCBwZXJjZW50aWxlIGxhdGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IHA5OUxhdGVuY3k/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgZmF1bHRzXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IG1heEZhdWx0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQXZlcmFnZSBudW1iZXIgb2YgZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBhdmdGYXVsdHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gdHJhbnNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBtaW5UcHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gdHJhbnNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBtYXhUcHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHRocm90dGxlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSBtYXhUaHJvdHRsZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF2ZXJhZ2UgbnVtYmVyIG9mIHRocm90dGxlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXZnVGhyb3R0bGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGNvbmN1cnJlbnQgZXhlY3V0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFtb3VudCBvZiB0aW1lIGRhdGEgd2FpdHMgYmVmb3JlIGJlaW5nIHByb2Nlc3NlZCBieSB0aGUgZnVuY3Rpb24uXG4gICAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL3ByZW1pdW1zdXBwb3J0L2tub3dsZWRnZS1jZW50ZXIvbGFtYmRhLWl0ZXJhdG9yLWFnZS9cbiAgICovXG4gIHJlYWRvbmx5IG1heEl0ZXJhdG9yQWdlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFtb3VudCBvZiBDUFUgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q3B1VGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiA5MHRoIHBlcmNlbnRpbGUgQ1BVIHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHA5MENwdVRpbWU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogQXZlcmFnZSBDUFUgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZnQ3B1VGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnlcbiAgICovXG4gIHJlYWRvbmx5IG1heE1lbW9yeT86IG51bWJlcjtcblxuICAvKipcbiAgICogOTB0aCBwZXJjZW50aWxlIG1lbW9yeVxuICAgKi9cbiAgcmVhZG9ubHkgcDkwTWVtb3J5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBdmVyYWdlIG1lbW9yeVxuICAgKi9cbiAgcmVhZG9ubHkgYXZnTWVtb3J5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUb3BpY3MgdG8gc2VuZCBhbGFybSBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZnlUb3BpY3M/OiBbSVRvcGljXTtcblxuICAvKipcbiAgICogQWN0aW9ucyB0byBzZW5kIGFsYXJtIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmeUFjdGlvbnM/OiBbSUFsYXJtQWN0aW9uXTtcblxuICAvKipcbiAgICogTG9nIHBhdHRlcm4gdG8gbWF0Y2ggZm9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdcXFxcXFxbRVJST1JcXFxcXFxdJ1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljTG9nUGF0dGVybj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBMb2cgcGF0dGVybiB0byBtYXRjaCBmb3IgdGhlIGRhc2hib2FyZFxuICAgKlxuICAgKiBAZGVmYXVsdCAnXCJbRVJST1JdXCInXG4gICAqL1xuICByZWFkb25seSBkYXNoYm9hcmRMb2dQYXR0ZXJuPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGxvZyBldmVudHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uXG4gICAqXG4gICAqIEBkZWZhdWx0IDAgZm9yIENyaXRpY2FsIEFsYXJtXG4gICAqL1xuICByZWFkb25seSBtYXhMb2dDb3VudD86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkRnVuY3Rpb25Qcm9wcyB7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBBV1MgWC1SYXkgVHJhY2luZy5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhY2luZy5QQVNTX1RIUk9VR0hcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmc/OiBUcmFjaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgdG8gcmV0YWluIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5USFJFRV9EQVlTXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gICAqL1xuICByZWFkb25seSBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIHRoZSBsYW1iZGEgbmV0d29yayBpbnRlcmZhY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHBsYWNlZCBpbiBhIFZQQ1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBsYW1iZGEgaW5zaWRlIHRoZSBWUEMuIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBWUEMgZGVmYXVsdCBzdHJhdGVneSBpcyB1c2VkIGlmIG5vdCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbWVtb3J5IGluIE1CIGFuZCBwcm9wb3J0aW9uYWxseSBDUFUgcG93ZXIgdG8gYWxsb2NhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDc2OFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcblxuICAvKipcbiAgICogRnVuY3Rpb24gZXhlY3V0aW9uIHRpbWUgKGluIHNlY29uZHMpIGFmdGVyIHdoaWNoIHRoZSBMYW1iZGEgdGVybWluYXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIG1ha2UgYXZhaWxhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBEYXNoYm9hcmRGYWN0b3J5IHRvIHVzZSB3aGVuIGdlbmVyYXRpbmcgQ2xvdWRXYXRjaCBkYXNoYm9hcmRzLlxuICAgKlxuICAgKiBJZiBub3QgZGVmaW5lZCwgZGFzaGJvYXJkcyBhcmUgbm90IGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRhc2hib2FyZEZhY3Rvcnk/OiBJRGFzaGJvYXJkRmFjdG9yeTtcblxuICAvKipcbiAgICogQWxhcm0gdGhyZXNob2xkcyBmb3IgY3JpdGljYWwgYWxhcm1zLlxuICAgKlxuICAgKiBJZiBubyBwcm9wZXJ0aWVzIGFyZSBwcm92aWRlZCwgYSBzZXQgb2YgZGVmYXVsdCBhbGFybXMgYXJlIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBjcml0aWNhbEFsYXJtUHJvcHM/OiBTdGFuZGFyZEZ1bmN0aW9uQWxhcm1Qcm9wcztcblxuICAvKipcbiAgICogQWxhcm0gdGhyZXNob2xkIGZvciB3YXJuaW5nIGFsYXJtcy5cbiAgICpcbiAgICogSWYgbm8gcHJvcGVydGllcyBhcmUgcHJvdmlkZWQsIGEgc2V0IG9mIGRlZmF1bHQgYWxhcm1zIGFyZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgd2FybmluZ0FsYXJtUHJvcHM/OiBTdGFuZGFyZEZ1bmN0aW9uQWxhcm1Qcm9wcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25GdW5jdGlvblByb3BzIGV4dGVuZHMgU3RhbmRhcmRGdW5jdGlvblByb3BzIHtcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb24uIE11c3QgYmUgb25lIG9mIHRoZSBQeXRob24gcnVudGltZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJ1bnRpbWUuUFlUSE9OXzNfOVxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZT86IFJ1bnRpbWU7XG5cbiAgLyoqXG4gICAqIExvY2F0aW9uIG9uIHRoZSBmaWxlc3lzdGVtIHRoZSBMYW1iZGEgYXNzZXRzIGFyZSBmb3VuZC5cbiAgICpcbiAgICogRXhhbXBsZTogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ215bGFtYmRhJylcbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5OiBzdHJpbmdcblxuICAvKipcbiAgICogRmlsZSBjb250YWluaW5nIHRoZSBoYW5kbGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnaW5kZXgucHknXG4gICAqL1xuICByZWFkb25seSBpbmRleD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFeHBvcnRlZCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdoYW5kbGVyJ1xuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcj86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiB0b0FsYXJtUHJvcHMoXG4gIHByb3A6IHN0cmluZyxcbiAgd2FybmluZ1RocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uLFxuICBjcml0aWNhbFRocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uLFxuICB3YXJuaW5nQWxhcm1BY3Rpb25zPzogSUFsYXJtQWN0aW9uW10sXG4gIGNyaXRpY2FsQWxhcm1BY3Rpb25zPzogSUFsYXJtQWN0aW9uW10sXG4gIHdhcm5pbmdEZWZhdWx0VGhyZXNob2xkPzogbnVtYmVyIHwgRHVyYXRpb24sXG4gIGNyaXRpY2FsRGVmYXVsdFRocmVzaG9sZD86IG51bWJlciB8IER1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BbGFybVRocmVzaG9sZD4gfCB1bmRlZmluZWQge1xuICBsZXQgYWxhcm1Qcm9wczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWxhcm1UaHJlc2hvbGQ+ID0ge31cbiAgaWYgKGNyaXRpY2FsVGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHtcbiAgICBhbGFybVByb3BzLkNyaXRpY2FsID0ge1xuICAgICAgW3Byb3BdOiBjcml0aWNhbFRocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiBjcml0aWNhbEFsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9IGVsc2UgaWYgKGNyaXRpY2FsRGVmYXVsdFRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYWxhcm1Qcm9wcy5Dcml0aWNhbCA9IHtcbiAgICAgIFtwcm9wXTogY3JpdGljYWxEZWZhdWx0VGhyZXNob2xkLFxuICAgICAgYWN0aW9uc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25PdmVycmlkZTogbmV3IFN0YW5kYXJkQWxhcm1BY3Rpb25zU3RyYXRlZ3koe2FjdGlvbnM6IGNyaXRpY2FsQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH1cbiAgaWYgKHdhcm5pbmdUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuV2FybmluZyA9IHtcbiAgICAgIFtwcm9wXTogd2FybmluZ1RocmVzaG9sZCxcbiAgICAgIGFjdGlvbnNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uT3ZlcnJpZGU6IG5ldyBTdGFuZGFyZEFsYXJtQWN0aW9uc1N0cmF0ZWd5KHthY3Rpb25zOiB3YXJuaW5nQWxhcm1BY3Rpb25zfSlcbiAgICB9XG4gIH0gZWxzZSBpZiAod2FybmluZ0RlZmF1bHRUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCkge1xuICAgIGFsYXJtUHJvcHMuV2FybmluZyA9IHtcbiAgICAgIFtwcm9wXTogd2FybmluZ0RlZmF1bHRUaHJlc2hvbGQsXG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbk92ZXJyaWRlOiBuZXcgU3RhbmRhcmRBbGFybUFjdGlvbnNTdHJhdGVneSh7YWN0aW9uczogd2FybmluZ0FsYXJtQWN0aW9uc30pXG4gICAgfVxuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhhbGFybVByb3BzKS5sZW5ndGggPiAwID8gYWxhcm1Qcm9wcyA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY2xhc3MgUHl0aG9uRnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19NRVRSSUNfUEFUVEVSTiA9ICdcIltFUlJPUl1cIic7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19JTlNJR0hUU19QQVRURVJOID0gJ1xcXFxcXFtFUlJPUlxcXFxcXF0nO1xuICByZWFkb25seSBkZWNsYXJlIG1vbml0b3Jpbmc6IE1vbml0b3JpbmdGYWNhZGVcbiAgcmVhZG9ubHkgZGVjbGFyZSBmdW5jdGlvbjogRnVuY3Rpb247XG4gIHJlYWRvbmx5IGRlY2xhcmUgY3JpdGljYWxMb2dBbGFybTogTG9nQWxhcm07XG4gIHJlYWRvbmx5IGRlY2xhcmUgd2FybmluZ0xvZ0FsYXJtOiBMb2dBbGFybTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLm1vbml0b3JpbmcgPSBuZXcgTW9uaXRvcmluZ0ZhY2FkZSh0aGlzLCAnTW9uaXRvcmluZycsIHtcbiAgICAgIG1ldHJpY0ZhY3RvcnlEZWZhdWx0czoge30sXG4gICAgICBhbGFybUZhY3RvcnlEZWZhdWx0czoge1xuICAgICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgYWxhcm1OYW1lUHJlZml4OiBzY29wZS5ub2RlLnBhdGgucmVwbGFjZSgvXFwvL2csICctJyksXG4gICAgICB9LFxuICAgICAgZGFzaGJvYXJkRmFjdG9yeTogcHJvcHMuZGFzaGJvYXJkRmFjdG9yeVxuICAgIH0pO1xuXG4gICAgbGV0IGJ1bmRsaW5nOiBCdW5kbGluZ09wdGlvbnMgfCB1bmRlZmluZWQgPSBmcy5leGlzdHNTeW5jKHBhdGguam9pbihwcm9wcy5lbnRyeSwgJ3JlcXVpcmVtZW50cy50eHQnKSkgPyB7XG4gICAgICBpbWFnZTogcHJvcHMucnVudGltZT8uYnVuZGxpbmdJbWFnZT8/UnVudGltZS5QWVRIT05fM185LmJ1bmRsaW5nSW1hZ2UsXG4gICAgICBjb21tYW5kOiBbXG4gICAgICAgICdiYXNoJywgJy1jJywgW1xuICAgICAgICAgICdwaXAgaW5zdGFsbCAtLXRhcmdldCAvYXNzZXQtb3V0cHV0LyAtciByZXF1aXJlbWVudHMudHh0JyxcbiAgICAgICAgICAnY3AgLXJhICogL2Fzc2V0LW91dHB1dC8nXG4gICAgICAgIF0uam9pbignJiYnKVxuICAgICAgXSxcbiAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0Lk5PVF9BUkNISVZFRCxcbiAgICB9IDogdW5kZWZpbmVkXG5cbiAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lPz9SdW50aW1lLlBZVEhPTl8zXzksXG4gICAgICB0cmFjaW5nOiBwcm9wcy50cmFjaW5nPz9UcmFjaW5nLlBBU1NfVEhST1VHSCxcbiAgICAgIGxvZ1JldGVudGlvbjogcHJvcHMubG9nUmV0ZW50aW9uPz9sb2dzLlJldGVudGlvbkRheXMuVEhSRUVfREFZUyxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlPz9BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZT8/NzY4LFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dD8/RHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwcm9wcy5lbnRyeSwge2J1bmRsaW5nfSksXG4gICAgICBoYW5kbGVyOiAocHJvcHMuaW5kZXg/PydpbmRleC5weScpLnJlcGxhY2UoJy5weScsICcnKSArICcuJyArIChwcm9wcy5oYW5kbGVyPz8naGFuZGxlcicpXG4gICAgfSk7XG5cbiAgICBjb25zdCB3YXJuUHJvcHMgPSBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcztcbiAgICBjb25zdCB3YXJuQWN0aW9uczogSUFsYXJtQWN0aW9uW10gPSBbXTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeUFjdGlvbnM/LmZvckVhY2goKGFjdGlvbikgPT4gd2FybkFjdGlvbnMucHVzaChhY3Rpb24pKTtcbiAgICB3YXJuUHJvcHM/Lm5vdGlmeVRvcGljcz8uZm9yRWFjaCgodG9waWMpID0+IHdhcm5BY3Rpb25zLnB1c2gobmV3IFNuc0FjdGlvbih0b3BpYykpKTtcbiAgICBjb25zdCBjcml0UHJvcHMgPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM7XG4gICAgY29uc3QgY3JpdEFjdGlvbnM6IElBbGFybUFjdGlvbltdID0gW107XG4gICAgY3JpdFByb3BzPy5ub3RpZnlBY3Rpb25zPy5mb3JFYWNoKChhY3Rpb24pID0+IGNyaXRBY3Rpb25zLnB1c2goYWN0aW9uKSk7XG4gICAgY3JpdFByb3BzPy5ub3RpZnlUb3BpY3M/LmZvckVhY2goKHRvcGljKSA9PiBjcml0QWN0aW9ucy5wdXNoKG5ldyBTbnNBY3Rpb24odG9waWMpKSk7XG5cbiAgICB0aGlzLm1vbml0b3JpbmcubW9uaXRvckxhbWJkYUZ1bmN0aW9uKHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLmZ1bmN0aW9uLFxuICAgICAgbGFtYmRhSW5zaWdodHNFbmFibGVkOiB0cnVlLFxuICAgICAgYWRkVG9BbGFybURhc2hib2FyZDogdHJ1ZSxcbiAgICAgIGFkZFRvRGV0YWlsRGFzaGJvYXJkOiB0cnVlLFxuICAgICAgYWRkVG9TdW1tYXJ5RGFzaGJvYXJkOiB0cnVlLFxuICAgICAgYWRkTGF0ZW5jeVA1MEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heExhdGVuY3knLCB3YXJuUHJvcHM/LnA1MExhdGVuY3ksIGNyaXRQcm9wcz8ucDUwTGF0ZW5jeSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBMYXRlbmN5VGhyZXNob2xkPixcbiAgICAgIGFkZExhdGVuY3lQOTBBbGFybTogdG9BbGFybVByb3BzKCdtYXhMYXRlbmN5Jywgd2FyblByb3BzPy5wOTBMYXRlbmN5LCBjcml0UHJvcHM/LnA5MExhdGVuY3ksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgTGF0ZW5jeVRocmVzaG9sZD4sXG4gICAgICBhZGRMYXRlbmN5UDk5QWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4TGF0ZW5jeScsIHdhcm5Qcm9wcz8ucDk5TGF0ZW5jeSwgY3JpdFByb3BzPy5wOTlMYXRlbmN5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIExhdGVuY3lUaHJlc2hvbGQ+LFxuICAgICAgYWRkRmF1bHRDb3VudEFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heEVycm9yQ291bnQnLCB3YXJuUHJvcHM/Lm1heEZhdWx0cywgY3JpdFByb3BzPy5tYXhGYXVsdHMsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucywgdW5kZWZpbmVkLCAwKSBhcyBSZWNvcmQ8c3RyaW5nLCBFcnJvckNvdW50VGhyZXNob2xkPixcbiAgICAgIGFkZEZhdWx0UmF0ZUFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heEVycm9yUmF0ZScsIHdhcm5Qcm9wcz8uYXZnRmF1bHRzLCBjcml0UHJvcHM/LmF2Z0ZhdWx0cywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBFcnJvclJhdGVUaHJlc2hvbGQ+LFxuICAgICAgYWRkTG93VHBzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWluVHBzJywgd2FyblByb3BzPy5taW5UcHMsIGNyaXRQcm9wcz8ubWluVHBzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIExvd1Rwc1RocmVzaG9sZD4sXG4gICAgICBhZGRIaWdoVHBzQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VHBzJywgd2FyblByb3BzPy5tYXhUcHMsIGNyaXRQcm9wcz8ubWF4VHBzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIEhpZ2hUcHNUaHJlc2hvbGQ+LFxuICAgICAgYWRkVGhyb3R0bGVzQ291bnRBbGFybTogdG9BbGFybVByb3BzKCdtYXhFcnJvckNvdW50Jywgd2FyblByb3BzPy5tYXhUaHJvdHRsZXMsIGNyaXRQcm9wcz8ubWF4VGhyb3R0bGVzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMsIHVuZGVmaW5lZCwgMCkgYXMgUmVjb3JkPHN0cmluZywgRXJyb3JDb3VudFRocmVzaG9sZD4sXG4gICAgICBhZGRUaHJvdHRsZXNSYXRlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RXJyb3JSYXRlJywgd2FyblByb3BzPy5hdmdUaHJvdHRsZXMsIGNyaXRQcm9wcz8uYXZnVGhyb3R0bGVzLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIEVycm9yUmF0ZVRocmVzaG9sZD4sXG4gICAgICBhZGRDb25jdXJyZW50RXhlY3V0aW9uc0NvdW50QWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4UnVubmluZ1Rhc2tzJywgd2FyblByb3BzPy5tYXhDb25jdXJyZW50RXhlY3V0aW9ucywgY3JpdFByb3BzPy5tYXhDb25jdXJyZW50RXhlY3V0aW9ucywgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyBSZWNvcmQ8c3RyaW5nLCBSdW5uaW5nVGFza0NvdW50VGhyZXNob2xkPixcbiAgICAgIGFkZE1heEl0ZXJhdG9yQWdlQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4QWdlSW5NaWxsaXMnLCB3YXJuUHJvcHM/Lm1heEl0ZXJhdG9yQWdlLCBjcml0UHJvcHM/Lm1heEl0ZXJhdG9yQWdlLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIE1heEFnZVRocmVzaG9sZD4sXG4gICAgICBhZGRFbmhhbmNlZE1vbml0b3JpbmdNYXhDcHVUb3RhbFRpbWVBbGFybTogdG9BbGFybVByb3BzKCdtYXhEdXJhdGlvbicsIHdhcm5Qcm9wcz8ubWF4Q3B1VGltZSwgY3JpdFByb3BzPy5tYXhDcHVUaW1lLCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIER1cmF0aW9uVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ1A5MENwdVRvdGFsVGltZUFsYXJtOiB0b0FsYXJtUHJvcHMoJ21heER1cmF0aW9uJywgd2FyblByb3BzPy5wOTBDcHVUaW1lLCBjcml0UHJvcHM/LnA5MENwdVRpbWUsIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgUmVjb3JkPHN0cmluZywgRHVyYXRpb25UaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nQXZnQ3B1VG90YWxUaW1lQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4RHVyYXRpb24nLCB3YXJuUHJvcHM/LmF2Z0NwdVRpbWUsIGNyaXRQcm9wcz8uYXZnQ3B1VGltZSwgd2FybkFjdGlvbnMsIGNyaXRBY3Rpb25zKSBhcyAgUmVjb3JkPHN0cmluZywgRHVyYXRpb25UaHJlc2hvbGQ+LFxuICAgICAgYWRkRW5oYW5jZWRNb25pdG9yaW5nTWF4TWVtb3J5VXRpbGl6YXRpb25BbGFybTogdG9BbGFybVByb3BzKCdtYXhVc2FnZVBlcmNlbnQnLCB3YXJuUHJvcHM/Lm1heE1lbW9yeSwgY3JpdFByb3BzPy5tYXhNZW1vcnksIHdhcm5BY3Rpb25zLCBjcml0QWN0aW9ucykgYXMgIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ1A5ME1lbW9yeVV0aWxpemF0aW9uQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VXNhZ2VQZXJjZW50Jywgd2FyblByb3BzPy5wOTBNZW1vcnksIGNyaXRQcm9wcz8ucDkwTWVtb3J5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICAgIGFkZEVuaGFuY2VkTW9uaXRvcmluZ0F2Z01lbW9yeVV0aWxpemF0aW9uQWxhcm06IHRvQWxhcm1Qcm9wcygnbWF4VXNhZ2VQZXJjZW50Jywgd2FyblByb3BzPy5hdmdNZW1vcnksIGNyaXRQcm9wcz8uYXZnTWVtb3J5LCB3YXJuQWN0aW9ucywgY3JpdEFjdGlvbnMpIGFzIFJlY29yZDxzdHJpbmcsIFVzYWdlVGhyZXNob2xkPixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBsb2cgbW9uaXRvcmluZyB0byBkYXNoYm9hcmRcbiAgICBsZXQgY3JpdE1heExvZ0NvdW50ID0gcHJvcHMuY3JpdGljYWxBbGFybVByb3BzPy5tYXhMb2dDb3VudD8/MVxuICAgIGxldCBwYXR0ZXJuID0gJyc7XG4gICAgaWYgKGNyaXRNYXhMb2dDb3VudCA+IDApIHtcbiAgICAgIHBhdHRlcm4gPSBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM/LmRhc2hib2FyZExvZ1BhdHRlcm4/P1B5dGhvbkZ1bmN0aW9uLkRFRkFVTFRfTE9HX0lOU0lHSFRTX1BBVFRFUk5cbiAgICB9XG4gICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5tYXhMb2dDb3VudCAhPT0gdW5kZWZpbmVkICYmIHBhdHRlcm4gIT09IHByb3BzLndhcm5pbmdBbGFybVByb3BzLmRhc2hib2FyZExvZ1BhdHRlcm4pIHtcbiAgICAgIHBhdHRlcm4gKz0gKHBhdHRlcm4gIT09ICcnID8gJ3wnIDogJycpICsgcHJvcHMud2FybmluZ0FsYXJtUHJvcHMuZGFzaGJvYXJkTG9nUGF0dGVyblxuICAgIH1cbiAgICBpZiAocGF0dGVybiAhPT0gJycpIHtcbiAgICAgIHRoaXMubW9uaXRvcmluZy5tb25pdG9yTG9nKHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiB0aGlzLmZ1bmN0aW9uLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcGF0dGVybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCBjcml0aWNhbCBsb2cgYWxhcm1cbiAgICBpZiAoY3JpdE1heExvZ0NvdW50ID4gMCkge1xuICAgICAgdGhpcy5jcml0aWNhbExvZ0FsYXJtID0gbmV3IExvZ0FsYXJtKHRoaXMsICdMb2dzQ3JpdGljYWwnLCB7XG4gICAgICAgIGxvZ0dyb3VwOiB0aGlzLmZ1bmN0aW9uLmxvZ0dyb3VwLFxuICAgICAgICBwYXR0ZXJuOiBwcm9wcy5jcml0aWNhbEFsYXJtUHJvcHM/Lm1ldHJpY0xvZ1BhdHRlcm4/P1B5dGhvbkZ1bmN0aW9uLkRFRkFVTFRfTE9HX01FVFJJQ19QQVRURVJOLFxuICAgICAgICB0aHJlc2hvbGQ6IGNyaXRNYXhMb2dDb3VudCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDNcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8ubm90aWZ5QWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY3JpdGljYWxMb2dBbGFybS5hZGRBbGFybUFjdGlvbnMocHJvcHMuY3JpdGljYWxBbGFybVByb3BzLm5vdGlmeUFjdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcz8ubm90aWZ5VG9waWNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jcml0aWNhbExvZ0FsYXJtLmFkZEFsYXJtVG9waWNzKHByb3BzLmNyaXRpY2FsQWxhcm1Qcm9wcy5ub3RpZnlUb3BpY3MpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB3YXJuaW5nIGxvZyBhbGFybVxuICAgIGlmIChwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcz8ubWF4TG9nQ291bnQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5tYXhMb2dDb3VudCA+IDApIHtcbiAgICAgIHRoaXMud2FybmluZ0xvZ0FsYXJtID0gbmV3IExvZ0FsYXJtKHRoaXMsICdMb2dzV2FybmluZycsIHtcbiAgICAgICAgbG9nR3JvdXA6IHRoaXMuZnVuY3Rpb24ubG9nR3JvdXAsXG4gICAgICAgIHBhdHRlcm46IHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5tZXRyaWNMb2dQYXR0ZXJuPz9QeXRob25GdW5jdGlvbi5ERUZBVUxUX0xPR19NRVRSSUNfUEFUVEVSTixcbiAgICAgICAgdGhyZXNob2xkOiBwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5tYXhMb2dDb3VudCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDNcbiAgICAgIH0pO1xuICAgICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5ub3RpZnlBY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nQWxhcm0uYWRkQWxhcm1BY3Rpb25zKHByb3BzLndhcm5pbmdBbGFybVByb3BzLm5vdGlmeUFjdGlvbnMpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLndhcm5pbmdBbGFybVByb3BzPy5ub3RpZnlUb3BpY3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLndhcm5pbmdMb2dBbGFybS5hZGRBbGFybVRvcGljcyhwcm9wcy53YXJuaW5nQWxhcm1Qcm9wcy5ub3RpZnlUb3BpY3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|