@liflig/cdk 2.7.0 → 2.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/alarms/database-alarms.d.ts +125 -0
- package/lib/alarms/database-alarms.js +175 -0
- package/lib/alarms/index.d.ts +1 -0
- package/lib/alarms/index.js +4 -2
- package/lib/alarms/service-alarms.d.ts +111 -6
- package/lib/alarms/service-alarms.js +74 -24
- package/lib/rds/database.d.ts +3 -0
- package/lib/rds/database.js +4 -1
- package/package.json +7 -7
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as constructs from "constructs";
|
|
2
|
+
import * as cdk from "aws-cdk-lib";
|
|
3
|
+
import * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
|
|
4
|
+
import * as ec2 from "aws-cdk-lib/aws-ec2";
|
|
5
|
+
export interface DatabaseAlarmsProps {
|
|
6
|
+
/**
|
|
7
|
+
* The default action to use for CloudWatch alarm state changes
|
|
8
|
+
*/
|
|
9
|
+
action: cloudwatch.IAlarmAction;
|
|
10
|
+
instanceIdentifier: string;
|
|
11
|
+
instanceType: ec2.InstanceType;
|
|
12
|
+
allocatedStorage: cdk.Size;
|
|
13
|
+
}
|
|
14
|
+
export declare class DatabaseAlarms extends constructs.Construct {
|
|
15
|
+
private readonly action;
|
|
16
|
+
private readonly databaseInstanceIdentifier;
|
|
17
|
+
private readonly instanceType;
|
|
18
|
+
private readonly allocatedStorage;
|
|
19
|
+
constructor(scope: constructs.Construct, id: string, props: DatabaseAlarmsProps);
|
|
20
|
+
/**
|
|
21
|
+
* Sets up a CloudWatch Alarm that triggers if the CPU credit balance for
|
|
22
|
+
* a burstable instance breach a certain threshold.
|
|
23
|
+
*
|
|
24
|
+
* NOTE: This alarm is only applicable for burstable instances, and a balance of 0 credits will only have performance
|
|
25
|
+
* implications for T2 instances. T3 and T4g instances will instead cost more for prolonged high CPU utilization after
|
|
26
|
+
* the balance is depleted.
|
|
27
|
+
*/
|
|
28
|
+
addCpuCreditsAlarm(
|
|
29
|
+
/**
|
|
30
|
+
* Configuration for an alarm.
|
|
31
|
+
*
|
|
32
|
+
* @default Configured with sane defaults.
|
|
33
|
+
*/
|
|
34
|
+
props?: {
|
|
35
|
+
/**
|
|
36
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
37
|
+
*/
|
|
38
|
+
action?: cloudwatch.IAlarmAction;
|
|
39
|
+
/**
|
|
40
|
+
* The CloudWatch Alarm will change its state to ALARM if the number of CPU credits drops below this threshold.
|
|
41
|
+
*
|
|
42
|
+
* See https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html#earning-CPU-credits for an overview of maximum CPU credits for various instance types.
|
|
43
|
+
*
|
|
44
|
+
* @default 10% of the maximum earned CPU credits for the instance type.
|
|
45
|
+
*/
|
|
46
|
+
threshold?: number;
|
|
47
|
+
}): void;
|
|
48
|
+
/**
|
|
49
|
+
* Sets up two CloudWatch Alarms for monitoring disk storage space:
|
|
50
|
+
* 1) one that triggers if the available disk storage space is low.
|
|
51
|
+
* 2) one that triggers if the available disk storage space is critcally low.
|
|
52
|
+
*
|
|
53
|
+
* You may want to use different alarm actions for the two alarms, e.g., one can be
|
|
54
|
+
* categorized as a "warning", while the other one can be considered an "alarm".
|
|
55
|
+
*/
|
|
56
|
+
addStorageSpaceAlarms(props?: {
|
|
57
|
+
/**
|
|
58
|
+
* Configuration for an alarm.
|
|
59
|
+
*
|
|
60
|
+
* @default Configured with sane defaults.
|
|
61
|
+
*/
|
|
62
|
+
lowStorageSpaceAlarm?: {
|
|
63
|
+
/**
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
66
|
+
enabled?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
69
|
+
*/
|
|
70
|
+
action?: cloudwatch.IAlarmAction;
|
|
71
|
+
/**
|
|
72
|
+
* @default 25% of the allocated storage.
|
|
73
|
+
*/
|
|
74
|
+
threshold?: cdk.Size;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Configuration for an alarm.
|
|
78
|
+
*
|
|
79
|
+
* @default Configured with sane defaults.
|
|
80
|
+
*/
|
|
81
|
+
criticallyLowStorageSpaceAlarm?: {
|
|
82
|
+
/**
|
|
83
|
+
* @default true
|
|
84
|
+
*/
|
|
85
|
+
enabled?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
88
|
+
*/
|
|
89
|
+
action?: cloudwatch.IAlarmAction;
|
|
90
|
+
/**
|
|
91
|
+
* @default 5% of the allocated storage.
|
|
92
|
+
*/
|
|
93
|
+
threshold?: cdk.Size;
|
|
94
|
+
};
|
|
95
|
+
}): void;
|
|
96
|
+
/**
|
|
97
|
+
* Sets up a CloudWatch Alarm that triggers if the average CPU utilization for
|
|
98
|
+
* the RDS instance exceeds a given threshold.
|
|
99
|
+
*/
|
|
100
|
+
addCpuUtilizationAlarm(
|
|
101
|
+
/**
|
|
102
|
+
* Configuration for an alarm.
|
|
103
|
+
*
|
|
104
|
+
* @default Configured with sane defaults.
|
|
105
|
+
*/
|
|
106
|
+
props?: {
|
|
107
|
+
/**
|
|
108
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
109
|
+
*/
|
|
110
|
+
action?: cloudwatch.IAlarmAction;
|
|
111
|
+
/**
|
|
112
|
+
* The threshold defined as a percentage that determines if CPU utilization should trigger an alarm or not.
|
|
113
|
+
* @default 80
|
|
114
|
+
*/
|
|
115
|
+
threshold?: number;
|
|
116
|
+
/**
|
|
117
|
+
* @default 5
|
|
118
|
+
*/
|
|
119
|
+
evaluationPeriods?: number;
|
|
120
|
+
/**
|
|
121
|
+
* @default 2 minutes
|
|
122
|
+
*/
|
|
123
|
+
period?: cdk.Duration;
|
|
124
|
+
}): void;
|
|
125
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DatabaseAlarms = void 0;
|
|
4
|
+
const constructs = require("constructs");
|
|
5
|
+
const cdk = require("aws-cdk-lib");
|
|
6
|
+
const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
|
|
7
|
+
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
|
|
8
|
+
// Based on https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html#earning-CPU-credits
|
|
9
|
+
const cpuCreditBalanceByInstanceType = {
|
|
10
|
+
"t2.nano": 72,
|
|
11
|
+
"t2.micro": 144,
|
|
12
|
+
"t2.small": 288,
|
|
13
|
+
"t2.medium": 576,
|
|
14
|
+
"t2.large": 864,
|
|
15
|
+
"t2.xlarge": 1296,
|
|
16
|
+
"t2.2xlarge": 1958.4,
|
|
17
|
+
"t3.nano": 144,
|
|
18
|
+
"t3.micro": 288,
|
|
19
|
+
"t3.small": 576,
|
|
20
|
+
"t3.medium": 576,
|
|
21
|
+
"t3.large": 864,
|
|
22
|
+
"t3.xlarge": 2304,
|
|
23
|
+
"t3.2xlarge": 4608,
|
|
24
|
+
"t3a.nano": 144,
|
|
25
|
+
"t3a.micro": 288,
|
|
26
|
+
"t3a.small": 576,
|
|
27
|
+
"t3a.medium": 576,
|
|
28
|
+
"t3a.large": 864,
|
|
29
|
+
"t3a.xlarge": 2304,
|
|
30
|
+
"t3a.2xlarge": 4608,
|
|
31
|
+
"t4g.nano": 144,
|
|
32
|
+
"t4g.micro": 288,
|
|
33
|
+
"t4g.small": 576,
|
|
34
|
+
"t4g.medium": 576,
|
|
35
|
+
"t4g.large": 864,
|
|
36
|
+
"t4g.xlarge": 2304,
|
|
37
|
+
"t4g.2xlarge": 4608,
|
|
38
|
+
};
|
|
39
|
+
class DatabaseAlarms extends constructs.Construct {
|
|
40
|
+
constructor(scope, id, props) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
this.action = props.action;
|
|
43
|
+
this.databaseInstanceIdentifier = props.instanceIdentifier;
|
|
44
|
+
this.instanceType = props.instanceType;
|
|
45
|
+
this.allocatedStorage = props.allocatedStorage;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Sets up a CloudWatch Alarm that triggers if the CPU credit balance for
|
|
49
|
+
* a burstable instance breach a certain threshold.
|
|
50
|
+
*
|
|
51
|
+
* NOTE: This alarm is only applicable for burstable instances, and a balance of 0 credits will only have performance
|
|
52
|
+
* implications for T2 instances. T3 and T4g instances will instead cost more for prolonged high CPU utilization after
|
|
53
|
+
* the balance is depleted.
|
|
54
|
+
*/
|
|
55
|
+
addCpuCreditsAlarm(
|
|
56
|
+
/**
|
|
57
|
+
* Configuration for an alarm.
|
|
58
|
+
*
|
|
59
|
+
* @default Configured with sane defaults.
|
|
60
|
+
*/
|
|
61
|
+
props) {
|
|
62
|
+
var _a;
|
|
63
|
+
if (!["t2.", "t3.", "t4g."].some((s) => this.instanceType.toString().startsWith(s))) {
|
|
64
|
+
throw new Error("CPU credits are only relevant for burstable instance types.");
|
|
65
|
+
}
|
|
66
|
+
const defaultThreshold = cpuCreditBalanceByInstanceType[this.instanceType.toString()] * 0.1;
|
|
67
|
+
const threshold = (_a = props === null || props === void 0 ? void 0 : props.threshold) !== null && _a !== void 0 ? _a : defaultThreshold;
|
|
68
|
+
if (!threshold) {
|
|
69
|
+
throw new Error(`No threshold supplied, and unable to determine a default value for instance type '${this.instanceType.toString()}'`);
|
|
70
|
+
}
|
|
71
|
+
new cloudwatch.Metric({
|
|
72
|
+
metricName: "CPUCreditBalance",
|
|
73
|
+
namespace: "AWS/RDS",
|
|
74
|
+
statistic: "Minimum",
|
|
75
|
+
unit: aws_cloudwatch_1.Unit.COUNT,
|
|
76
|
+
period: cdk.Duration.minutes(5),
|
|
77
|
+
dimensionsMap: {
|
|
78
|
+
DBInstanceIdentifier: this.databaseInstanceIdentifier,
|
|
79
|
+
},
|
|
80
|
+
})
|
|
81
|
+
.createAlarm(this, "CreditsAlarm", {
|
|
82
|
+
alarmDescription: `Less than ${threshold} CPU credits remaining for RDS database '${this.databaseInstanceIdentifier}'. ${this.instanceType.toString().startsWith("t2.")
|
|
83
|
+
? "If this reaches 0, the instance will be limited to a baseline CPU utilization."
|
|
84
|
+
: "If the balance is depleted, AWS adds additional charges."}.`,
|
|
85
|
+
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
86
|
+
evaluationPeriods: 1,
|
|
87
|
+
threshold: threshold,
|
|
88
|
+
treatMissingData: cloudwatch.TreatMissingData.IGNORE,
|
|
89
|
+
})
|
|
90
|
+
.addAlarmAction(this.action);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Sets up two CloudWatch Alarms for monitoring disk storage space:
|
|
94
|
+
* 1) one that triggers if the available disk storage space is low.
|
|
95
|
+
* 2) one that triggers if the available disk storage space is critcally low.
|
|
96
|
+
*
|
|
97
|
+
* You may want to use different alarm actions for the two alarms, e.g., one can be
|
|
98
|
+
* categorized as a "warning", while the other one can be considered an "alarm".
|
|
99
|
+
*/
|
|
100
|
+
addStorageSpaceAlarms(props) {
|
|
101
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
102
|
+
const lowStorageSpaceAlarm = new cloudwatch.Metric({
|
|
103
|
+
metricName: "FreeStorageSpace",
|
|
104
|
+
namespace: "AWS/RDS",
|
|
105
|
+
statistic: "Minimum",
|
|
106
|
+
unit: aws_cloudwatch_1.Unit.GIGABYTES,
|
|
107
|
+
period: cdk.Duration.minutes(5),
|
|
108
|
+
dimensionsMap: {
|
|
109
|
+
DBInstanceIdentifier: this.databaseInstanceIdentifier,
|
|
110
|
+
},
|
|
111
|
+
}).createAlarm(this, "LowStorageSpaceAlarm", {
|
|
112
|
+
alarmDescription: `Low storage space available on RDS database '${this.databaseInstanceIdentifier}'.`,
|
|
113
|
+
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
114
|
+
evaluationPeriods: 1,
|
|
115
|
+
threshold: (_c = (_b = (_a = props === null || props === void 0 ? void 0 : props.lowStorageSpaceAlarm) === null || _a === void 0 ? void 0 : _a.threshold) === null || _b === void 0 ? void 0 : _b.toGibibytes()) !== null && _c !== void 0 ? _c : this.allocatedStorage.toGibibytes() * 0.25,
|
|
116
|
+
treatMissingData: cloudwatch.TreatMissingData.IGNORE,
|
|
117
|
+
});
|
|
118
|
+
if ((_e = (_d = props === null || props === void 0 ? void 0 : props.lowStorageSpaceAlarm) === null || _d === void 0 ? void 0 : _d.enabled) !== null && _e !== void 0 ? _e : true) {
|
|
119
|
+
lowStorageSpaceAlarm.addAlarmAction(((_f = props === null || props === void 0 ? void 0 : props.lowStorageSpaceAlarm) === null || _f === void 0 ? void 0 : _f.action) || this.action);
|
|
120
|
+
lowStorageSpaceAlarm.addOkAction(((_g = props === null || props === void 0 ? void 0 : props.lowStorageSpaceAlarm) === null || _g === void 0 ? void 0 : _g.action) || this.action);
|
|
121
|
+
}
|
|
122
|
+
const criticallyLowStorageSpaceAlarm = new cloudwatch.Metric({
|
|
123
|
+
metricName: "FreeStorageSpace",
|
|
124
|
+
namespace: "AWS/RDS",
|
|
125
|
+
statistic: "Minimum",
|
|
126
|
+
unit: aws_cloudwatch_1.Unit.GIGABYTES,
|
|
127
|
+
period: cdk.Duration.minutes(5),
|
|
128
|
+
dimensionsMap: {
|
|
129
|
+
DBInstanceIdentifier: this.databaseInstanceIdentifier,
|
|
130
|
+
},
|
|
131
|
+
}).createAlarm(this, "CriticallyLowStorageSpaceAlarm", {
|
|
132
|
+
alarmDescription: `Critically low storage space available on RDS database '${this.databaseInstanceIdentifier}'.`,
|
|
133
|
+
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
134
|
+
evaluationPeriods: 1,
|
|
135
|
+
threshold: (_k = (_j = (_h = props === null || props === void 0 ? void 0 : props.criticallyLowStorageSpaceAlarm) === null || _h === void 0 ? void 0 : _h.threshold) === null || _j === void 0 ? void 0 : _j.toGibibytes()) !== null && _k !== void 0 ? _k : this.allocatedStorage.toGibibytes() * 0.05,
|
|
136
|
+
treatMissingData: cloudwatch.TreatMissingData.IGNORE,
|
|
137
|
+
});
|
|
138
|
+
if ((_m = (_l = props === null || props === void 0 ? void 0 : props.criticallyLowStorageSpaceAlarm) === null || _l === void 0 ? void 0 : _l.enabled) !== null && _m !== void 0 ? _m : true) {
|
|
139
|
+
criticallyLowStorageSpaceAlarm.addAlarmAction(((_o = props === null || props === void 0 ? void 0 : props.criticallyLowStorageSpaceAlarm) === null || _o === void 0 ? void 0 : _o.action) || this.action);
|
|
140
|
+
criticallyLowStorageSpaceAlarm.addOkAction(((_p = props === null || props === void 0 ? void 0 : props.criticallyLowStorageSpaceAlarm) === null || _p === void 0 ? void 0 : _p.action) || this.action);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Sets up a CloudWatch Alarm that triggers if the average CPU utilization for
|
|
145
|
+
* the RDS instance exceeds a given threshold.
|
|
146
|
+
*/
|
|
147
|
+
addCpuUtilizationAlarm(
|
|
148
|
+
/**
|
|
149
|
+
* Configuration for an alarm.
|
|
150
|
+
*
|
|
151
|
+
* @default Configured with sane defaults.
|
|
152
|
+
*/
|
|
153
|
+
props) {
|
|
154
|
+
var _a, _b, _c, _d, _e;
|
|
155
|
+
const alarm = new cloudwatch.Metric({
|
|
156
|
+
metricName: "CPUUtilization",
|
|
157
|
+
namespace: "AWS/RDS",
|
|
158
|
+
statistic: "Average",
|
|
159
|
+
period: (_a = props === null || props === void 0 ? void 0 : props.period) !== null && _a !== void 0 ? _a : cdk.Duration.minutes(2),
|
|
160
|
+
dimensionsMap: {
|
|
161
|
+
DBInstanceIdentifier: this.databaseInstanceIdentifier,
|
|
162
|
+
},
|
|
163
|
+
}).createAlarm(this, "CpuUtilizationAlarm", {
|
|
164
|
+
alarmDescription: `RDS database '${this.databaseInstanceIdentifier}' has a higher than expected CPU utilization.`,
|
|
165
|
+
comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
166
|
+
evaluationPeriods: (_b = props === null || props === void 0 ? void 0 : props.evaluationPeriods) !== null && _b !== void 0 ? _b : 5,
|
|
167
|
+
threshold: (_c = props === null || props === void 0 ? void 0 : props.threshold) !== null && _c !== void 0 ? _c : 80,
|
|
168
|
+
treatMissingData: cloudwatch.TreatMissingData.IGNORE,
|
|
169
|
+
});
|
|
170
|
+
alarm.addAlarmAction((_d = props === null || props === void 0 ? void 0 : props.action) !== null && _d !== void 0 ? _d : this.action);
|
|
171
|
+
alarm.addOkAction((_e = props === null || props === void 0 ? void 0 : props.action) !== null && _e !== void 0 ? _e : this.action);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.DatabaseAlarms = DatabaseAlarms;
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtYWxhcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtcy9kYXRhYmFzZS1hbGFybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBQ3hDLG1DQUFrQztBQUNsQyx5REFBd0Q7QUFFeEQsK0RBQWlEO0FBWWpELDRIQUE0SDtBQUM1SCxNQUFNLDhCQUE4QixHQUVoQztJQUNGLFNBQVMsRUFBRSxFQUFFO0lBQ2IsVUFBVSxFQUFFLEdBQUc7SUFDZixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsWUFBWSxFQUFFLE1BQU07SUFDcEIsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsR0FBRztJQUNmLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsSUFBSTtJQUNsQixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGFBQWEsRUFBRSxJQUFJO0lBQ25CLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEdBQUc7SUFDaEIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsWUFBWSxFQUFFLEdBQUc7SUFDakIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsYUFBYSxFQUFFLElBQUk7Q0FDcEIsQ0FBQTtBQUVELE1BQWEsY0FBZSxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBTXRELFlBQ0UsS0FBMkIsRUFDM0IsRUFBVSxFQUNWLEtBQTBCO1FBRTFCLEtBQUssQ0FBQyxL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LENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoRCxhQUFhLEVBQUU7Z0JBQ2Isb0JBQW9CLEVBQUUsSUFBSSxDQUFDLDBCQUEwQjthQUN0RDtTQUNGLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQzFDLGdCQUFnQixFQUFFLGlCQUFpQixJQUFJLENBQUMsMEJBQTBCLCtDQUErQztZQUNqSCxrQkFBa0IsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCO1lBQ3hFLGlCQUFpQixFQUFFLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGlCQUFpQixtQ0FBSSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLG1DQUFJLEVBQUU7WUFDakMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU07U0FDckQsQ0FBQyxDQUFBO1FBQ0YsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLG1DQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNsRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLE1BQU0sbUNBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2pELENBQUM7Q0FDRjtBQW5QRCx3Q0FtUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIlxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCJcbmltcG9ydCB7IFVuaXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQWxhcm1zUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgYWN0aW9uIHRvIHVzZSBmb3IgQ2xvdWRXYXRjaCBhbGFybSBzdGF0ZSBjaGFuZ2VzXG4gICAqL1xuICBhY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gIGluc3RhbmNlSWRlbnRpZmllcjogc3RyaW5nXG4gIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZVxuICBhbGxvY2F0ZWRTdG9yYWdlOiBjZGsuU2l6ZVxufVxuXG4vLyBCYXNlZCBvbiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLWNyZWRpdHMtYmFzZWxpbmUtY29uY2VwdHMuaHRtbCNlYXJuaW5nLUNQVS1jcmVkaXRzXG5jb25zdCBjcHVDcmVkaXRCYWxhbmNlQnlJbnN0YW5jZVR5cGU6IHtcbiAgW2luc3RhbmNlVHlwZTogc3RyaW5nXTogbnVtYmVyXG59ID0ge1xuICBcInQyLm5hbm9cIjogNzIsXG4gIFwidDIubWljcm9cIjogMTQ0LFxuICBcInQyLnNtYWxsXCI6IDI4OCxcbiAgXCJ0Mi5tZWRpdW1cIjogNTc2LFxuICBcInQyLmxhcmdlXCI6IDg2NCxcbiAgXCJ0Mi54bGFyZ2VcIjogMTI5NixcbiAgXCJ0Mi4yeGxhcmdlXCI6IDE5NTguNCxcbiAgXCJ0My5uYW5vXCI6IDE0NCxcbiAgXCJ0My5taWNyb1wiOiAyODgsXG4gIFwidDMuc21hbGxcIjogNTc2LFxuICBcInQzLm1lZGl1bVwiOiA1NzYsXG4gIFwidDMubGFyZ2VcIjogODY0LFxuICBcInQzLnhsYXJnZVwiOiAyMzA0LFxuICBcInQzLjJ4bGFyZ2VcIjogNDYwOCxcbiAgXCJ0M2EubmFub1wiOiAxNDQsXG4gIFwidDNhLm1pY3JvXCI6IDI4OCxcbiAgXCJ0M2Euc21hbGxcIjogNTc2LFxuICBcInQzYS5tZWRpdW1cIjogNTc2LFxuICBcInQzYS5sYXJnZVwiOiA4NjQsXG4gIFwidDNhLnhsYXJnZVwiOiAyMzA0LFxuICBcInQzYS4yeGxhcmdlXCI6IDQ2MDgsXG4gIFwidDRnLm5hbm9cIjogMTQ0LFxuICBcInQ0Zy5taWNyb1wiOiAyODgsXG4gIFwidDRnLnNtYWxsXCI6IDU3NixcbiAgXCJ0NGcubWVkaXVtXCI6IDU3NixcbiAgXCJ0NGcubGFyZ2VcIjogODY0LFxuICBcInQ0Zy54bGFyZ2VcIjogMjMwNCxcbiAgXCJ0NGcuMnhsYXJnZVwiOiA0NjA4LFxufVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VBbGFybXMgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyOiBzdHJpbmdcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGVcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvY2F0ZWRTdG9yYWdlOiBjZGsuU2l6ZVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEYXRhYmFzZUFsYXJtc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmFjdGlvbiA9IHByb3BzLmFjdGlvblxuICAgIHRoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXIgPSBwcm9wcy5pbnN0YW5jZUlkZW50aWZpZXJcbiAgICB0aGlzLmluc3RhbmNlVHlwZSA9IHByb3BzLmluc3RhbmNlVHlwZVxuICAgIHRoaXMuYWxsb2NhdGVkU3RvcmFnZSA9IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgQ2xvdWRXYXRjaCBBbGFybSB0aGF0IHRyaWdnZXJzIGlmIHRoZSBDUFUgY3JlZGl0IGJhbGFuY2UgZm9yXG4gICAqIGEgYnVyc3RhYmxlIGluc3RhbmNlIGJyZWFjaCBhIGNlcnRhaW4gdGhyZXNob2xkLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIGFsYXJtIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgYnVyc3RhYmxlIGluc3RhbmNlcywgYW5kIGEgYmFsYW5jZSBvZiAwIGNyZWRpdHMgd2lsbCBvbmx5IGhhdmUgcGVyZm9ybWFuY2VcbiAgICogaW1wbGljYXRpb25zIGZvciBUMiBpbnN0YW5jZXMuIFQzIGFuZCBUNGcgaW5zdGFuY2VzIHdpbGwgaW5zdGVhZCBjb3N0IG1vcmUgZm9yIHByb2xvbmdlZCBoaWdoIENQVSB1dGlsaXphdGlvbiBhZnRlclxuICAgKiB0aGUgYmFsYW5jZSBpcyBkZXBsZXRlZC5cbiAgICovXG4gIGFkZENwdUNyZWRpdHNBbGFybShcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIHByb3BzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgIC8qKlxuICAgICAgICogVGhlIENsb3VkV2F0Y2ggQWxhcm0gd2lsbCBjaGFuZ2UgaXRzIHN0YXRlIHRvIEFMQVJNIGlmIHRoZSBudW1iZXIgb2YgQ1BVIGNyZWRpdHMgZHJvcHMgYmVsb3cgdGhpcyB0aHJlc2hvbGQuXG4gICAgICAgKlxuICAgICAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9idXJzdGFibGUtY3JlZGl0cy1iYXNlbGluZS1jb25jZXB0cy5odG1sI2Vhcm5pbmctQ1BVLWNyZWRpdHMgZm9yIGFuIG92ZXJ2aWV3IG9mIG1heGltdW0gQ1BVIGNyZWRpdHMgZm9yIHZhcmlvdXMgaW5zdGFuY2UgdHlwZXMuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgMTAlIG9mIHRoZSBtYXhpbXVtIGVhcm5lZCBDUFUgY3JlZGl0cyBmb3IgdGhlIGluc3RhbmNlIHR5cGUuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlclxuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICFbXCJ0Mi5cIiwgXCJ0My5cIiwgXCJ0NGcuXCJdLnNvbWUoKHMpID0+XG4gICAgICAgIHRoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChzKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDUFUgY3JlZGl0cyBhcmUgb25seSByZWxldmFudCBmb3IgYnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzLlwiLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRUaHJlc2hvbGQgPVxuICAgICAgY3B1Q3JlZGl0QmFsYW5jZUJ5SW5zdGFuY2VUeXBlW3RoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCldICogMC4xXG4gICAgY29uc3QgdGhyZXNob2xkID0gcHJvcHM/LnRocmVzaG9sZCA/PyBkZWZhdWx0VGhyZXNob2xkXG4gICAgaWYgKCF0aHJlc2hvbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIHRocmVzaG9sZCBzdXBwbGllZCwgYW5kIHVuYWJsZSB0byBkZXRlcm1pbmUgYSBkZWZhdWx0IHZhbHVlIGZvciBpbnN0YW5jZSB0eXBlICcke3RoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCl9J2AsXG4gICAgICApXG4gICAgfVxuICAgIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIkNQVUNyZWRpdEJhbGFuY2VcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiTWluaW11bVwiLFxuICAgICAgdW5pdDogVW5pdC5DT1VOVCxcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICB9KVxuICAgICAgLmNyZWF0ZUFsYXJtKHRoaXMsIFwiQ3JlZGl0c0FsYXJtXCIsIHtcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYExlc3MgdGhhbiAke3RocmVzaG9sZH0gQ1BVIGNyZWRpdHMgcmVtYWluaW5nIGZvciBSRFMgZGF0YWJhc2UgJyR7XG4gICAgICAgICAgdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllclxuICAgICAgICB9Jy4gJHtcbiAgICAgICAgICB0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoXCJ0Mi5cIilcbiAgICAgICAgICAgID8gXCJJZiB0aGlzIHJlYWNoZXMgMCwgdGhlIGluc3RhbmNlIHdpbGwgYmUgbGltaXRlZCB0byBhIGJhc2VsaW5lIENQVSB1dGlsaXphdGlvbi5cIlxuICAgICAgICAgICAgOiBcIklmIHRoZSBiYWxhbmNlIGlzIGRlcGxldGVkLCBBV1MgYWRkcyBhZGRpdGlvbmFsIGNoYXJnZXMuXCJcbiAgICAgICAgfS5gLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICB0aHJlc2hvbGQ6IHRocmVzaG9sZCxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICAgIH0pXG4gICAgICAuYWRkQWxhcm1BY3Rpb24odGhpcy5hY3Rpb24pXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0d28gQ2xvdWRXYXRjaCBBbGFybXMgZm9yIG1vbml0b3JpbmcgZGlzayBzdG9yYWdlIHNwYWNlOlxuICAgKiAxKSBvbmUgdGhhdCB0cmlnZ2VycyBpZiB0aGUgYXZhaWxhYmxlIGRpc2sgc3RvcmFnZSBzcGFjZSBpcyBsb3cuXG4gICAqIDIpIG9uZSB0aGF0IHRyaWdnZXJzIGlmIHRoZSBhdmFpbGFibGUgZGlzayBzdG9yYWdlIHNwYWNlIGlzIGNyaXRjYWxseSBsb3cuXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byB1c2UgZGlmZmVyZW50IGFsYXJtIGFjdGlvbnMgZm9yIHRoZSB0d28gYWxhcm1zLCBlLmcuLCBvbmUgY2FuIGJlXG4gICAqIGNhdGVnb3JpemVkIGFzIGEgXCJ3YXJuaW5nXCIsIHdoaWxlIHRoZSBvdGhlciBvbmUgY2FuIGJlIGNvbnNpZGVyZWQgYW4gXCJhbGFybVwiLlxuICAgKi9cbiAgYWRkU3RvcmFnZVNwYWNlQWxhcm1zKHByb3BzPzoge1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGFuIGFsYXJtLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgQ29uZmlndXJlZCB3aXRoIHNhbmUgZGVmYXVsdHMuXG4gICAgICovXG4gICAgbG93U3RvcmFnZVNwYWNlQWxhcm0/OiB7XG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAgIC8qKlxuICAgICAgICogQW4gYWN0aW9uIHRvIHVzZSBmb3IgQ2xvdWRXYXRjaCBhbGFybSBzdGF0ZSBjaGFuZ2VzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgICAgKi9cbiAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDI1JSBvZiB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IGNkay5TaXplXG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGFuIGFsYXJtLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgQ29uZmlndXJlZCB3aXRoIHNhbmUgZGVmYXVsdHMuXG4gICAgICovXG4gICAgY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA1JSBvZiB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IGNkay5TaXplXG4gICAgfVxuICB9KTogdm9pZCB7XG4gICAgY29uc3QgbG93U3RvcmFnZVNwYWNlQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJGcmVlU3RvcmFnZVNwYWNlXCIsXG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL1JEU1wiLFxuICAgICAgc3RhdGlzdGljOiBcIk1pbmltdW1cIixcbiAgICAgIHVuaXQ6IFVuaXQuR0lHQUJZVEVTLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IHRoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXIsXG4gICAgICB9LFxuICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsIFwiTG93U3RvcmFnZVNwYWNlQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYExvdyBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZSBvbiBSRFMgZGF0YWJhc2UgJyR7dGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcn0nLmAsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIHRocmVzaG9sZDpcbiAgICAgICAgcHJvcHM/Lmxvd1N0b3JhZ2VTcGFjZUFsYXJtPy50aHJlc2hvbGQ/LnRvR2liaWJ5dGVzKCkgPz9cbiAgICAgICAgdGhpcy5hbGxvY2F0ZWRTdG9yYWdlLnRvR2liaWJ5dGVzKCkgKiAwLjI1LFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuICAgIGlmIChwcm9wcz8ubG93U3RvcmFnZVNwYWNlQWxhcm0/LmVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgbG93U3RvcmFnZVNwYWNlQWxhcm0uYWRkQWxhcm1BY3Rpb24oXG4gICAgICAgIHByb3BzPy5sb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uIHx8IHRoaXMuYWN0aW9uLFxuICAgICAgKVxuICAgICAgbG93U3RvcmFnZVNwYWNlQWxhcm0uYWRkT2tBY3Rpb24oXG4gICAgICAgIHByb3BzPy5sb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uIHx8IHRoaXMuYWN0aW9uLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybSA9IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIkZyZWVTdG9yYWdlU3BhY2VcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiTWluaW11bVwiLFxuICAgICAgdW5pdDogVW5pdC5HSUdBQllURVMsXG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgfSkuY3JlYXRlQWxhcm0odGhpcywgXCJDcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYENyaXRpY2FsbHkgbG93IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlIG9uIFJEUyBkYXRhYmFzZSAnJHt0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyfScuYCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgdGhyZXNob2xkOlxuICAgICAgICBwcm9wcz8uY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtPy50aHJlc2hvbGQ/LnRvR2liaWJ5dGVzKCkgPz9cbiAgICAgICAgdGhpcy5hbGxvY2F0ZWRTdG9yYWdlLnRvR2liaWJ5dGVzKCkgKiAwLjA1LFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuICAgIGlmIChwcm9wcz8uY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtPy5lbmFibGVkID8/IHRydWUpIHtcbiAgICAgIGNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybS5hZGRBbGFybUFjdGlvbihcbiAgICAgICAgcHJvcHM/LmNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uIHx8IHRoaXMuYWN0aW9uLFxuICAgICAgKVxuICAgICAgY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZE9rQWN0aW9uKFxuICAgICAgICBwcm9wcz8uY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtPy5hY3Rpb24gfHwgdGhpcy5hY3Rpb24sXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgYSBDbG91ZFdhdGNoIEFsYXJtIHRoYXQgdHJpZ2dlcnMgaWYgdGhlIGF2ZXJhZ2UgQ1BVIHV0aWxpemF0aW9uIGZvclxuICAgKiB0aGUgUkRTIGluc3RhbmNlIGV4Y2VlZHMgYSBnaXZlbiB0aHJlc2hvbGQuXG4gICAqL1xuICBhZGRDcHVVdGlsaXphdGlvbkFsYXJtKFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYXRpb24gZm9yIGFuIGFsYXJtLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgQ29uZmlndXJlZCB3aXRoIHNhbmUgZGVmYXVsdHMuXG4gICAgICovXG4gICAgcHJvcHM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdGhyZXNob2xkIGRlZmluZWQgYXMgYSBwZXJjZW50YWdlIHRoYXQgZGV0ZXJtaW5lcyBpZiBDUFUgdXRpbGl6YXRpb24gc2hvdWxkIHRyaWdnZXIgYW4gYWxhcm0gb3Igbm90LlxuICAgICAgICogQGRlZmF1bHQgODBcbiAgICAgICAqL1xuICAgICAgdGhyZXNob2xkPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDVcbiAgICAgICAqL1xuICAgICAgZXZhbHVhdGlvblBlcmlvZHM/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgMiBtaW51dGVzXG4gICAgICAgKi9cbiAgICAgIHBlcmlvZD86IGNkay5EdXJhdGlvblxuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWU6IFwiQ1BVVXRpbGl6YXRpb25cIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiQXZlcmFnZVwiLFxuICAgICAgcGVyaW9kOiBwcm9wcz8ucGVyaW9kID8/IGNkay5EdXJhdGlvbi5taW51dGVzKDIpLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgfSkuY3JlYXRlQWxhcm0odGhpcywgXCJDcHVVdGlsaXphdGlvbkFsYXJtXCIsIHtcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBSRFMgZGF0YWJhc2UgJyR7dGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcn0nIGhhcyBhIGhpZ2hlciB0aGFuIGV4cGVjdGVkIENQVSB1dGlsaXphdGlvbi5gLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzPy5ldmFsdWF0aW9uUGVyaW9kcyA/PyA1LFxuICAgICAgdGhyZXNob2xkOiBwcm9wcz8udGhyZXNob2xkID8/IDgwLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuICAgIGFsYXJtLmFkZEFsYXJtQWN0aW9uKHByb3BzPy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24pXG4gICAgYWxhcm0uYWRkT2tBY3Rpb24ocHJvcHM/LmFjdGlvbiA/PyB0aGlzLmFjdGlvbilcbiAgfVxufVxuIl19
|
package/lib/alarms/index.d.ts
CHANGED
package/lib/alarms/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SlackAlarm = exports.ServiceAlarms = void 0;
|
|
3
|
+
exports.SlackAlarm = exports.ServiceAlarms = exports.DatabaseAlarms = void 0;
|
|
4
|
+
var database_alarms_1 = require("./database-alarms");
|
|
5
|
+
Object.defineProperty(exports, "DatabaseAlarms", { enumerable: true, get: function () { return database_alarms_1.DatabaseAlarms; } });
|
|
4
6
|
var service_alarms_1 = require("./service-alarms");
|
|
5
7
|
Object.defineProperty(exports, "ServiceAlarms", { enumerable: true, get: function () { return service_alarms_1.ServiceAlarms; } });
|
|
6
8
|
var slack_alarm_1 = require("./slack-alarm");
|
|
7
9
|
Object.defineProperty(exports, "SlackAlarm", { enumerable: true, get: function () { return slack_alarm_1.SlackAlarm; } });
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RTtBQUE5RCxpSEFBQSxjQUFjLE9BQUE7QUFDdkIsbURBQW9FO0FBQTNELCtHQUFBLGFBQWEsT0FBQTtBQUN0Qiw2Q0FBMkQ7QUFBbEQseUdBQUEsVUFBVSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGF0YWJhc2VBbGFybXMsIERhdGFiYXNlQWxhcm1zUHJvcHMgfSBmcm9tIFwiLi9kYXRhYmFzZS1hbGFybXNcIlxuZXhwb3J0IHsgU2VydmljZUFsYXJtcywgU2VydmljZUFsYXJtc1Byb3BzIH0gZnJvbSBcIi4vc2VydmljZS1hbGFybXNcIlxuZXhwb3J0IHsgU2xhY2tBbGFybSwgU2xhY2tBbGFybVByb3BzIH0gZnJvbSBcIi4vc2xhY2stYWxhcm1cIlxuIl19
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as cdk from "aws-cdk-lib";
|
|
2
2
|
import * as cloudwatch from "aws-cdk-lib/aws-cloudwatch";
|
|
3
3
|
import * as logs from "aws-cdk-lib/aws-logs";
|
|
4
|
-
import * as
|
|
4
|
+
import * as constructs from "constructs";
|
|
5
5
|
export interface ServiceAlarmsProps extends cdk.StackProps {
|
|
6
|
+
/**
|
|
7
|
+
* The default action to use for CloudWatch alarm state changes
|
|
8
|
+
*/
|
|
6
9
|
action: cloudwatch.IAlarmAction;
|
|
10
|
+
/**
|
|
11
|
+
* The name of the ECS service.
|
|
12
|
+
*/
|
|
7
13
|
serviceName: string;
|
|
8
14
|
}
|
|
9
15
|
/**
|
|
@@ -26,15 +32,114 @@ export declare class ServiceAlarms extends constructs.Construct {
|
|
|
26
32
|
addJsonErrorAlarm(props: {
|
|
27
33
|
logGroup: logs.ILogGroup;
|
|
28
34
|
alarmDescription?: string;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
35
|
+
/**
|
|
36
|
+
* Set to `false` to stop the alarm from sending OK events.
|
|
37
|
+
* @default true
|
|
38
|
+
* */
|
|
31
39
|
enableOkAction?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
42
|
+
*/
|
|
43
|
+
action?: cloudwatch.IAlarmAction;
|
|
32
44
|
}): void;
|
|
33
45
|
/**
|
|
34
|
-
*
|
|
46
|
+
* Sets up three CloudWatch Alarms for monitoring an ECS service behind a target group:
|
|
47
|
+
* 1) one that triggers if the target is responding with too many 5xx errors.
|
|
48
|
+
* 2) one that triggers if the 95% percentile of response times from the target is too high.
|
|
49
|
+
* 3) one that triggers if there are no healthy targets or if the load balancer fails to connect to targets.
|
|
35
50
|
*/
|
|
36
|
-
|
|
51
|
+
addTargetGroupAlarms(props: {
|
|
52
|
+
/**
|
|
53
|
+
* The full name of the target group.
|
|
54
|
+
*/
|
|
37
55
|
targetGroupFullName: string;
|
|
56
|
+
/**
|
|
57
|
+
* The full name of the application load balancer.
|
|
58
|
+
*/
|
|
38
59
|
loadBalancerFullName: string;
|
|
60
|
+
/**
|
|
61
|
+
* Configuration for a composite alarm.
|
|
62
|
+
*
|
|
63
|
+
* @default Configured with sane defaults.
|
|
64
|
+
*/
|
|
65
|
+
targetHealthAlarm?: {
|
|
66
|
+
/**
|
|
67
|
+
* @default true
|
|
68
|
+
*/
|
|
69
|
+
enabled?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
72
|
+
*/
|
|
73
|
+
action?: cloudwatch.IAlarmAction;
|
|
74
|
+
/**
|
|
75
|
+
* @default 60 seconds
|
|
76
|
+
*/
|
|
77
|
+
period?: cdk.Duration;
|
|
78
|
+
/**
|
|
79
|
+
* @default 1
|
|
80
|
+
*/
|
|
81
|
+
evaluationPeriods?: number;
|
|
82
|
+
/**
|
|
83
|
+
* @default 1
|
|
84
|
+
*/
|
|
85
|
+
threshold?: number;
|
|
86
|
+
description?: string;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Configuration for an alarm.
|
|
90
|
+
*
|
|
91
|
+
* @default Configured with sane defaults.
|
|
92
|
+
*/
|
|
93
|
+
tooMany5xxResponsesFromTargetsAlarm?: {
|
|
94
|
+
/**
|
|
95
|
+
* @default true
|
|
96
|
+
*/
|
|
97
|
+
enabled?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
100
|
+
*/
|
|
101
|
+
action?: cloudwatch.IAlarmAction;
|
|
102
|
+
/**
|
|
103
|
+
* @default 60 seconds
|
|
104
|
+
*/
|
|
105
|
+
period?: cdk.Duration;
|
|
106
|
+
/**
|
|
107
|
+
* @default 3
|
|
108
|
+
*/
|
|
109
|
+
evaluationPeriods?: number;
|
|
110
|
+
/**
|
|
111
|
+
* @default 10
|
|
112
|
+
*/
|
|
113
|
+
threshold?: number;
|
|
114
|
+
description?: string;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Configuration for an alarm.
|
|
118
|
+
*
|
|
119
|
+
* @default Configured with sane defaults.
|
|
120
|
+
*/
|
|
121
|
+
targetResponseTimeAlarm?: {
|
|
122
|
+
/**
|
|
123
|
+
* @default true
|
|
124
|
+
*/
|
|
125
|
+
enabled?: boolean;
|
|
126
|
+
/**
|
|
127
|
+
* An action to use for CloudWatch alarm state changes instead of the default action
|
|
128
|
+
*/
|
|
129
|
+
action?: cloudwatch.IAlarmAction;
|
|
130
|
+
/**
|
|
131
|
+
* @default 5 minutes
|
|
132
|
+
*/
|
|
133
|
+
period?: cdk.Duration;
|
|
134
|
+
/**
|
|
135
|
+
* @default 1
|
|
136
|
+
*/
|
|
137
|
+
evaluationPeriods?: number;
|
|
138
|
+
/**
|
|
139
|
+
* @default 500 milliseconds
|
|
140
|
+
*/
|
|
141
|
+
threshold?: cdk.Duration;
|
|
142
|
+
description?: string;
|
|
143
|
+
};
|
|
39
144
|
}): void;
|
|
40
145
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceAlarms = void 0;
|
|
4
|
-
const
|
|
4
|
+
const cdk = require("aws-cdk-lib");
|
|
5
5
|
const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
|
|
6
6
|
const logs = require("aws-cdk-lib/aws-logs");
|
|
7
|
-
const
|
|
7
|
+
const constructs = require("constructs");
|
|
8
8
|
/**
|
|
9
9
|
* Various alarms and monitoring.
|
|
10
10
|
*
|
|
@@ -25,7 +25,7 @@ class ServiceAlarms extends constructs.Construct {
|
|
|
25
25
|
* that causes 500 for logging with liflig-logging.
|
|
26
26
|
*/
|
|
27
27
|
addJsonErrorAlarm(props) {
|
|
28
|
-
var _a, _b;
|
|
28
|
+
var _a, _b, _c, _d;
|
|
29
29
|
const errorMetricFilter = props.logGroup.addMetricFilter("ErrorMetricFilter", {
|
|
30
30
|
filterPattern: logs.FilterPattern.any(logs.FilterPattern.stringValue("$.level", "=", "ERROR"),
|
|
31
31
|
// FATAL covers some applications we run that uses log4j or
|
|
@@ -48,52 +48,102 @@ class ServiceAlarms extends constructs.Construct {
|
|
|
48
48
|
threshold: 1,
|
|
49
49
|
treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
|
|
50
50
|
});
|
|
51
|
-
errorAlarm.addAlarmAction(this.action);
|
|
52
|
-
if ((
|
|
53
|
-
errorAlarm.addOkAction(this.action);
|
|
51
|
+
errorAlarm.addAlarmAction((_b = props.action) !== null && _b !== void 0 ? _b : this.action);
|
|
52
|
+
if ((_c = props.enableOkAction) !== null && _c !== void 0 ? _c : true) {
|
|
53
|
+
errorAlarm.addOkAction((_d = props.action) !== null && _d !== void 0 ? _d : this.action);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Sets up three CloudWatch Alarms for monitoring an ECS service behind a target group:
|
|
58
|
+
* 1) one that triggers if the target is responding with too many 5xx errors.
|
|
59
|
+
* 2) one that triggers if the 95% percentile of response times from the target is too high.
|
|
60
|
+
* 3) one that triggers if there are no healthy targets or if the load balancer fails to connect to targets.
|
|
58
61
|
*/
|
|
59
|
-
|
|
62
|
+
addTargetGroupAlarms(props) {
|
|
63
|
+
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, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19;
|
|
64
|
+
const targetConnectionErrorAlarm = new cloudwatch.Metric({
|
|
65
|
+
metricName: "TargetConnectionErrorCount",
|
|
66
|
+
namespace: "AWS/ApplicationELB",
|
|
67
|
+
statistic: "Sum",
|
|
68
|
+
period: (_b = (_a = props.targetHealthAlarm) === null || _a === void 0 ? void 0 : _a.period) !== null && _b !== void 0 ? _b : cdk.Duration.seconds(60),
|
|
69
|
+
dimensionsMap: {
|
|
70
|
+
TargetGroup: props.targetGroupFullName,
|
|
71
|
+
LoadBalancer: props.loadBalancerFullName,
|
|
72
|
+
},
|
|
73
|
+
}).createAlarm(this, "ConnectionAlarm", {
|
|
74
|
+
actionsEnabled: true,
|
|
75
|
+
alarmDescription: `Load balancer is failing to connect to target(s) in ECS service '${this.serviceName}'.`,
|
|
76
|
+
evaluationPeriods: (_d = (_c = props.targetHealthAlarm) === null || _c === void 0 ? void 0 : _c.evaluationPeriods) !== null && _d !== void 0 ? _d : 1,
|
|
77
|
+
threshold: 1,
|
|
78
|
+
treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
|
|
79
|
+
});
|
|
60
80
|
const healthAlarm = new cloudwatch.Metric({
|
|
61
81
|
metricName: "HealthyHostCount",
|
|
62
82
|
namespace: "AWS/ApplicationELB",
|
|
63
|
-
statistic: "
|
|
64
|
-
period: cdk.Duration.seconds(60),
|
|
83
|
+
statistic: "Minimum",
|
|
84
|
+
period: (_f = (_e = props.targetHealthAlarm) === null || _e === void 0 ? void 0 : _e.period) !== null && _f !== void 0 ? _f : cdk.Duration.seconds(60),
|
|
65
85
|
dimensionsMap: {
|
|
66
86
|
TargetGroup: props.targetGroupFullName,
|
|
67
87
|
LoadBalancer: props.loadBalancerFullName,
|
|
68
88
|
},
|
|
69
89
|
}).createAlarm(this, "HealthAlarm", {
|
|
70
|
-
alarmDescription:
|
|
90
|
+
alarmDescription: `There are no healthy target(s) in ECS service '${this.serviceName}'.`,
|
|
71
91
|
comparisonOperator: cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD,
|
|
72
|
-
evaluationPeriods: 1,
|
|
92
|
+
evaluationPeriods: (_h = (_g = props.targetHealthAlarm) === null || _g === void 0 ? void 0 : _g.evaluationPeriods) !== null && _h !== void 0 ? _h : 1,
|
|
73
93
|
threshold: 1,
|
|
74
94
|
treatMissingData: cloudwatch.TreatMissingData.BREACHING,
|
|
75
95
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
96
|
+
const targetHealthAlarm = new cloudwatch.CompositeAlarm(this, "TargetHealthAlarm", {
|
|
97
|
+
alarmRule: cdk.aws_cloudwatch.AlarmRule.anyOf(cdk.aws_cloudwatch.AlarmRule.fromAlarm(targetConnectionErrorAlarm, cloudwatch.AlarmState.ALARM), cdk.aws_cloudwatch.AlarmRule.fromAlarm(healthAlarm, cloudwatch.AlarmState.ALARM)),
|
|
98
|
+
alarmDescription: (_k = (_j = props.targetHealthAlarm) === null || _j === void 0 ? void 0 : _j.description) !== null && _k !== void 0 ? _k : `The load balancer is either receiving bad health checks from or is unable to connect to target(s) in ECS service '${this.serviceName}'`,
|
|
99
|
+
actionsEnabled: false,
|
|
100
|
+
});
|
|
101
|
+
if ((_m = (_l = props.targetHealthAlarm) === null || _l === void 0 ? void 0 : _l.enabled) !== null && _m !== void 0 ? _m : true) {
|
|
102
|
+
targetHealthAlarm.addAlarmAction((_p = (_o = props.targetHealthAlarm) === null || _o === void 0 ? void 0 : _o.action) !== null && _p !== void 0 ? _p : this.action);
|
|
103
|
+
targetHealthAlarm.addOkAction((_r = (_q = props.targetHealthAlarm) === null || _q === void 0 ? void 0 : _q.action) !== null && _r !== void 0 ? _r : this.action);
|
|
104
|
+
}
|
|
105
|
+
const tooMany5xxResponsesFromTargetsAlarm = new cloudwatch.Metric({
|
|
106
|
+
metricName: "HTTPCode_Target_5XX_Count",
|
|
80
107
|
namespace: "AWS/ApplicationELB",
|
|
81
108
|
statistic: "Sum",
|
|
82
|
-
period: cdk.Duration.seconds(60),
|
|
109
|
+
period: (_t = (_s = props.tooMany5xxResponsesFromTargetsAlarm) === null || _s === void 0 ? void 0 : _s.period) !== null && _t !== void 0 ? _t : cdk.Duration.seconds(60),
|
|
83
110
|
dimensionsMap: {
|
|
84
111
|
TargetGroup: props.targetGroupFullName,
|
|
85
112
|
LoadBalancer: props.loadBalancerFullName,
|
|
86
113
|
},
|
|
87
|
-
}).createAlarm(this, "
|
|
114
|
+
}).createAlarm(this, "AlbTargets5xxAlarm", {
|
|
88
115
|
actionsEnabled: true,
|
|
89
|
-
alarmDescription:
|
|
90
|
-
evaluationPeriods:
|
|
91
|
-
threshold:
|
|
116
|
+
alarmDescription: (_v = (_u = props.tooMany5xxResponsesFromTargetsAlarm) === null || _u === void 0 ? void 0 : _u.description) !== null && _v !== void 0 ? _v : `Load balancer received too many 5XX responses from target(s) in ECS service '${this.serviceName}'.`,
|
|
117
|
+
evaluationPeriods: (_x = (_w = props.tooMany5xxResponsesFromTargetsAlarm) === null || _w === void 0 ? void 0 : _w.evaluationPeriods) !== null && _x !== void 0 ? _x : 3,
|
|
118
|
+
threshold: (_z = (_y = props.tooMany5xxResponsesFromTargetsAlarm) === null || _y === void 0 ? void 0 : _y.threshold) !== null && _z !== void 0 ? _z : 10,
|
|
92
119
|
treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING,
|
|
93
120
|
});
|
|
94
|
-
|
|
95
|
-
|
|
121
|
+
if ((_1 = (_0 = props.tooMany5xxResponsesFromTargetsAlarm) === null || _0 === void 0 ? void 0 : _0.enabled) !== null && _1 !== void 0 ? _1 : true) {
|
|
122
|
+
tooMany5xxResponsesFromTargetsAlarm.addAlarmAction((_3 = (_2 = props.tooMany5xxResponsesFromTargetsAlarm) === null || _2 === void 0 ? void 0 : _2.action) !== null && _3 !== void 0 ? _3 : this.action);
|
|
123
|
+
tooMany5xxResponsesFromTargetsAlarm.addOkAction((_5 = (_4 = props.tooMany5xxResponsesFromTargetsAlarm) === null || _4 === void 0 ? void 0 : _4.action) !== null && _5 !== void 0 ? _5 : this.action);
|
|
124
|
+
}
|
|
125
|
+
const targetResponseTimeAlarm = new cloudwatch.Metric({
|
|
126
|
+
metricName: "TargetResponseTime",
|
|
127
|
+
namespace: "AWS/ApplicationELB",
|
|
128
|
+
statistic: "p95",
|
|
129
|
+
period: (_7 = (_6 = props.targetResponseTimeAlarm) === null || _6 === void 0 ? void 0 : _6.period) !== null && _7 !== void 0 ? _7 : cdk.Duration.minutes(5),
|
|
130
|
+
unit: cloudwatch.Unit.MILLISECONDS,
|
|
131
|
+
dimensionsMap: {
|
|
132
|
+
LoadBalancer: props.loadBalancerFullName,
|
|
133
|
+
TargetGroup: props.targetGroupFullName,
|
|
134
|
+
},
|
|
135
|
+
}).createAlarm(this, "TargetResponseTimeAlarm", {
|
|
136
|
+
alarmDescription: (_9 = (_8 = props.targetResponseTimeAlarm) === null || _8 === void 0 ? void 0 : _8.description) !== null && _9 !== void 0 ? _9 : `5% of responses from ECS service '${this.serviceName}' are taking longer than expected.`,
|
|
137
|
+
comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
|
|
138
|
+
evaluationPeriods: (_11 = (_10 = props.targetResponseTimeAlarm) === null || _10 === void 0 ? void 0 : _10.evaluationPeriods) !== null && _11 !== void 0 ? _11 : 1,
|
|
139
|
+
threshold: ((_13 = (_12 = props.targetResponseTimeAlarm) === null || _12 === void 0 ? void 0 : _12.threshold) !== null && _13 !== void 0 ? _13 : cdk.Duration.millis(500)).toMilliseconds(),
|
|
140
|
+
treatMissingData: cloudwatch.TreatMissingData.IGNORE,
|
|
141
|
+
});
|
|
142
|
+
if ((_15 = (_14 = props.targetResponseTimeAlarm) === null || _14 === void 0 ? void 0 : _14.enabled) !== null && _15 !== void 0 ? _15 : true) {
|
|
143
|
+
targetResponseTimeAlarm.addAlarmAction((_17 = (_16 = props.targetResponseTimeAlarm) === null || _16 === void 0 ? void 0 : _16.action) !== null && _17 !== void 0 ? _17 : this.action);
|
|
144
|
+
targetResponseTimeAlarm.addOkAction((_19 = (_18 = props.targetResponseTimeAlarm) === null || _18 === void 0 ? void 0 : _18.action) !== null && _19 !== void 0 ? _19 : this.action);
|
|
145
|
+
}
|
|
96
146
|
}
|
|
97
147
|
}
|
|
98
148
|
exports.ServiceAlarms = ServiceAlarms;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1hbGFybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL3NlcnZpY2UtYWxhcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4Qyx5REFBd0Q7QUFDeEQsNkNBQTRDO0FBQzVDLG1DQUFrQztBQU9sQzs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFJckQsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBeUI7UUFFekIsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsS0FNakI7O1FBQ0MsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDdEQsbUJBQW1CLEVBQ25CO1lBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQztZQUN2RCwyREFBMkQ7WUFDM0QsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztZQUM1QixzQkFBc0I7WUFDdEIsMkJBQTJCLEVBQzNCLEdBQUcsRUFDSCx1QkFBdUIsQ0FDeEIsQ0FDRjtZQUNELFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGVBQWUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMs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dHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIlxuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUFsYXJtc1Byb3BzIGV4dGVuZHMgY2RrLlN0YWNrUHJvcHMge1xuICBhY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBWYXJpb3VzIGFsYXJtcyBhbmQgbW9uaXRvcmluZy5cbiAqXG4gKiBCeSBpdHNlbGYgbm8gYWxhcm1zIGlzIGNyZWF0ZWQuIFVzZSB0aGUgbWV0aG9kcyBhdmFpbGFibGVcbiAqIHRvIGFkZCBhbGFybXMuXG4gKlxuICogU2VlIFNsYWNrQWxhcm0gY29uc3RydWN0IGZvciBTTlMgQWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUFsYXJtcyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBTZXJ2aWNlQWxhcm1zUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuYWN0aW9uID0gcHJvcHMuYWN0aW9uXG4gICAgdGhpcy5zZXJ2aWNlTmFtZSA9IHByb3BzLnNlcnZpY2VOYW1lXG4gIH1cblxuICAvKipcbiAgICogRm9yIGxvZ3Mgc3RvcmVkIGFzIEpTT04sIG1vbml0b3IgbG9nIGVudHJpZXMgbG9nZ2VkXG4gICAqIHdpdGggbGV2ZWwgRVJST1Igb3IgaGlnaGVyLCBhcyB3ZWxsIGFzIGFueSByZXF1ZXN0c1xuICAgKiB0aGF0IGNhdXNlcyA1MDAgZm9yIGxvZ2dpbmcgd2l0aCBsaWZsaWctbG9nZ2luZy5cbiAgICovXG4gIGFkZEpzb25FcnJvckFsYXJtKHByb3BzOiB7XG4gICAgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwXG4gICAgYWxhcm1EZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIC8qKiBTZXQgdG8gYGZhbHNlYCB0byBzdG9wIHRoZSBhbGFybSBmcm9tIHNlbmRpbmcgT0sgZXZlbnRzLlxuICAgICAqIEBkZWZhdWx0IHRydWUgKi9cbiAgICBlbmFibGVPa0FjdGlvbj86IGJvb2xlYW5cbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yTWV0cmljRmlsdGVyID0gcHJvcHMubG9nR3JvdXAuYWRkTWV0cmljRmlsdGVyKFxuICAgICAgXCJFcnJvck1ldHJpY0ZpbHRlclwiLFxuICAgICAge1xuICAgICAgICBmaWx0ZXJQYXR0ZXJuOiBsb2dzLkZpbHRlclBhdHRlcm4uYW55KFxuICAgICAgICAgIGxvZ3MuRmlsdGVyUGF0dGVybi5zdHJpbmdWYWx1ZShcIiQubGV2ZWxcIiwgXCI9XCIsIFwiRVJST1JcIiksXG4gICAgICAgICAgLy8gRkFUQUwgY292ZXJzIHNvbWUgYXBwbGljYXRpb25zIHdlIHJ1biB0aGF0IHVzZXMgbG9nNGogb3JcbiAgICAgICAgICAvLyBvdGhlciBsaWJyYXJpZXMuIEl0IGlzIG5vdCBleGlzdGVudCBpbiBzbGY0ai5cbiAgICAgICAgICBsb2dzLkZpbHRlclBhdHRlcm4uc3RyaW5nVmFsdWUoXCIkLmxldmVsXCIsIFwiPVwiLCBcIkZBVEFMXCIpLFxuICAgICAgICAgIGxvZ3MuRmlsdGVyUGF0dGVybi5zdHJpbmdWYWx1ZShcbiAgICAgICAgICAgIC8vIEZvciBsaWZsaWctbG9nZ2luZy5cbiAgICAgICAgICAgIFwiJC5yZXF1ZXN0SW5mby5zdGF0dXMuY29kZVwiLFxuICAgICAgICAgICAgXCI9XCIsXG4gICAgICAgICAgICBcIklOVEVSTkFMX1NFUlZFUl9FUlJPUlwiLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICAgIG1ldHJpY05hbWU6IFwiRXJyb3JzXCIsXG4gICAgICAgIG1ldHJpY05hbWVzcGFjZTogYHN0YWNrLyR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX0vJHtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VOYW1lXG4gICAgICAgIH0vRXJyb3JzYCxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgY29uc3QgZXJyb3JBbGFybSA9IGVycm9yTWV0cmljRmlsdGVyXG4gICAgICAubWV0cmljKClcbiAgICAgIC53aXRoKHtcbiAgICAgICAgc3RhdGlzdGljOiBcIlN1bVwiLFxuICAgICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIH0pXG4gICAgICAuY3JlYXRlQWxhcm0odGhpcywgXCJFcnJvckxvZ0FsYXJtXCIsIHtcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgICBwcm9wcy5hbGFybURlc2NyaXB0aW9uID8/IGAke3RoaXMuc2VydmljZU5hbWV9IGxvZ2dlZCBhbiBlcnJvcmAsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgfSlcblxuICAgIGVycm9yQWxhcm0uYWRkQWxhcm1BY3Rpb24odGhpcy5hY3Rpb24pXG4gICAgaWYgKHByb3BzLmVuYWJsZU9rQWN0aW9uID8/IHRydWUpIHtcbiAgICAgIGVycm9yQWxhcm0uYWRkT2tBY3Rpb24odGhpcy5hY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3IgaGVhbHRoeSBob3N0IGNvdW50IGFuZCBjb25uZWN0aW9uIGVycm9ycyBmcm9tIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBhZGRUYXJnZXRHcm91cEFsYXJtKHByb3BzOiB7XG4gICAgdGFyZ2V0R3JvdXBGdWxsTmFtZTogc3RyaW5nXG4gICAgbG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZ1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgaGVhbHRoQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJIZWFsdGh5SG9zdENvdW50XCIsXG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL0FwcGxpY2F0aW9uRUxCXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiQXZlcmFnZVwiLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFRhcmdldEdyb3VwOiBwcm9wcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICBMb2FkQmFsYW5jZXI6IHByb3BzLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkhlYWx0aEFsYXJtXCIsIHtcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246XG4gICAgICAgIFwiU2VydmljZSBtaWdodCBiZSB1bmF2YWlsYWJsZSEgSXQgaXMgbm90IHJlc3BvbmRpbmcgdG8gaGVhbHRoIGNoZWNrcy5cIixcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLkJSRUFDSElORyxcbiAgICB9KVxuXG4gICAgaGVhbHRoQWxhcm0uYWRkQWxhcm1BY3Rpb24odGhpcy5hY3Rpb24pXG4gICAgaGVhbHRoQWxhcm0uYWRkT2tBY3Rpb24odGhpcy5hY3Rpb24pXG5cbiAgICBjb25zdCBjb25uZWN0aW9uQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJUYXJnZXRDb25uZWN0aW9uRXJyb3JDb3VudFwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9BcHBsaWNhdGlvbkVMQlwiLFxuICAgICAgc3RhdGlzdGljOiBcIlN1bVwiLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFRhcmdldEdyb3VwOiBwcm9wcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICBMb2FkQmFsYW5jZXI6IHByb3BzLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkNvbm5lY3Rpb25BbGFybVwiLCB7XG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IFwiTG9hZCBiYWxhbmNlciBjb3VsZCBub3QgY29ubmVjdCB0byB0YXJnZXRcIixcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgfSlcblxuICAgIGNvbm5lY3Rpb25BbGFybS5hZGRBbGFybUFjdGlvbih0aGlzLmFjdGlvbilcbiAgICBjb25uZWN0aW9uQWxhcm0uYWRkT2tBY3Rpb24odGhpcy5hY3Rpb24pXG4gIH1cbn1cbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1hbGFybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL3NlcnZpY2UtYWxhcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFrQztBQUNsQyx5REFBd0Q7QUFDeEQsNkNBQTRDO0FBQzVDLHlDQUF3QztBQWF4Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFJckQsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBeUI7UUFFekIsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsS0FZakI7O1FBQ0MsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDdEQsbUJBQW1CLEVBQ25CO1lBQ0UsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQztZQUN2RCwyREFBMkQ7WUFDM0QsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztZQUM1QixzQkFBc0I7WUFDdEIsMkJBQTJCLEVBQzNCLEdBQUcsRUFDSCx1QkFBdUIsQ0FDeEIsQ0FDRjtZQUNELFVBQVUsRUFBRSxRQUFRO1lBQ3BCLGVBQWUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMs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Q0EwU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCJcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VBbGFybXNQcm9wcyBleHRlbmRzIGNkay5TdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgYWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEVDUyBzZXJ2aWNlLlxuICAgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZ1xufVxuXG4vKipcbiAqIFZhcmlvdXMgYWxhcm1zIGFuZCBtb25pdG9yaW5nLlxuICpcbiAqIEJ5IGl0c2VsZiBubyBhbGFybXMgaXMgY3JlYXRlZC4gVXNlIHRoZSBtZXRob2RzIGF2YWlsYWJsZVxuICogdG8gYWRkIGFsYXJtcy5cbiAqXG4gKiBTZWUgU2xhY2tBbGFybSBjb25zdHJ1Y3QgZm9yIFNOUyBBY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQWxhcm1zIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFNlcnZpY2VBbGFybXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5hY3Rpb24gPSBwcm9wcy5hY3Rpb25cbiAgICB0aGlzLnNlcnZpY2VOYW1lID0gcHJvcHMuc2VydmljZU5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgbG9ncyBzdG9yZWQgYXMgSlNPTiwgbW9uaXRvciBsb2cgZW50cmllcyBsb2dnZWRcbiAgICogd2l0aCBsZXZlbCBFUlJPUiBvciBoaWdoZXIsIGFzIHdlbGwgYXMgYW55IHJlcXVlc3RzXG4gICAqIHRoYXQgY2F1c2VzIDUwMCBmb3IgbG9nZ2luZyB3aXRoIGxpZmxpZy1sb2dnaW5nLlxuICAgKi9cbiAgYWRkSnNvbkVycm9yQWxhcm0ocHJvcHM6IHtcbiAgICBsb2dHcm91cDogbG9ncy5JTG9nR3JvdXBcbiAgICBhbGFybURlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gc3RvcCB0aGUgYWxhcm0gZnJvbSBzZW5kaW5nIE9LIGV2ZW50cy5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogKi9cbiAgICBlbmFibGVPa0FjdGlvbj86IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgKi9cbiAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JNZXRyaWNGaWx0ZXIgPSBwcm9wcy5sb2dHcm91cC5hZGRNZXRyaWNGaWx0ZXIoXG4gICAgICBcIkVycm9yTWV0cmljRmlsdGVyXCIsXG4gICAgICB7XG4gICAgICAgIGZpbHRlclBhdHRlcm46IGxvZ3MuRmlsdGVyUGF0dGVybi5hbnkoXG4gICAgICAgICAgbG9ncy5GaWx0ZXJQYXR0ZXJuLnN0cmluZ1ZhbHVlKFwiJC5sZXZlbFwiLCBcIj1cIiwgXCJFUlJPUlwiKSxcbiAgICAgICAgICAvLyBGQVRBTCBjb3ZlcnMgc29tZSBhcHBsaWNhdGlvbnMgd2UgcnVuIHRoYXQgdXNlcyBsb2c0aiBvclxuICAgICAgICAgIC8vIG90aGVyIGxpYnJhcmllcy4gSXQgaXMgbm90IGV4aXN0ZW50IGluIHNsZjRqLlxuICAgICAgICAgIGxvZ3MuRmlsdGVyUGF0dGVybi5zdHJpbmdWYWx1ZShcIiQubGV2ZWxcIiwgXCI9XCIsIFwiRkFUQUxcIiksXG4gICAgICAgICAgbG9ncy5GaWx0ZXJQYXR0ZXJuLnN0cmluZ1ZhbHVlKFxuICAgICAgICAgICAgLy8gRm9yIGxpZmxpZy1sb2dnaW5nLlxuICAgICAgICAgICAgXCIkLnJlcXVlc3RJbmZvLnN0YXR1cy5jb2RlXCIsXG4gICAgICAgICAgICBcIj1cIixcbiAgICAgICAgICAgIFwiSU5URVJOQUxfU0VSVkVSX0VSUk9SXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWV0cmljTmFtZTogXCJFcnJvcnNcIixcbiAgICAgICAgbWV0cmljTmFtZXNwYWNlOiBgc3RhY2svJHtjZGsuU3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS8ke1xuICAgICAgICAgIHRoaXMuc2VydmljZU5hbWVcbiAgICAgICAgfS9FcnJvcnNgLFxuICAgICAgfSxcbiAgICApXG5cbiAgICBjb25zdCBlcnJvckFsYXJtID0gZXJyb3JNZXRyaWNGaWx0ZXJcbiAgICAgIC5tZXRyaWMoKVxuICAgICAgLndpdGgoe1xuICAgICAgICBzdGF0aXN0aWM6IFwiU3VtXCIsXG4gICAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgfSlcbiAgICAgIC5jcmVhdGVBbGFybSh0aGlzLCBcIkVycm9yTG9nQWxhcm1cIiwge1xuICAgICAgICBhbGFybURlc2NyaXB0aW9uOlxuICAgICAgICAgIHByb3BzLmFsYXJtRGVzY3JpcHRpb24gPz8gYCR7dGhpcy5zZXJ2aWNlTmFtZX0gbG9nZ2VkIGFuIGVycm9yYCxcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICB9KVxuXG4gICAgZXJyb3JBbGFybS5hZGRBbGFybUFjdGlvbihwcm9wcy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24pXG4gICAgaWYgKHByb3BzLmVuYWJsZU9rQWN0aW9uID8/IHRydWUpIHtcbiAgICAgIGVycm9yQWxhcm0uYWRkT2tBY3Rpb24ocHJvcHMuYWN0aW9uID8/IHRoaXMuYWN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRocmVlIENsb3VkV2F0Y2ggQWxhcm1zIGZvciBtb25pdG9yaW5nIGFuIEVDUyBzZXJ2aWNlIGJlaGluZCBhIHRhcmdldCBncm91cDpcbiAgICogMSkgb25lIHRoYXQgdHJpZ2dlcnMgaWYgdGhlIHRhcmdldCBpcyByZXNwb25kaW5nIHdpdGggdG9vIG1hbnkgNXh4IGVycm9ycy5cbiAgICogMikgb25lIHRoYXQgdHJpZ2dlcnMgaWYgdGhlIDk1JSBwZXJjZW50aWxlIG9mIHJlc3BvbnNlIHRpbWVzIGZyb20gdGhlIHRhcmdldCBpcyB0b28gaGlnaC5cbiAgICogMykgb25lIHRoYXQgdHJpZ2dlcnMgaWYgdGhlcmUgYXJlIG5vIGhlYWx0aHkgdGFyZ2V0cyBvciBpZiB0aGUgbG9hZCBiYWxhbmNlciBmYWlscyB0byBjb25uZWN0IHRvIHRhcmdldHMuXG4gICAqL1xuICBhZGRUYXJnZXRHcm91cEFsYXJtcyhwcm9wczoge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIG5hbWUgb2YgdGhlIHRhcmdldCBncm91cC5cbiAgICAgKi9cbiAgICB0YXJnZXRHcm91cEZ1bGxOYW1lOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyLlxuICAgICAqL1xuICAgIGxvYWRCYWxhbmNlckZ1bGxOYW1lOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhIGNvbXBvc2l0ZSBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIHRhcmdldEhlYWx0aEFsYXJtPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA2MCBzZWNvbmRzXG4gICAgICAgKi9cbiAgICAgIHBlcmlvZD86IGNkay5EdXJhdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgKi9cbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAqL1xuICAgICAgdGhyZXNob2xkPzogbnVtYmVyXG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIHRvb01hbnk1eHhSZXNwb25zZXNGcm9tVGFyZ2V0c0FsYXJtPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA2MCBzZWNvbmRzXG4gICAgICAgKi9cbiAgICAgIHBlcmlvZD86IGNkay5EdXJhdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCAzXG4gICAgICAgKi9cbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlclxuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgYW4gYWxhcm0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBDb25maWd1cmVkIHdpdGggc2FuZSBkZWZhdWx0cy5cbiAgICAgKi9cbiAgICB0YXJnZXRSZXNwb25zZVRpbWVBbGFybT86IHtcbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBlbmFibGVkPzogYm9vbGVhblxuICAgICAgLyoqXG4gICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgNSBtaW51dGVzXG4gICAgICAgKi9cbiAgICAgIHBlcmlvZD86IGNkay5EdXJhdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCAxXG4gICAgICAgKi9cbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDUwMCBtaWxsaXNlY29uZHNcbiAgICAgICAqL1xuICAgICAgdGhyZXNob2xkPzogY2RrLkR1cmF0aW9uXG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIH1cbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldENvbm5lY3Rpb25FcnJvckFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWU6IFwiVGFyZ2V0Q29ubmVjdGlvbkVycm9yQ291bnRcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvQXBwbGljYXRpb25FTEJcIixcbiAgICAgIHN0YXRpc3RpYzogXCJTdW1cIixcbiAgICAgIHBlcmlvZDogcHJvcHMudGFyZ2V0SGVhbHRoQWxhcm0/LnBlcmlvZCA/PyBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFRhcmdldEdyb3VwOiBwcm9wcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICBMb2FkQmFsYW5jZXI6IHByb3BzLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkNvbm5lY3Rpb25BbGFybVwiLCB7XG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBMb2FkIGJhbGFuY2VyIGlzIGZhaWxpbmcgdG8gY29ubmVjdCB0byB0YXJnZXQocykgaW4gRUNTIHNlcnZpY2UgJyR7dGhpcy5zZXJ2aWNlTmFtZX0nLmAsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogcHJvcHMudGFyZ2V0SGVhbHRoQWxhcm0/LmV2YWx1YXRpb25QZXJpb2RzID8/IDEsXG4gICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICB9KVxuXG4gICAgY29uc3QgaGVhbHRoQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJIZWFsdGh5SG9zdENvdW50XCIsXG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL0FwcGxpY2F0aW9uRUxCXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiTWluaW11bVwiLFxuICAgICAgcGVyaW9kOiBwcm9wcy50YXJnZXRIZWFsdGhBbGFybT8ucGVyaW9kID8/IGNkay5EdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgVGFyZ2V0R3JvdXA6IHByb3BzLnRhcmdldEdyb3VwRnVsbE5hbWUsXG4gICAgICAgIExvYWRCYWxhbmNlcjogcHJvcHMubG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICB9LFxuICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsIFwiSGVhbHRoQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYFRoZXJlIGFyZSBubyBoZWFsdGh5IHRhcmdldChzKSBpbiBFQ1Mgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VOYW1lfScuYCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBwcm9wcy50YXJnZXRIZWFsdGhBbGFybT8uZXZhbHVhdGlvblBlcmlvZHMgPz8gMSxcbiAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5CUkVBQ0hJTkcsXG4gICAgfSlcblxuICAgIGNvbnN0IHRhcmdldEhlYWx0aEFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guQ29tcG9zaXRlQWxhcm0oXG4gICAgICB0aGlzLFxuICAgICAgXCJUYXJnZXRIZWFsdGhBbGFybVwiLFxuICAgICAge1xuICAgICAgICBhbGFybVJ1bGU6IGNkay5hd3NfY2xvdWR3YXRjaC5BbGFybVJ1bGUuYW55T2YoXG4gICAgICAgICAgY2RrLmF3c19jbG91ZHdhdGNoLkFsYXJtUnVsZS5mcm9tQWxhcm0oXG4gICAgICAgICAgICB0YXJnZXRDb25uZWN0aW9uRXJyb3JBbGFybSxcbiAgICAgICAgICAgIGNsb3Vkd2F0Y2guQWxhcm1TdGF0ZS5BTEFSTSxcbiAgICAgICAgICApLFxuICAgICAgICAgIGNkay5hd3NfY2xvdWR3YXRjaC5BbGFybVJ1bGUuZnJvbUFsYXJtKFxuICAgICAgICAgICAgaGVhbHRoQWxhcm0sXG4gICAgICAgICAgICBjbG91ZHdhdGNoLkFsYXJtU3RhdGUuQUxBUk0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgICBwcm9wcy50YXJnZXRIZWFsdGhBbGFybT8uZGVzY3JpcHRpb24gPz9cbiAgICAgICAgICBgVGhlIGxvYWQgYmFsYW5jZXIgaXMgZWl0aGVyIHJlY2VpdmluZyBiYWQgaGVhbHRoIGNoZWNrcyBmcm9tIG9yIGlzIHVuYWJsZSB0byBjb25uZWN0IHRvIHRhcmdldChzKSBpbiBFQ1Mgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VOYW1lfSdgLFxuICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICB9LFxuICAgIClcbiAgICBpZiAocHJvcHMudGFyZ2V0SGVhbHRoQWxhcm0/LmVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgdGFyZ2V0SGVhbHRoQWxhcm0uYWRkQWxhcm1BY3Rpb24oXG4gICAgICAgIHByb3BzLnRhcmdldEhlYWx0aEFsYXJtPy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24sXG4gICAgICApXG4gICAgICB0YXJnZXRIZWFsdGhBbGFybS5hZGRPa0FjdGlvbihcbiAgICAgICAgcHJvcHMudGFyZ2V0SGVhbHRoQWxhcm0/LmFjdGlvbiA/PyB0aGlzLmFjdGlvbixcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCB0b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybSA9IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIkhUVFBDb2RlX1RhcmdldF81WFhfQ291bnRcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvQXBwbGljYXRpb25FTEJcIixcbiAgICAgIHN0YXRpc3RpYzogXCJTdW1cIixcbiAgICAgIHBlcmlvZDpcbiAgICAgICAgcHJvcHMudG9vTWFueTV4eFJlc3BvbnNlc0Zyb21UYXJnZXRzQWxhcm0/LnBlcmlvZCA/P1xuICAgICAgICBjZGsuRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFRhcmdldEdyb3VwOiBwcm9wcy50YXJnZXRHcm91cEZ1bGxOYW1lLFxuICAgICAgICBMb2FkQmFsYW5jZXI6IHByb3BzLmxvYWRCYWxhbmNlckZ1bGxOYW1lLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkFsYlRhcmdldHM1eHhBbGFybVwiLCB7XG4gICAgICBhY3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246XG4gICAgICAgIHByb3BzLnRvb01hbnk1eHhSZXNwb25zZXNGcm9tVGFyZ2V0c0FsYXJtPy5kZXNjcmlwdGlvbiA/P1xuICAgICAgICBgTG9hZCBiYWxhbmNlciByZWNlaXZlZCB0b28gbWFueSA1WFggcmVzcG9uc2VzIGZyb20gdGFyZ2V0KHMpIGluIEVDUyBzZXJ2aWNlICcke3RoaXMuc2VydmljZU5hbWV9Jy5gLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6XG4gICAgICAgIHByb3BzLnRvb01hbnk1eHhSZXNwb25zZXNGcm9tVGFyZ2V0c0FsYXJtPy5ldmFsdWF0aW9uUGVyaW9kcyA/PyAzLFxuICAgICAgdGhyZXNob2xkOiBwcm9wcy50b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybT8udGhyZXNob2xkID8/IDEwLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgfSlcbiAgICBpZiAocHJvcHMudG9vTWFueTV4eFJlc3BvbnNlc0Zyb21UYXJnZXRzQWxhcm0/LmVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgdG9vTWFueTV4eFJlc3BvbnNlc0Zyb21UYXJnZXRzQWxhcm0uYWRkQWxhcm1BY3Rpb24oXG4gICAgICAgIHByb3BzLnRvb01hbnk1eHhSZXNwb25zZXNGcm9tVGFyZ2V0c0FsYXJtPy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24sXG4gICAgICApXG4gICAgICB0b29NYW55NXh4UmVzcG9uc2VzRnJvbVRhcmdldHNBbGFybS5hZGRPa0FjdGlvbihcbiAgICAgICAgcHJvcHMudG9vTWFueTV4eFJlc3BvbnNlc0Zyb21UYXJnZXRzQWxhcm0/LmFjdGlvbiA/PyB0aGlzLmFjdGlvbixcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRSZXNwb25zZVRpbWVBbGFybSA9IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIlRhcmdldFJlc3BvbnNlVGltZVwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9BcHBsaWNhdGlvbkVMQlwiLFxuICAgICAgc3RhdGlzdGljOiBcInA5NVwiLFxuICAgICAgcGVyaW9kOiBwcm9wcy50YXJnZXRSZXNwb25zZVRpbWVBbGFybT8ucGVyaW9kID8/IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgdW5pdDogY2xvdWR3YXRjaC5Vbml0Lk1JTExJU0VDT05EUyxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgTG9hZEJhbGFuY2VyOiBwcm9wcy5sb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICAgICAgVGFyZ2V0R3JvdXA6IHByb3BzLnRhcmdldEdyb3VwRnVsbE5hbWUsXG4gICAgICB9LFxuICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsIFwiVGFyZ2V0UmVzcG9uc2VUaW1lQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgcHJvcHMudGFyZ2V0UmVzcG9uc2VUaW1lQWxhcm0/LmRlc2NyaXB0aW9uID8/XG4gICAgICAgIGA1JSBvZiByZXNwb25zZXMgZnJvbSBFQ1Mgc2VydmljZSAnJHt0aGlzLnNlcnZpY2VOYW1lfScgYXJlIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZC5gLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzLnRhcmdldFJlc3BvbnNlVGltZUFsYXJtPy5ldmFsdWF0aW9uUGVyaW9kcyA/PyAxLFxuICAgICAgdGhyZXNob2xkOiAoXG4gICAgICAgIHByb3BzLnRhcmdldFJlc3BvbnNlVGltZUFsYXJtPy50aHJlc2hvbGQgPz8gY2RrLkR1cmF0aW9uLm1pbGxpcyg1MDApXG4gICAgICApLnRvTWlsbGlzZWNvbmRzKCksXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgIH0pXG4gICAgaWYgKHByb3BzLnRhcmdldFJlc3BvbnNlVGltZUFsYXJtPy5lbmFibGVkID8/IHRydWUpIHtcbiAgICAgIHRhcmdldFJlc3BvbnNlVGltZUFsYXJtLmFkZEFsYXJtQWN0aW9uKFxuICAgICAgICBwcm9wcy50YXJnZXRSZXNwb25zZVRpbWVBbGFybT8uYWN0aW9uID8/IHRoaXMuYWN0aW9uLFxuICAgICAgKVxuICAgICAgdGFyZ2V0UmVzcG9uc2VUaW1lQWxhcm0uYWRkT2tBY3Rpb24oXG4gICAgICAgIHByb3BzLnRhcmdldFJlc3BvbnNlVGltZUFsYXJtPy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24sXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/rds/database.d.ts
CHANGED
|
@@ -41,6 +41,9 @@ export interface DatabaseProps extends cdk.StackProps {
|
|
|
41
41
|
export declare class Database extends constructs.Construct {
|
|
42
42
|
readonly secret: sm.ISecret;
|
|
43
43
|
readonly connections: ec2.Connections;
|
|
44
|
+
readonly databaseInstance: rds.IDatabaseInstance;
|
|
45
|
+
readonly instanceType: ec2.InstanceType;
|
|
46
|
+
readonly allocatedStorage: cdk.Size;
|
|
44
47
|
constructor(scope: constructs.Construct, id: string, props: DatabaseProps);
|
|
45
48
|
allowConnectionFrom(source: ec2.ISecurityGroup): void;
|
|
46
49
|
}
|
package/lib/rds/database.js
CHANGED
|
@@ -33,6 +33,8 @@ class Database extends constructs.Construct {
|
|
|
33
33
|
backupRetention: cdk.Duration.days(35),
|
|
34
34
|
...props.overrideDbOptions,
|
|
35
35
|
};
|
|
36
|
+
this.allocatedStorage = cdk.Size.gibibytes(options.allocatedStorage);
|
|
37
|
+
this.instanceType = options.instanceType;
|
|
36
38
|
const db = props.snapshotIdentifier
|
|
37
39
|
? new rds.DatabaseInstanceFromSnapshot(this, "Resource", {
|
|
38
40
|
...options,
|
|
@@ -45,6 +47,7 @@ class Database extends constructs.Construct {
|
|
|
45
47
|
credentials: rds.Credentials.fromSecret(secret),
|
|
46
48
|
storageEncrypted: true,
|
|
47
49
|
});
|
|
50
|
+
this.databaseInstance = db;
|
|
48
51
|
this.secret = db.secret;
|
|
49
52
|
this.connections = db.connections;
|
|
50
53
|
db.node.defaultChild.publiclyAccessible = false;
|
|
@@ -54,4 +57,4 @@ class Database extends constructs.Construct {
|
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
59
|
exports.Database = Database;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmRzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4QywyQ0FBMEM7QUFDMUMsMkNBQTBDO0FBRTFDLG1DQUFrQztBQXNDbEMsTUFBYSxRQUFTLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFPaEQsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFvQjs7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLGNBQWMsR0FBRyxNQUFBLEtBQUssQ0FBQyxjQUFjLG1DQUFJLFFBQVEsQ0FBQTtRQUN2RCxNQUFNLFlBQVksR0FBRyxNQUFBLEtBQUssQ0FBQyxZQUFZLG1DQUFJLEtBQUssQ0FBQTtRQUVoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNwRCxRQUFRLEVBQUUsY0FBYztTQUN6QixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBb0M7WUFDL0MsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtZQUM1QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsVUFBVSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ2hDLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2lCQUNsQztnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLE9BQU8sRUFBRSxNQUFBLEtBQUssQ0FBQyxTQUFTLG1DQUFJLElBQUk7WUFDaEMsa0RBQWtEO1lBQ2xELHdCQUF3QjtZQUN4QixnQkFBZ0IsRUFBRSxNQUFBLEtBQUssQ0FBQyxrQkFBa0IsbUNBQUksRUFBRTtZQUNoRCx1Q0FBdUM7WUFDdkMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxHQUFHLEtBQUssQ0FBQyxpQkFBaUI7U0FDM0IsQ0FBQTtRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWlCLENBQUMsQ0FBQTtRQUNyRSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFhLENBQUE7UUFFekMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUNqQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDckQsR0FBRyxPQUFPO2dCQUNWLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzVDLFdBQVcsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUN4RCxDQUFDO1lBQ0osQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ3pDLEdBQUcsT0FBTztnQkFDVixZQUFZO2dCQUNaLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLGdCQUFnQixFQUFFLElBQUk7YUFDdkIsQ0FBQyxDQUFBO1FBRU4sSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUUxQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFPLENBQUE7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUloQztRQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBa0MsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUE7SUFDekUsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE1BQTBCO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0MsQ0FBQztDQUNGO0FBakVELDRCQWlFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCJcbmltcG9ydCAqIGFzIHJkcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiXG5pbXBvcnQgKiBhcyBzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlUHJvcHMgZXh0ZW5kcyBjZGsuU3RhY2tQcm9wcyB7XG4gIHZwYzogZWMyLklWcGNcbiAgZW5naW5lOiByZHMuSUluc3RhbmNlRW5naW5lXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBtYXN0ZXJcbiAgICovXG4gIG1hc3RlclVzZXJuYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBhcHBcbiAgICovXG4gIGRhdGFiYXNlTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICogQGRlZmF1bHQgMjVcbiAgICovXG4gIGFsbG9jYXRlZFN0b3JhZ2VHYj86IG51bWJlclxuICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGVcbiAgaW5zdGFuY2VJZGVudGlmaWVyOiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGlzTXVsdGlBej86IGJvb2xlYW5cbiAgLyoqXG4gICAqIE11c3Qgbm90IGJlIHJlbW92ZWQgb25jZSBpdCBoYXMgYmVlbiBzZXQsIGFzIGNoYW5naW5nIHRoaXNcbiAgICogcmVzdWx0cyBpbiBhIG5ldyBEQiBpbnN0YW5jZSBiZWluZyBjcmVhdGVkLlxuICAgKlxuICAgKiBBbHNvLCByZW1lbWJlciB0byBnaXZlIGRhdGFiYXNlIGEgbmV3IG5hbWUgd2hlbiBjaGFuZ2luZyB0aGlzIHByb3AsIG9yIGVsc2VcbiAgICogdGhlIG5ldyBpbnN0YW5jZSBuYW1lIHdpbGwgY3Jhc2ggd2l0aCB0aGUgZXhpc3RpbmcgaW5zdGFuY2UuXG4gICAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VQdWJsaWNTdWJuZXRzPzogYm9vbGVhblxuICBvdmVycmlkZURiT3B0aW9ucz86IFBhcnRpYWw8cmRzLkRhdGFiYXNlSW5zdGFuY2VTb3VyY2VQcm9wcz5cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0OiBzbS5JU2VjcmV0XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZUluc3RhbmNlOiByZHMuSURhdGFiYXNlSW5zdGFuY2VcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZVxuICBwdWJsaWMgcmVhZG9ubHkgYWxsb2NhdGVkU3RvcmFnZTogY2RrLlNpemVcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgbWFzdGVyVXNlcm5hbWUgPSBwcm9wcy5tYXN0ZXJVc2VybmFtZSA/PyBcIm1hc3RlclwiXG4gICAgY29uc3QgZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lID8/IFwiYXBwXCJcblxuICAgIGNvbnN0IHNlY3JldCA9IG5ldyByZHMuRGF0YWJhc2VTZWNyZXQodGhpcywgXCJTZWNyZXRcIiwge1xuICAgICAgdXNlcm5hbWU6IG1hc3RlclVzZXJuYW1lLFxuICAgIH0pXG5cbiAgICBjb25zdCBvcHRpb25zOiByZHMuRGF0YWJhc2VJbnN0YW5jZVNvdXJjZVByb3BzID0ge1xuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmUsXG4gICAgICBhbGxvd01ham9yVmVyc2lvblVwZ3JhZGU6IHRydWUsXG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IHByb3BzLmluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy51c2VQdWJsaWNTdWJuZXRzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBtdWx0aUF6OiBwcm9wcy5pc011bHRpQXogPz8gdHJ1ZSxcbiAgICAgIC8vIFdlIGRlZmF1bHQgdG8gMjUgR2lCIHN0b3JhZ2UgaW5zdGVhZCBvZiAxMDAgR2lCXG4gICAgICAvLyBpZiB3ZSBkbyBub3Qgc3BlY2lmeS5cbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2VHYiA/PyAyNSxcbiAgICAgIC8vIFdlIHNwZWNpZnkgbWF4aW11bSBiYWNrdXAgcmV0ZW50aW9uLlxuICAgICAgYmFja3VwUmV0ZW50aW9uOiBjZGsuRHVyYXRpb24uZGF5cygzNSksXG4gICAgICAuLi5wcm9wcy5vdmVycmlkZURiT3B0aW9ucyxcbiAgICB9XG4gICAgdGhpcy5hbGxvY2F0ZWRTdG9yYWdlID0gY2RrLlNpemUuZ2liaWJ5dGVzKG9wdGlvbnMuYWxsb2NhdGVkU3RvcmFnZSEpXG4gICAgdGhpcy5pbnN0YW5jZVR5cGUgPSBvcHRpb25zLmluc3RhbmNlVHlwZSFcblxuICAgIGNvbnN0IGRiID0gcHJvcHMuc25hcHNob3RJZGVudGlmaWVyXG4gICAgICA/IG5ldyByZHMuRGF0YWJhc2VJbnN0YW5jZUZyb21TbmFwc2hvdCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiByZHMuU25hcHNob3RDcmVkZW50aWFscy5mcm9tU2VjcmV0KHNlY3JldCksXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyByZHMuRGF0YWJhc2VJbnN0YW5jZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIGRhdGFiYXNlTmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsczogcmRzLkNyZWRlbnRpYWxzLmZyb21TZWNyZXQoc2VjcmV0KSxcbiAgICAgICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICB9KVxuXG4gICAgdGhpcy5kYXRhYmFzZUluc3RhbmNlID0gZGJcblxuICAgIHRoaXMuc2VjcmV0ID0gZGIuc2VjcmV0IVxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBkYi5jb25uZWN0aW9uc1xuXG4gICAgLy8gT3ZlcnJpZGUgaW4gY2FzZSB3ZSBoYXZlIHBsYWNlZCBpdCBpbiBhIHB1YmxpYyBzdWJuZXQuXG4gICAgLy8gSXQgd291bGQgZGVmYXVsdCB0byBiZWluZyBwdWJsaWMgYWNjZXNzaWJsZSB3aGljaCB3ZSBkbyBub3Qgd2FudC5cbiAgICA7KGRiLm5vZGUuZGVmYXVsdENoaWxkIGFzIHJkcy5DZm5EQkluc3RhbmNlKS5wdWJsaWNseUFjY2Vzc2libGUgPSBmYWxzZVxuICB9XG5cbiAgcHVibGljIGFsbG93Q29ubmVjdGlvbkZyb20oc291cmNlOiBlYzIuSVNlY3VyaXR5R3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKHNvdXJjZSlcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liflig/cdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "CDK library for Liflig",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -37,15 +37,15 @@
|
|
|
37
37
|
"@aws-cdk/assert": "2.35.0",
|
|
38
38
|
"@commitlint/cli": "17.1.2",
|
|
39
39
|
"@commitlint/config-conventional": "17.1.0",
|
|
40
|
-
"@types/aws-lambda": "8.10.
|
|
40
|
+
"@types/aws-lambda": "8.10.108",
|
|
41
41
|
"@types/jest": "27.5.2",
|
|
42
|
-
"@types/node": "16.11.
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
44
|
-
"@typescript-eslint/parser": "5.
|
|
42
|
+
"@types/node": "16.11.68",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "5.40.1",
|
|
44
|
+
"@typescript-eslint/parser": "5.40.1",
|
|
45
45
|
"aws-cdk": "2.35.0",
|
|
46
46
|
"aws-cdk-lib": "2.35.0",
|
|
47
|
-
"constructs": "10.1.
|
|
48
|
-
"eslint": "8.
|
|
47
|
+
"constructs": "10.1.131",
|
|
48
|
+
"eslint": "8.26.0",
|
|
49
49
|
"eslint-config-prettier": "8.5.0",
|
|
50
50
|
"eslint-plugin-prettier": "4.2.1",
|
|
51
51
|
"husky": "8.0.1",
|