@rio-cloud/cdk-v2-constructs 4.13.2 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +7555 -3383
- package/CHANGELOG.md +26 -0
- package/lib/datadog/datadog-log-index-monitoring.d.ts +2 -2
- package/lib/datadog/datadog-log-index-monitoring.js +1 -1
- package/lib/datadogv2/datadog-dashboard.d.ts +28 -0
- package/lib/datadogv2/datadog-dashboard.js +31 -0
- package/lib/datadogv2/datadog-log-index-monitoring.d.ts +61 -0
- package/lib/datadogv2/datadog-log-index-monitoring.js +115 -0
- package/lib/datadogv2/datadog-monitor.d.ts +234 -0
- package/lib/datadogv2/datadog-monitor.js +134 -0
- package/lib/datadogv2/datadog-notification.d.ts +100 -0
- package/lib/datadogv2/datadog-notification.js +94 -0
- package/lib/datadogv2/index.d.ts +4 -0
- package/lib/datadogv2/index.js +17 -0
- package/lib/fargate/datadog.js +2 -2
- package/lib/fargate/index.d.ts +1 -0
- package/lib/fargate/index.js +14 -0
- package/lib/fargate/rio-fargate-service.d.ts +18 -18
- package/lib/fargate/rio-fargate-service.js +1 -1
- package/lib/index.d.ts +7 -13
- package/lib/index.js +8 -14
- package/lib/kafka/kafka-topic.d.ts +5 -5
- package/lib/kafka/kafka-topic.js +1 -1
- package/lib/kafka/rio-kafka-event-source.d.ts +1 -1
- package/lib/kafka/rio-kafka-event-source.js +1 -1
- package/lib/pipeline/rio-backup-secrets-restore-stage.d.ts +1 -1
- package/lib/pipeline/rio-backup-secrets-restore-stage.js +1 -1
- package/lib/pipeline/rio-bitbucket-source-action.d.ts +1 -1
- package/lib/pipeline/rio-bitbucket-source-action.js +1 -1
- package/lib/rio-landing-zone.d.ts +6 -0
- package/lib/rio-landing-zone.js +19 -1
- package/lib/watchful/alb.d.ts +2 -2
- package/lib/watchful/alb.js +1 -1
- package/lib/watchful/aspect.d.ts +6 -6
- package/lib/watchful/aspect.js +12 -7
- package/lib/watchful/cloudfront.d.ts +2 -2
- package/lib/watchful/cloudfront.js +1 -1
- package/lib/watchful/docdb.d.ts +4 -4
- package/lib/watchful/docdb.js +1 -1
- package/lib/watchful/dynamodb.d.ts +5 -5
- package/lib/watchful/dynamodb.js +1 -1
- package/lib/watchful/ecs.d.ts +2 -2
- package/lib/watchful/ecs.js +1 -1
- package/lib/watchful/index.d.ts +13 -0
- package/lib/watchful/index.js +26 -0
- package/lib/watchful/lambda.d.ts +3 -3
- package/lib/watchful/lambda.js +1 -1
- package/lib/watchful/metric-alarm.d.ts +16 -16
- package/lib/watchful/metric-alarm.js +1 -1
- package/lib/watchful/rds.d.ts +2 -2
- package/lib/watchful/rds.js +1 -1
- package/lib/watchful/targetgroup.d.ts +2 -2
- package/lib/watchful/targetgroup.js +1 -1
- package/lib/watchful/upperToLower.js +3 -2
- package/lib/watchful/watchful.d.ts +52 -48
- package/lib/watchful/watchful.js +103 -98
- package/lib/watchfulv2/datadog-log-alarm.d.ts +37 -0
- package/lib/watchfulv2/datadog-log-alarm.js +61 -0
- package/lib/watchfulv2/datadog-metric-alarm.d.ts +29 -0
- package/lib/watchfulv2/datadog-metric-alarm.js +132 -0
- package/lib/watchfulv2/index.d.ts +1 -0
- package/lib/watchfulv2/index.js +14 -0
- package/lib/watchfulv2/watchful.d.ts +53 -0
- package/lib/watchfulv2/watchful.js +76 -0
- package/package.json +19 -9
- package/version.json +1 -1
package/lib/watchful/watchful.js
CHANGED
|
@@ -1,17 +1,110 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
2
|
+
var _a, _b;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Watchful = void 0;
|
|
4
|
+
exports.Watchful = exports.AbstractWatchful = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
7
|
const cw_actions = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
8
8
|
const ssm = require("aws-cdk-lib/aws-ssm");
|
|
9
9
|
const constructs_1 = require("constructs");
|
|
10
|
-
const
|
|
10
|
+
const _1 = require("./");
|
|
11
|
+
class AbstractWatchful extends constructs_1.Construct {
|
|
12
|
+
/**
|
|
13
|
+
* Adds alarms for the given lambda function.
|
|
14
|
+
* @param fn - A lambda function that should be watched [disable-awslint:ref-via-interface]
|
|
15
|
+
*/
|
|
16
|
+
watchLambdaFunction(fn, options = {}) {
|
|
17
|
+
new _1.WatchLambdaFunction(this, fn.node.id, {
|
|
18
|
+
watchful: this,
|
|
19
|
+
fn,
|
|
20
|
+
...options,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Adds alarms for the given Cloudfront Distribution.
|
|
25
|
+
* @param cf - A Cloudfront Distribution that should be watched [disable-awslint:ref-via-interface]
|
|
26
|
+
*/
|
|
27
|
+
watchCloudfrontDistribution(cf, options = {}) {
|
|
28
|
+
new _1.WatchCloudfrontDistribution(this, cf.node.id, {
|
|
29
|
+
watchful: this,
|
|
30
|
+
cf,
|
|
31
|
+
...options,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Adds alarms for the given ECS service.
|
|
36
|
+
* @param service - An ECS service that should be watched [disable-awslint:ref-via-interface]
|
|
37
|
+
*/
|
|
38
|
+
watchEcsService(service, options = {}) {
|
|
39
|
+
new _1.WatchEcsService(this, service.node.id, {
|
|
40
|
+
watchful: this,
|
|
41
|
+
service,
|
|
42
|
+
...options,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Adds alarms for the given application load balancer.
|
|
47
|
+
* @param alb - An application load balancer that should be watched [disable-awslint:ref-via-interface]
|
|
48
|
+
*/
|
|
49
|
+
watchAlb(alb, options = {}) {
|
|
50
|
+
new _1.WatchApplicationLoadBalancer(this, alb.node.id, {
|
|
51
|
+
watchful: this,
|
|
52
|
+
alb,
|
|
53
|
+
...options,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Adds alarms for the given application target gorup.
|
|
58
|
+
* @param atg - An application target group that should be watched [disable-awslint:ref-via-interface]
|
|
59
|
+
*/
|
|
60
|
+
watchApplicationTargetGroup(atg, options = {}) {
|
|
61
|
+
new _1.WatchApplicationTargetGroup(this, atg.node.id, {
|
|
62
|
+
watchful: this,
|
|
63
|
+
atg,
|
|
64
|
+
...options,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Adds alarms for the given DocDb cluster.
|
|
69
|
+
* @param docDb - An DocDb cluster that should be watched [disable-awslint:ref-via-interface]
|
|
70
|
+
*/
|
|
71
|
+
watchDocDb(docDb, options = {}) {
|
|
72
|
+
new _1.WatchDocDbCluster(this, docDb.node.id, {
|
|
73
|
+
watchful: this,
|
|
74
|
+
docDb,
|
|
75
|
+
...options,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Adds alarms for the given database cluster.
|
|
80
|
+
* @param databaseCluster - An database cluster that should be watched [disable-awslint:ref-via-interface]
|
|
81
|
+
*/
|
|
82
|
+
watchDatabaseCluster(databaseCluster, options = {}) {
|
|
83
|
+
new _1.WatchDatabaseCluster(this, databaseCluster.node.id, {
|
|
84
|
+
watchful: this,
|
|
85
|
+
databaseCluster,
|
|
86
|
+
...options,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Adds alarms for the given DynamoDb table.
|
|
91
|
+
* @param dynamoDbTable - An database cluster that should be watched [disable-awslint:ref-via-interface]
|
|
92
|
+
*/
|
|
93
|
+
watchDynamoDbTable(dynamoDbTable, options = {}) {
|
|
94
|
+
new _1.WatchDynamoDbTable(this, dynamoDbTable.node.id, {
|
|
95
|
+
watchful: this,
|
|
96
|
+
dynamoDbTable: dynamoDbTable,
|
|
97
|
+
...options,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.AbstractWatchful = AbstractWatchful;
|
|
102
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
103
|
+
AbstractWatchful[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.AbstractWatchful", version: "0.0.0" };
|
|
11
104
|
/**
|
|
12
105
|
* A construct to watch given scope or resources. Opinionated DataDog alarms are automatically created for watched resources.
|
|
13
106
|
*/
|
|
14
|
-
class Watchful extends
|
|
107
|
+
class Watchful extends AbstractWatchful {
|
|
15
108
|
constructor(scope, id, props = {}) {
|
|
16
109
|
super(scope, id);
|
|
17
110
|
// const opsGenieAlarmTopicArn = Fn.importValue('opsgenie-cloudwatch-alarm-sns-topic-arn');
|
|
@@ -42,7 +135,7 @@ class Watchful extends constructs_1.Construct {
|
|
|
42
135
|
}
|
|
43
136
|
}
|
|
44
137
|
if (this.dataDogMonitorServiceToken !== undefined) {
|
|
45
|
-
new
|
|
138
|
+
new _1.DataDogMetricAlarm(scope, id, {
|
|
46
139
|
serviceToken: this.dataDogMonitorServiceToken ?? '',
|
|
47
140
|
serviceName: this.dataDogMonitorServiceName,
|
|
48
141
|
dataDogOpsGenieIntegrationName: this.dataDogOpsGenieIntegrationName ?? '',
|
|
@@ -61,7 +154,7 @@ class Watchful extends constructs_1.Construct {
|
|
|
61
154
|
*/
|
|
62
155
|
createLogAlarm(scope, id, alarm) {
|
|
63
156
|
if (this.dataDogMonitorServiceToken !== undefined) {
|
|
64
|
-
new
|
|
157
|
+
new _1.DataDogLogAlarm(scope, id, {
|
|
65
158
|
serviceToken: this.dataDogMonitorServiceToken ?? '',
|
|
66
159
|
serviceName: alarm.lambdaCloudwatchGroupName ?? this.dataDogMonitorServiceName,
|
|
67
160
|
autoCloseOpsGenieAlerts: alarm.autoCloseOpsGenieAlerts,
|
|
@@ -82,99 +175,11 @@ class Watchful extends constructs_1.Construct {
|
|
|
82
175
|
* Watches the given scope and adds alarms for known resources.
|
|
83
176
|
*/
|
|
84
177
|
watchScope(scope) {
|
|
85
|
-
const aspect = new
|
|
178
|
+
const aspect = new _1.WatchfulAspect(this);
|
|
86
179
|
aws_cdk_lib_1.Aspects.of(scope).add(aspect);
|
|
87
180
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Adds alarms for the given lambda function.
|
|
90
|
-
* @param fn A lambda function that should be watched [disable-awslint:ref-via-interface]
|
|
91
|
-
*/
|
|
92
|
-
watchLambdaFunction(fn, options = {}) {
|
|
93
|
-
new __1.WatchLambdaFunction(this, fn.node.id, {
|
|
94
|
-
watchful: this,
|
|
95
|
-
fn,
|
|
96
|
-
...options,
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Adds alarms for the given Cloudfront Distribution.
|
|
101
|
-
* @param cf A Cloudfront Distribution that should be watched [disable-awslint:ref-via-interface]
|
|
102
|
-
*/
|
|
103
|
-
watchCloudfrontDistribution(cf, options = {}) {
|
|
104
|
-
new __1.WatchCloudfrontDistribution(this, cf.node.id, {
|
|
105
|
-
watchful: this,
|
|
106
|
-
cf,
|
|
107
|
-
...options,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Adds alarms for the given ECS service.
|
|
112
|
-
* @param service An ECS service that should be watched [disable-awslint:ref-via-interface]
|
|
113
|
-
*/
|
|
114
|
-
watchEcsService(service, options = {}) {
|
|
115
|
-
new __1.WatchEcsService(this, service.node.id, {
|
|
116
|
-
watchful: this,
|
|
117
|
-
service,
|
|
118
|
-
...options,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Adds alarms for the given application load balancer.
|
|
123
|
-
* @param alb An application load balancer that should be watched [disable-awslint:ref-via-interface]
|
|
124
|
-
*/
|
|
125
|
-
watchAlb(alb, options = {}) {
|
|
126
|
-
new __1.WatchApplicationLoadBalancer(this, alb.node.id, {
|
|
127
|
-
watchful: this,
|
|
128
|
-
alb,
|
|
129
|
-
...options,
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Adds alarms for the given application target gorup.
|
|
134
|
-
* @param atg An application target group that should be watched [disable-awslint:ref-via-interface]
|
|
135
|
-
*/
|
|
136
|
-
watchApplicationTargetGroup(atg, options = {}) {
|
|
137
|
-
new __1.WatchApplicationTargetGroup(this, atg.node.id, {
|
|
138
|
-
watchful: this,
|
|
139
|
-
atg,
|
|
140
|
-
...options,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Adds alarms for the given DocDb cluster.
|
|
145
|
-
* @param docDb An DocDb cluster that should be watched [disable-awslint:ref-via-interface]
|
|
146
|
-
*/
|
|
147
|
-
watchDocDb(docDb, options = {}) {
|
|
148
|
-
new __1.WatchDocDbCluster(this, docDb.node.id, {
|
|
149
|
-
watchful: this,
|
|
150
|
-
docDb,
|
|
151
|
-
...options,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Adds alarms for the given database cluster.
|
|
156
|
-
* @param databaseCluster An database cluster that should be watched [disable-awslint:ref-via-interface]
|
|
157
|
-
*/
|
|
158
|
-
watchDatabaseCluster(databaseCluster, options = {}) {
|
|
159
|
-
new __1.WatchDatabaseCluster(this, databaseCluster.node.id, {
|
|
160
|
-
watchful: this,
|
|
161
|
-
databaseCluster,
|
|
162
|
-
...options,
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Adds alarms for the given DynamoDb table.
|
|
167
|
-
* @param dynamoDbTable An database cluster that should be watched [disable-awslint:ref-via-interface]
|
|
168
|
-
*/
|
|
169
|
-
watchDynamoDbTable(dynamoDbTable, options = {}) {
|
|
170
|
-
new __1.WatchDynamoDbTable(this, dynamoDbTable.node.id, {
|
|
171
|
-
watchful: this,
|
|
172
|
-
dynamoDbTable: dynamoDbTable,
|
|
173
|
-
...options,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
181
|
}
|
|
177
182
|
exports.Watchful = Watchful;
|
|
178
|
-
|
|
179
|
-
Watchful[
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hmdWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2F0Y2hmdWwvd2F0Y2hmdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNkM7QUFFN0MsaUVBQWlFO0FBUWpFLDJDQUEyQztBQUMzQywyQ0FBbUQ7QUFDbkQsMEJBc0JZO0FBb0RaOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFNckMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUF1QixFQUFFO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsMkZBQTJGO1FBQzNGLG1HQUFtRztRQUNuRyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztRQUVuRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUU3RixJQUFJLEtBQUssQ0FBQywwQkFBMEIsS0FBSyxTQUFTLEVBQUU7WUFFbEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDL0QsSUFBSSxFQUNKLGVBQWUsRUFDZixtQkFBbUIsQ0FDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUMsOEJBQThCLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQztTQUN6RztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDdEUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVB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U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CLENBQUMsZUFBb0MsRUFBRSxVQUF1QyxFQUFFO1FBQ3pHLElBQUksd0JBQW9CLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ3RELFFBQVEsRUFBRSxJQUFJO1lBQ2QsZUFBZTtZQUNmLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxhQUE2QixFQUFFLFVBQXFDLEVBQUU7UUFDOUYsSUFBSSxzQkFBa0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDbEQsUUFBUSxFQUFFLElBQUk7WUFDZCxhQUFhLEVBQUUsYUFBYTtZQUM1QixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQWxNSCw0QkFtTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3BlY3RzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgY3dfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGRvY2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1kb2NkYic7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgZWxidjIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgcmRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yZHMnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBXYXRjaGZ1bEFzcGVjdCxcbiAgV2F0Y2hMYW1iZGFGdW5jdGlvbixcbiAgV2F0Y2hMYW1iZGFGdW5jdGlvbk9wdGlvbnMsXG4gIFdhdGNoQ2xvdWRmcm9udERpc3RyaWJ1dGlvbixcbiAgV2F0Y2hDbG91ZGZyb250RGlzdHJpYnV0aW9uT3B0aW9ucyxcbiAgV2F0Y2hBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgV2F0Y2hBcHBsaWNhdGlvbkxvYWRCYWxhbmNlck9wdGlvbnMsXG4gIFdhdGNoRWNzU2VydmljZSxcbiAgV2F0Y2hFY3NTZXJ2aWNlT3B0aW9ucyxcbiAgV2F0Y2hBcHBsaWNhdGlvblRhcmdldEdyb3VwLFxuICBXYXRjaEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBPcHRpb25zLFxuICBEYXRhRG9nTWV0cmljQWxhcm0sXG4gIERhdGFEb2dMb2dBbGFybSxcbiAgTWV0cmljQWxhcm1Qcm9wcyxcbiAgV2F0Y2hEb2NEYkNsdXN0ZXIsXG4gIFdhdGNoRG9jRGJDbHVzdGVyT3B0aW9ucyxcbiAgV2F0Y2hEYXRhYmFzZUNsdXN0ZXIsXG4gIFdhdGNoRGF0YWJhc2VDbHVzdGVyT3B0aW9ucyxcbiAgV2F0Y2hEeW5hbW9EYlRhYmxlLFxuICBXYXRjaER5bmFtb0RiVGFibGVPcHRpb25zLFxuICBMb2dBbGFybVByb3BzLFxufSBmcm9tICcuLic7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBXYXRjaGZ1bCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJV2F0Y2hmdWwgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEFkZHMgYW5kIGFsZXJ0IGZvciBlcnJvciBsb2dzXG4gICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgc2VydmljZVxuICAgKi9cbiAgY3JlYXRlTG9nQWxhcm0oc2NvcGU6IENvbnN0cnVjdCwgc2VydmljZU5hbWU6IHN0cmluZywgYWxhcm06IExvZ0FsYXJtUHJvcHMpOiB2b2lkO1xuICAvKipcbiAgICogQWRkcyB0aGUgYWxhcm1Ub3BpYyBhcyBhbGFybSBhY3Rpb24gdG8gdGhlIGdpdmVuIGFsYXJtLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIHdhdGNoZnVsIHRvIGFkZCB0aG9zZSByZXNvdXJjZXMgdG9cbiAgICpcbiAgICovXG4gIGNyZWF0ZUFsYXJtKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFsYXJtOiBNZXRyaWNBbGFybVByb3BzKTogdm9pZDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBkZWZpbmluZyBXYXRjaGZ1bFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhdGNoZnVsUHJvcHMge1xuICAvKipcbiAgICogQW4gU05TIHRvcGljIGFzIHRhcmdldCBmb3IgYWxhcm0gYWN0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IFRoZSBTTlMgdG9waWMgcHJvdmlkZWQgYnkgT3BzR2VuaWUgSW50ZWdyYXRpb24gYWNjb3VudCBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBhbGFybVNucz86IHNucy5JVG9waWM7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIHRva2VuIGZvciB0aGUgRGF0YURvZyBNb25pdG9yIGN1c3RvbSByZXNvdXJjZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IEVtcHR5LlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0OiBUaGUgc3RhY2sgYW5tZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFEb2dNb25pdG9yU2VydmljZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBPcHNHZW5pZSBoYW5kbGUgdXNlZCBpbiBEYXRhRG9nIHRvIGZvcndhcmQgdGhlIEREIG1vbml0b3IgdG8gT3BzR2VuaWUuXG4gICAqXG4gICAqIEBkZWZhdWx0OiBFbXB0eSBpZiBkYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbiBpcyBub3Qgc2V0LiBPdGhlcndpc2UsIHRlYW0gU1NNIHBhcmFtZXRlciBmcm9tIExhbmRpbmdab25lIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgdG8gd2F0Y2ggZ2l2ZW4gc2NvcGUgb3IgcmVzb3VyY2VzLiBPcGluaW9uYXRlZCBEYXRhRG9nIGFsYXJtcyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciB3YXRjaGVkIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdhdGNoZnVsIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVdhdGNoZnVsIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGFybVRvcGljPzogc25zLklUb3BpYztcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbj86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YURvZ01vbml0b3JTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXYXRjaGZ1bFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gY29uc3Qgb3BzR2VuaWVBbGFybVRvcGljQXJuID0gRm4uaW1wb3J0VmFsdWUoJ29wc2dlbmllLWNsb3Vkd2F0Y2gtYWxhcm0tc25zLXRvcGljLWFybicpO1xuICAgIC8vIGNvbnN0IG9wc0dlbmllQWxhcm1Ub3BpYyA9IHNucy5Ub3BpYy5mcm9tVG9waWNBcm4odGhpcywgJ09wc0dlbmllVG9waWMnLCBvcHNHZW5pZUFsYXJtVG9waWNBcm4pO1xuICAgIHRoaXMuYWxhcm1Ub3BpYyA9IHByb3BzLmFsYXJtU25zO1xuICAgIHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4gPSBwcm9wcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbjtcblxuICAgIHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlTmFtZSA9IHByb3BzLmRhdGFEb2dNb25pdG9yU2VydmljZU5hbWUgPz8gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuXG4gICAgaWYgKHByb3BzLmRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgY29uc3QgdGVhbU5hbWVQYXJhbSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdUZWFtTmFtZVBhcmFtJyxcbiAgICAgICAgJy9jb25maWcvdGVhbS9uYW1lJyxcbiAgICAgICk7XG4gICAgICB0aGlzLmRhdGFEb2dPcHNHZW5pZUludGVncmF0aW9uTmFtZSA9IHByb3BzLmRhdGFEb2dPcHNHZW5pZUludGVncmF0aW9uTmFtZSA/PyB0ZWFtTmFtZVBhcmFtLnN0cmluZ1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBhbGFybVRvcGljIGFzIGFsYXJtIGFjdGlvbiB0byB0aGUgZ2l2ZW4gYWxhcm0uXG4gICAqIEBwYXJhbSBhbGFybSBUaGUgd2F0Y2hmdWwgdG8gYWRkIHRob3NlIHJlc291cmNlcyB0b1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFsYXJtKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFsYXJtOiBNZXRyaWNBbGFybVByb3BzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxhcm1Ub3BpYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjd0FsYXJtID0gYWxhcm0ubWV0cmljLmNyZWF0ZUFsYXJtKHNjb3BlLCBpZCwge1xuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBhbGFybS5hbGFybURlc2NyaXB0aW9uLFxuICAgICAgICB0aHJlc2hvbGQ6IGFsYXJtLnRocmVzaG9sZCxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBhbGFybS5jb21wYXJpc29uT3BlcmF0b3IsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBhbGFybS5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuYWxhcm1Ub3BpYykge1xuICAgICAgICBjd0FsYXJtLmFkZEFsYXJtQWN0aW9uKG5ldyBjd19hY3Rpb25zLlNuc0FjdGlvbih0aGlzLmFsYXJtVG9waWMpKTtcbiAgICAgICAgY3dBbGFybS5hZGRPa0FjdGlvbihuZXcgY3dfYWN0aW9ucy5TbnNBY3Rpb24odGhpcy5hbGFybVRvcGljKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3IERhdGFEb2dNZXRyaWNBbGFybShzY29wZSwgaWQsIHtcbiAgICAgICAgc2VydmljZVRva2VuOiB0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuID8/ICcnLFxuICAgICAgICBzZXJ2aWNlTmFtZTogdGhpcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VOYW1lLFxuICAgICAgICBkYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWU6IHRoaXMuZGF0YURvZ09wc0dlbmllSW50ZWdyYXRpb25OYW1lID8/ICcnLFxuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBhbGFybS5hbGFybURlc2NyaXB0aW9uLFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGFsYXJtLmNvbXBhcmlzb25PcGVyYXRvcixcbiAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IGFsYXJtLmV2YWx1YXRpb25QZXJpb2RzLFxuICAgICAgICBtZXRyaWM6IGFsYXJtLm1ldHJpYyxcbiAgICAgICAgdGhyZXNob2xkOiBhbGFybS50aHJlc2hvbGQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGFsYXJtLnRyZWF0TWlzc2luZ0RhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBhbGVydCBmb3IgZXJyb3IgbG9nc1xuICAgKiBAcGFyYW0gc2NvcGVcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVMb2dBbGFybShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhbGFybTogTG9nQWxhcm1Qcm9wcyk6dm9pZCB7XG5cbiAgICBpZiAodGhpcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgRGF0YURvZ0xvZ0FsYXJtKHNjb3BlLCBpZCwge1xuICAgICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4gPz8gJycsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBhbGFybS5sYW1iZGFDbG91ZHdhdGNoR3JvdXBOYW1lID8/IHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlTmFtZSxcbiAgICAgICAgYXV0b0Nsb3NlT3BzR2VuaWVBbGVydHM6IGFsYXJtLmF1dG9DbG9zZU9wc0dlbmllQWxlcnRzLFxuICAgICAgICBwZXJpb2Q6IGFsYXJtLnBlcmlvZCxcbiAgICAgICAgdW5pdE9mUGVyaW9kOiBhbGFybS51bml0T2ZQZXJpb2QsIC8vIHRvRG86IG1vdmUgdGhhdCBzb21ld2hlcmUgZWxzZSBhbmQgc2V0IGRlZmF1bHRzIHRoZXJlP1xuICAgICAgICBwZXJpb2RPcGVyYXRvcjogYWxhcm0ucGVyaW9kT3BlcmF0b3IsXG4gICAgICAgIHN0YXRpc3RpYzogYWxhcm0uc3RhdGlzdGljLFxuICAgICAgICBxdWVyeUZpbHRlcnM6IGFsYXJtLnF1ZXJ5RmlsdGVycywgLy8gdG9EbzogbW92ZSB0aGF0IHNvbWV3aGVyZSBlbHNlIGFuZCBzZXQgZGVmYXVsdHMgdGhlcmU/XG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGFsYXJtLmFsYXJtRGVzY3JpcHRpb24sXG4gICAgICAgIHRocmVzaG9sZDogYWxhcm0udGhyZXNob2xkLFxuICAgICAgICBwcmlvcml0eTogYWxhcm0ucHJpb3JpdHksXG4gICAgICAgIGluZGV4OiBhbGFybS5pbmRleCxcbiAgICAgICAgbGFtYmRhQ2xvdWR3YXRjaEdyb3VwTmFtZTogYWxhcm0ubGFtYmRhQ2xvdWR3YXRjaEdyb3VwTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVzIHRoZSBnaXZlbiBzY29wZSBhbmQgYWRkcyBhbGFybXMgZm9yIGtub3duIHJlc291cmNlcy5cbiAgICovXG4gIHB1YmxpYyB3YXRjaFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBhc3BlY3QgPSBuZXcgV2F0Y2hmdWxBc3BlY3QodGhpcyk7XG4gICAgQXNwZWN0cy5vZihzY29wZSkuYWRkKGFzcGVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBmbiBBIGxhbWJkYSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSB3YXRjaGVkIFtkaXNhYmxlLWF3c2xpbnQ6cmVmLXZpYS1pbnRlcmZhY2VdXG4gICAqL1xuICBwdWJsaWMgd2F0Y2hMYW1iZGFGdW5jdGlvbihmbjogbGFtYmRhLkZ1bmN0aW9uLCBvcHRpb25zOiBXYXRjaExhbWJkYUZ1bmN0aW9uT3B0aW9ucyA9IHt9KTogdm9pZCB7XG5cbiAgICBuZXcgV2F0Y2hMYW1iZGFGdW5jdGlvbih0aGlzLCBmbi5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGZuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFsYXJtcyBmb3IgdGhlIGdpdmVuIENsb3VkZnJvbnQgRGlzdHJpYnV0aW9uLlxuICAgKiBAcGFyYW0gY2YgQSBDbG91ZGZyb250IERpc3RyaWJ1dGlvbiB0aGF0IHNob3VsZCBiZSB3YXRjaGVkIFtkaXNhYmxlLWF3c2xpbnQ6cmVmLXZpYS1pbnRlcmZhY2VdXG4gICAqL1xuICBwdWJsaWMgd2F0Y2hDbG91ZGZyb250RGlzdHJpYnV0aW9uKFxuICAgIGNmOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvbixcbiAgICBvcHRpb25zOiBXYXRjaENsb3VkZnJvbnREaXN0cmlidXRpb25PcHRpb25zID0ge30sXG4gICk6IHZvaWQge1xuICAgIG5ldyBXYXRjaENsb3VkZnJvbnREaXN0cmlidXRpb24odGhpcywgY2Yubm9kZS5pZCwge1xuICAgICAgd2F0Y2hmdWw6IHRoaXMsXG4gICAgICBjZixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBFQ1Mgc2VydmljZS5cbiAgICogQHBhcmFtIHNlcnZpY2UgQW4gRUNTIHNlcnZpY2UgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoRWNzU2VydmljZShzZXJ2aWNlOiBlY3MuQmFzZVNlcnZpY2UsIG9wdGlvbnM6IFdhdGNoRWNzU2VydmljZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIG5ldyBXYXRjaEVjc1NlcnZpY2UodGhpcywgc2VydmljZS5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIHNlcnZpY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gbG9hZCBiYWxhbmNlci5cbiAgICogQHBhcmFtIGFsYiBBbiBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaEFsYihhbGI6IGVsYnYyLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLCBvcHRpb25zOiBXYXRjaEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgbmV3IFdhdGNoQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIodGhpcywgYWxiLm5vZGUuaWQsIHtcbiAgICAgIHdhdGNoZnVsOiB0aGlzLFxuICAgICAgYWxiLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFsYXJtcyBmb3IgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRhcmdldCBnb3J1cC5cbiAgICogQHBhcmFtIGF0ZyBBbiBhcHBsaWNhdGlvbiB0YXJnZXQgZ3JvdXAgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoQXBwbGljYXRpb25UYXJnZXRHcm91cChcbiAgICBhdGc6IGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAsXG4gICAgb3B0aW9uczogV2F0Y2hBcHBsaWNhdGlvblRhcmdldEdyb3VwT3B0aW9ucyA9IHt9LFxuICApOiB2b2lkIHtcbiAgICBuZXcgV2F0Y2hBcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsIGF0Zy5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGF0ZyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBEb2NEYiBjbHVzdGVyLlxuICAgKiBAcGFyYW0gZG9jRGIgQW4gIERvY0RiIGNsdXN0ZXIgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoRG9jRGIoZG9jRGI6IGRvY2RiLkRhdGFiYXNlQ2x1c3Rlciwgb3B0aW9uczogV2F0Y2hEb2NEYkNsdXN0ZXJPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBuZXcgV2F0Y2hEb2NEYkNsdXN0ZXIodGhpcywgZG9jRGIubm9kZS5pZCwge1xuICAgICAgd2F0Y2hmdWw6IHRoaXMsXG4gICAgICBkb2NEYixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBkYXRhYmFzZSBjbHVzdGVyLlxuICAgKiBAcGFyYW0gZGF0YWJhc2VDbHVzdGVyIEFuIGRhdGFiYXNlIGNsdXN0ZXIgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoRGF0YWJhc2VDbHVzdGVyKGRhdGFiYXNlQ2x1c3RlcjogcmRzLkRhdGFiYXNlQ2x1c3Rlciwgb3B0aW9uczogV2F0Y2hEYXRhYmFzZUNsdXN0ZXJPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBuZXcgV2F0Y2hEYXRhYmFzZUNsdXN0ZXIodGhpcywgZGF0YWJhc2VDbHVzdGVyLm5vZGUuaWQsIHtcbiAgICAgIHdhdGNoZnVsOiB0aGlzLFxuICAgICAgZGF0YWJhc2VDbHVzdGVyLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFsYXJtcyBmb3IgdGhlIGdpdmVuIER5bmFtb0RiIHRhYmxlLlxuICAgKiBAcGFyYW0gZHluYW1vRGJUYWJsZSBBbiBkYXRhYmFzZSBjbHVzdGVyIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaER5bmFtb0RiVGFibGUoZHluYW1vRGJUYWJsZTogZHluYW1vZGIuVGFibGUsIG9wdGlvbnM6IFdhdGNoRHluYW1vRGJUYWJsZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIG5ldyBXYXRjaER5bmFtb0RiVGFibGUodGhpcywgZHluYW1vRGJUYWJsZS5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGR5bmFtb0RiVGFibGU6IGR5bmFtb0RiVGFibGUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
183
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
184
|
+
Watchful[_b] = { fqn: "@rio-cloud/cdk-v2-constructs.Watchful", version: "0.0.0" };
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hmdWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2F0Y2hmdWwvd2F0Y2hmdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBNkM7QUFFN0MsaUVBQWlFO0FBUWpFLDJDQUEyQztBQUMzQywyQ0FBbUQ7QUFDbkQseUJBc0JZO0FBbUJaLE1BQXNCLGdCQUFpQixTQUFRLHNCQUFTO0lBSXREOzs7T0FHRztJQUNJLG1CQUFtQixDQUFDLEVBQW1CLEVBQUUsVUFBc0MsRUFBRTtRQUV0RixJQUFJLHNCQUFtQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxRQUFRLEVBQUUsSUFBSTtZQUNkLEVBQUU7WUFDRixHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksMkJBQTJCLENBQ2hDLEVBQTJCLEVBQzNCLFVBQThDLEVBQUU7UUFFaEQsSUFBSSw4QkFBMkIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDaEQsUUFBUSxFQUFFLElBQUk7WUFDZCxFQUFFO1lBQ0YsR0FBRyxPQUFPO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxPQUF3QixFQUFFLFVBQWtDLEVBQUU7UUFDbkYsSUFBSSxrQkFBZSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU87WUFDUCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUSxDQUFDLEdBQWtDLEVBQUUsVUFBK0MsRUFBRTtRQUNuRyxJQUFJLCtCQUE0QixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxRQUFRLEVBQUUs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Q2hDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dCQUMxQixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7Z0JBQ2hDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ3hDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO2dCQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLHlCQUF5QixFQUFFLEtBQUssQ0FBQyx5QkFBeUI7YUFDM0QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsS0FBZ0I7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLHFCQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDOztBQTNGSCw0QkE2RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3BlY3RzLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0ICogYXMgY3dfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGRvY2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1kb2NkYic7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgZWxidjIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgcmRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yZHMnO1xuaW1wb3J0ICogYXMgc25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBXYXRjaGZ1bEFzcGVjdCxcbiAgV2F0Y2hMYW1iZGFGdW5jdGlvbixcbiAgV2F0Y2hMYW1iZGFGdW5jdGlvbk9wdGlvbnMsXG4gIFdhdGNoQ2xvdWRmcm9udERpc3RyaWJ1dGlvbixcbiAgV2F0Y2hDbG91ZGZyb250RGlzdHJpYnV0aW9uT3B0aW9ucyxcbiAgV2F0Y2hBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgV2F0Y2hBcHBsaWNhdGlvbkxvYWRCYWxhbmNlck9wdGlvbnMsXG4gIFdhdGNoRWNzU2VydmljZSxcbiAgV2F0Y2hFY3NTZXJ2aWNlT3B0aW9ucyxcbiAgV2F0Y2hBcHBsaWNhdGlvblRhcmdldEdyb3VwLFxuICBXYXRjaEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBPcHRpb25zLFxuICBEYXRhRG9nTWV0cmljQWxhcm0sXG4gIERhdGFEb2dMb2dBbGFybSxcbiAgTWV0cmljQWxhcm1Qcm9wcyxcbiAgV2F0Y2hEb2NEYkNsdXN0ZXIsXG4gIFdhdGNoRG9jRGJDbHVzdGVyT3B0aW9ucyxcbiAgV2F0Y2hEYXRhYmFzZUNsdXN0ZXIsXG4gIFdhdGNoRGF0YWJhc2VDbHVzdGVyT3B0aW9ucyxcbiAgV2F0Y2hEeW5hbW9EYlRhYmxlLFxuICBXYXRjaER5bmFtb0RiVGFibGVPcHRpb25zLFxuICBMb2dBbGFybVByb3BzLFxufSBmcm9tICcuLyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBXYXRjaGZ1bCBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJV2F0Y2hmdWwgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEFkZHMgYW5kIGFsZXJ0IGZvciBlcnJvciBsb2dzXG4gICAqIEBwYXJhbSBzZXJ2aWNlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqL1xuICBjcmVhdGVMb2dBbGFybShzY29wZTogQ29uc3RydWN0LCBzZXJ2aWNlTmFtZTogc3RyaW5nLCBhbGFybTogTG9nQWxhcm1Qcm9wcyk6IHZvaWQ7XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBhbGFybVRvcGljIGFzIGFsYXJtIGFjdGlvbiB0byB0aGUgZ2l2ZW4gYWxhcm0uXG4gICAqIEBwYXJhbSBhbGFybSAtIFRoZSB3YXRjaGZ1bCB0byBhZGQgdGhvc2UgcmVzb3VyY2VzIHRvXG4gICAqXG4gICAqL1xuICBjcmVhdGVBbGFybShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhbGFybTogTWV0cmljQWxhcm1Qcm9wcyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFdhdGNoZnVsIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVdhdGNoZnVsIHtcbiAgYWJzdHJhY3QgY3JlYXRlTG9nQWxhcm0oc2NvcGU6IENvbnN0cnVjdCwgc2VydmljZU5hbWU6IHN0cmluZywgYWxhcm06IExvZ0FsYXJtUHJvcHMpOiB2b2lkXG4gIGFic3RyYWN0IGNyZWF0ZUFsYXJtKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFsYXJtOiBNZXRyaWNBbGFybVByb3BzKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSBmbiAtIEEgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaExhbWJkYUZ1bmN0aW9uKGZuOiBsYW1iZGEuRnVuY3Rpb24sIG9wdGlvbnM6IFdhdGNoTGFtYmRhRnVuY3Rpb25PcHRpb25zID0ge30pOiB2b2lkIHtcblxuICAgIG5ldyBXYXRjaExhbWJkYUZ1bmN0aW9uKHRoaXMsIGZuLm5vZGUuaWQsIHtcbiAgICAgIHdhdGNoZnVsOiB0aGlzLFxuICAgICAgZm4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gQ2xvdWRmcm9udCBEaXN0cmlidXRpb24uXG4gICAqIEBwYXJhbSBjZiAtIEEgQ2xvdWRmcm9udCBEaXN0cmlidXRpb24gdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoQ2xvdWRmcm9udERpc3RyaWJ1dGlvbihcbiAgICBjZjogY2xvdWRmcm9udC5EaXN0cmlidXRpb24sXG4gICAgb3B0aW9uczogV2F0Y2hDbG91ZGZyb250RGlzdHJpYnV0aW9uT3B0aW9ucyA9IHt9LFxuICApOiB2b2lkIHtcbiAgICBuZXcgV2F0Y2hDbG91ZGZyb250RGlzdHJpYnV0aW9uKHRoaXMsIGNmLm5vZGUuaWQsIHtcbiAgICAgIHdhdGNoZnVsOiB0aGlzLFxuICAgICAgY2YsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gRUNTIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBzZXJ2aWNlIC0gQW4gRUNTIHNlcnZpY2UgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoRWNzU2VydmljZShzZXJ2aWNlOiBlY3MuQmFzZVNlcnZpY2UsIG9wdGlvbnM6IFdhdGNoRWNzU2VydmljZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIG5ldyBXYXRjaEVjc1NlcnZpY2UodGhpcywgc2VydmljZS5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIHNlcnZpY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gbG9hZCBiYWxhbmNlci5cbiAgICogQHBhcmFtIGFsYiAtIEFuIGFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXIgdGhhdCBzaG91bGQgYmUgd2F0Y2hlZCBbZGlzYWJsZS1hd3NsaW50OnJlZi12aWEtaW50ZXJmYWNlXVxuICAgKi9cbiAgcHVibGljIHdhdGNoQWxiKGFsYjogZWxidjIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsIG9wdGlvbnM6IFdhdGNoQXBwbGljYXRpb25Mb2FkQmFsYW5jZXJPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBuZXcgV2F0Y2hBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcih0aGlzLCBhbGIubm9kZS5pZCwge1xuICAgICAgd2F0Y2hmdWw6IHRoaXMsXG4gICAgICBhbGIsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gdGFyZ2V0IGdvcnVwLlxuICAgKiBAcGFyYW0gYXRnIC0gQW4gYXBwbGljYXRpb24gdGFyZ2V0IGdyb3VwIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAoXG4gICAgYXRnOiBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwLFxuICAgIG9wdGlvbnM6IFdhdGNoQXBwbGljYXRpb25UYXJnZXRHcm91cE9wdGlvbnMgPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgbmV3IFdhdGNoQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCBhdGcubm9kZS5pZCwge1xuICAgICAgd2F0Y2hmdWw6IHRoaXMsXG4gICAgICBhdGcsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYWxhcm1zIGZvciB0aGUgZ2l2ZW4gRG9jRGIgY2x1c3Rlci5cbiAgICogQHBhcmFtIGRvY0RiIC0gQW4gRG9jRGIgY2x1c3RlciB0aGF0IHNob3VsZCBiZSB3YXRjaGVkIFtkaXNhYmxlLWF3c2xpbnQ6cmVmLXZpYS1pbnRlcmZhY2VdXG4gICAqL1xuICBwdWJsaWMgd2F0Y2hEb2NEYihkb2NEYjogZG9jZGIuRGF0YWJhc2VDbHVzdGVyLCBvcHRpb25zOiBXYXRjaERvY0RiQ2x1c3Rlck9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIG5ldyBXYXRjaERvY0RiQ2x1c3Rlcih0aGlzLCBkb2NEYi5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGRvY0RiLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFsYXJtcyBmb3IgdGhlIGdpdmVuIGRhdGFiYXNlIGNsdXN0ZXIuXG4gICAqIEBwYXJhbSBkYXRhYmFzZUNsdXN0ZXIgLSBBbiBkYXRhYmFzZSBjbHVzdGVyIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaERhdGFiYXNlQ2x1c3RlcihkYXRhYmFzZUNsdXN0ZXI6IHJkcy5EYXRhYmFzZUNsdXN0ZXIsIG9wdGlvbnM6IFdhdGNoRGF0YWJhc2VDbHVzdGVyT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgbmV3IFdhdGNoRGF0YWJhc2VDbHVzdGVyKHRoaXMsIGRhdGFiYXNlQ2x1c3Rlci5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGRhdGFiYXNlQ2x1c3RlcixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbGFybXMgZm9yIHRoZSBnaXZlbiBEeW5hbW9EYiB0YWJsZS5cbiAgICogQHBhcmFtIGR5bmFtb0RiVGFibGUgLSBBbiBkYXRhYmFzZSBjbHVzdGVyIHRoYXQgc2hvdWxkIGJlIHdhdGNoZWQgW2Rpc2FibGUtYXdzbGludDpyZWYtdmlhLWludGVyZmFjZV1cbiAgICovXG4gIHB1YmxpYyB3YXRjaER5bmFtb0RiVGFibGUoZHluYW1vRGJUYWJsZTogZHluYW1vZGIuVGFibGUsIG9wdGlvbnM6IFdhdGNoRHluYW1vRGJUYWJsZU9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIG5ldyBXYXRjaER5bmFtb0RiVGFibGUodGhpcywgZHluYW1vRGJUYWJsZS5ub2RlLmlkLCB7XG4gICAgICB3YXRjaGZ1bDogdGhpcyxcbiAgICAgIGR5bmFtb0RiVGFibGU6IGR5bmFtb0RiVGFibGUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgZGVmaW5pbmcgV2F0Y2hmdWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXRjaGZ1bFByb3BzIHtcbiAgLyoqXG4gICAqIEFuIFNOUyB0b3BpYyBhcyB0YXJnZXQgZm9yIGFsYXJtIGFjdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgIFRoZSBTTlMgdG9waWMgcHJvdmlkZWQgYnkgT3BzR2VuaWUgSW50ZWdyYXRpb24gYWNjb3VudCBtb2R1bGUuXG4gICAqL1xuICByZWFkb25seSBhbGFybVNucz86IHNucy5JVG9waWM7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIHRva2VuIGZvciB0aGUgRGF0YURvZyBNb25pdG9yIGN1c3RvbSByZXNvdXJjZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBFbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIFRoZSBzdGFjayBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YURvZ01vbml0b3JTZXJ2aWNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9wc0dlbmllIGhhbmRsZSB1c2VkIGluIERhdGFEb2cgdG8gZm9yd2FyZCB0aGUgREQgbW9uaXRvciB0byBPcHNHZW5pZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSBFbXB0eSBpZiBkYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbiBpcyBub3Qgc2V0LiBPdGhlcndpc2UsIHRlYW0gU1NNIHBhcmFtZXRlciBmcm9tIExhbmRpbmdab25lIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgdG8gd2F0Y2ggZ2l2ZW4gc2NvcGUgb3IgcmVzb3VyY2VzLiBPcGluaW9uYXRlZCBEYXRhRG9nIGFsYXJtcyBhcmUgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciB3YXRjaGVkIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFdhdGNoZnVsIGV4dGVuZHMgQWJzdHJhY3RXYXRjaGZ1bCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxhcm1Ub3BpYz86IHNucy5JVG9waWM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YURvZ09wc0dlbmllSW50ZWdyYXRpb25OYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFEb2dNb25pdG9yU2VydmljZU5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogV2F0Y2hmdWxQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIGNvbnN0IG9wc0dlbmllQWxhcm1Ub3BpY0FybiA9IEZuLmltcG9ydFZhbHVlKCdvcHNnZW5pZS1jbG91ZHdhdGNoLWFsYXJtLXNucy10b3BpYy1hcm4nKTtcbiAgICAvLyBjb25zdCBvcHNHZW5pZUFsYXJtVG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdPcHNHZW5pZVRvcGljJywgb3BzR2VuaWVBbGFybVRvcGljQXJuKTtcbiAgICB0aGlzLmFsYXJtVG9waWMgPSBwcm9wcy5hbGFybVNucztcbiAgICB0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuID0gcHJvcHMuZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW47XG5cbiAgICB0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZU5hbWUgPSBwcm9wcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VOYW1lID8/IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcblxuICAgIGlmIChwcm9wcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbiAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIGNvbnN0IHRlYW1OYW1lUGFyYW0gPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnVGVhbU5hbWVQYXJhbScsXG4gICAgICAgICcvY29uZmlnL3RlYW0vbmFtZScsXG4gICAgICApO1xuICAgICAgdGhpcy5kYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWUgPSBwcm9wcy5kYXRhRG9nT3BzR2VuaWVJbnRlZ3JhdGlvbk5hbWUgPz8gdGVhbU5hbWVQYXJhbS5zdHJpbmdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyB0aGUgYWxhcm1Ub3BpYyBhcyBhbGFybSBhY3Rpb24gdG8gdGhlIGdpdmVuIGFsYXJtLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIHdhdGNoZnVsIHRvIGFkZCB0aG9zZSByZXNvdXJjZXMgdG9cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVBbGFybShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhbGFybTogTWV0cmljQWxhcm1Qcm9wcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsYXJtVG9waWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY3dBbGFybSA9IGFsYXJtLm1ldHJpYy5jcmVhdGVBbGFybShzY29wZSwgaWQsIHtcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYWxhcm0uYWxhcm1EZXNjcmlwdGlvbixcbiAgICAgICAgdGhyZXNob2xkOiBhbGFybS50aHJlc2hvbGQsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogYWxhcm0uY29tcGFyaXNvbk9wZXJhdG9yLFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogYWxhcm0uZXZhbHVhdGlvblBlcmlvZHMsXG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmFsYXJtVG9waWMpIHtcbiAgICAgICAgY3dBbGFybS5hZGRBbGFybUFjdGlvbihuZXcgY3dfYWN0aW9ucy5TbnNBY3Rpb24odGhpcy5hbGFybVRvcGljKSk7XG4gICAgICAgIGN3QWxhcm0uYWRkT2tBY3Rpb24obmV3IGN3X2FjdGlvbnMuU25zQWN0aW9uKHRoaXMuYWxhcm1Ub3BpYykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ldyBEYXRhRG9nTWV0cmljQWxhcm0oc2NvcGUsIGlkLCB7XG4gICAgICAgIHNlcnZpY2VUb2tlbjogdGhpcy5kYXRhRG9nTW9uaXRvclNlcnZpY2VUb2tlbiA/PyAnJyxcbiAgICAgICAgc2VydmljZU5hbWU6IHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlTmFtZSxcbiAgICAgICAgZGF0YURvZ09wc0dlbmllSW50ZWdyYXRpb25OYW1lOiB0aGlzLmRhdGFEb2dPcHNHZW5pZUludGVncmF0aW9uTmFtZSA/PyAnJyxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYWxhcm0uYWxhcm1EZXNjcmlwdGlvbixcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBhbGFybS5jb21wYXJpc29uT3BlcmF0b3IsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBhbGFybS5ldmFsdWF0aW9uUGVyaW9kcyxcbiAgICAgICAgbWV0cmljOiBhbGFybS5tZXRyaWMsXG4gICAgICAgIHRocmVzaG9sZDogYWxhcm0udGhyZXNob2xkLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBhbGFybS50cmVhdE1pc3NpbmdEYXRhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gYWxlcnQgZm9yIGVycm9yIGxvZ3NcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlTG9nQWxhcm0oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYWxhcm06IExvZ0FsYXJtUHJvcHMpOnZvaWQge1xuXG4gICAgaWYgKHRoaXMuZGF0YURvZ01vbml0b3JTZXJ2aWNlVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3IERhdGFEb2dMb2dBbGFybShzY29wZSwgaWQsIHtcbiAgICAgICAgc2VydmljZVRva2VuOiB0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZVRva2VuID8/ICcnLFxuICAgICAgICBzZXJ2aWNlTmFtZTogYWxhcm0ubGFtYmRhQ2xvdWR3YXRjaEdyb3VwTmFtZSA/PyB0aGlzLmRhdGFEb2dNb25pdG9yU2VydmljZU5hbWUsXG4gICAgICAgIGF1dG9DbG9zZU9wc0dlbmllQWxlcnRzOiBhbGFybS5hdXRvQ2xvc2VPcHNHZW5pZUFsZXJ0cyxcbiAgICAgICAgcGVyaW9kOiBhbGFybS5wZXJpb2QsXG4gICAgICAgIHVuaXRPZlBlcmlvZDogYWxhcm0udW5pdE9mUGVyaW9kLCAvLyB0b0RvOiBtb3ZlIHRoYXQgc29tZXdoZXJlIGVsc2UgYW5kIHNldCBkZWZhdWx0cyB0aGVyZT9cbiAgICAgICAgcGVyaW9kT3BlcmF0b3I6IGFsYXJtLnBlcmlvZE9wZXJhdG9yLFxuICAgICAgICBzdGF0aXN0aWM6IGFsYXJtLnN0YXRpc3RpYyxcbiAgICAgICAgcXVlcnlGaWx0ZXJzOiBhbGFybS5xdWVyeUZpbHRlcnMsIC8vIHRvRG86IG1vdmUgdGhhdCBzb21ld2hlcmUgZWxzZSBhbmQgc2V0IGRlZmF1bHRzIHRoZXJlP1xuICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBhbGFybS5hbGFybURlc2NyaXB0aW9uLFxuICAgICAgICB0aHJlc2hvbGQ6IGFsYXJtLnRocmVzaG9sZCxcbiAgICAgICAgcHJpb3JpdHk6IGFsYXJtLnByaW9yaXR5LFxuICAgICAgICBpbmRleDogYWxhcm0uaW5kZXgsXG4gICAgICAgIGxhbWJkYUNsb3Vkd2F0Y2hHcm91cE5hbWU6IGFsYXJtLmxhbWJkYUNsb3Vkd2F0Y2hHcm91cE5hbWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2hlcyB0aGUgZ2l2ZW4gc2NvcGUgYW5kIGFkZHMgYWxhcm1zIGZvciBrbm93biByZXNvdXJjZXMuXG4gICAqL1xuICBwdWJsaWMgd2F0Y2hTY29wZShzY29wZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgYXNwZWN0ID0gbmV3IFdhdGNoZnVsQXNwZWN0KHRoaXMpO1xuICAgIEFzcGVjdHMub2Yoc2NvcGUpLmFkZChhc3BlY3QpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Duration } from 'aws-cdk-lib';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
export interface DataDogLogQueryAlarmProps extends DataDogProps, LogAlarmProps {
|
|
4
|
+
}
|
|
5
|
+
export declare enum UnitOfPeriod {
|
|
6
|
+
SECONDS = "s",
|
|
7
|
+
MINUTES = "m",
|
|
8
|
+
HOURS = "h",
|
|
9
|
+
DAYS = "d"
|
|
10
|
+
}
|
|
11
|
+
export declare enum ComparisonOperator {
|
|
12
|
+
GREATER_THAN_OR_EQUAL_TO_THRESHOLD = ">=",
|
|
13
|
+
GREATER_THAN_THRESHOLD = ">",
|
|
14
|
+
LESS_THAN_OR_EQUAL_TO_THRESHOLD = "<=",
|
|
15
|
+
LESS_THAN_THRESHOLD = "<"
|
|
16
|
+
}
|
|
17
|
+
export interface DataDogProps {
|
|
18
|
+
readonly serviceName: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LogAlarmProps {
|
|
21
|
+
readonly autoCloseOpsGenieAlerts: boolean;
|
|
22
|
+
readonly period: Duration;
|
|
23
|
+
readonly unitOfPeriod?: UnitOfPeriod;
|
|
24
|
+
readonly periodOperator: ComparisonOperator;
|
|
25
|
+
readonly statistic: 'count';
|
|
26
|
+
readonly queryFilters: 'error' | 'warn';
|
|
27
|
+
readonly alarmDescription: string;
|
|
28
|
+
readonly threshold: number;
|
|
29
|
+
readonly priority: number;
|
|
30
|
+
readonly index: string;
|
|
31
|
+
readonly lambdaCloudwatchGroupName?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class DataDogLogAlarm extends Construct {
|
|
34
|
+
constructor(scope: Construct, id: string, props: DataDogLogQueryAlarmProps);
|
|
35
|
+
private alarmToDataDogQuery;
|
|
36
|
+
private convertToDatadogPeriod;
|
|
37
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataDogLogAlarm = exports.ComparisonOperator = exports.UnitOfPeriod = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const datadogv2_1 = require("../datadogv2");
|
|
7
|
+
var UnitOfPeriod;
|
|
8
|
+
(function (UnitOfPeriod) {
|
|
9
|
+
UnitOfPeriod["SECONDS"] = "s";
|
|
10
|
+
UnitOfPeriod["MINUTES"] = "m";
|
|
11
|
+
UnitOfPeriod["HOURS"] = "h";
|
|
12
|
+
UnitOfPeriod["DAYS"] = "d";
|
|
13
|
+
})(UnitOfPeriod = exports.UnitOfPeriod || (exports.UnitOfPeriod = {}));
|
|
14
|
+
const DEFAULT_UNIT_OF_PERIOD = UnitOfPeriod.SECONDS;
|
|
15
|
+
var ComparisonOperator;
|
|
16
|
+
(function (ComparisonOperator) {
|
|
17
|
+
ComparisonOperator["GREATER_THAN_OR_EQUAL_TO_THRESHOLD"] = ">=";
|
|
18
|
+
ComparisonOperator["GREATER_THAN_THRESHOLD"] = ">";
|
|
19
|
+
ComparisonOperator["LESS_THAN_OR_EQUAL_TO_THRESHOLD"] = "<=";
|
|
20
|
+
ComparisonOperator["LESS_THAN_THRESHOLD"] = "<";
|
|
21
|
+
})(ComparisonOperator = exports.ComparisonOperator || (exports.ComparisonOperator = {}));
|
|
22
|
+
class DataDogLogAlarm extends constructs_1.Construct {
|
|
23
|
+
constructor(scope, id, props) {
|
|
24
|
+
super(scope, id);
|
|
25
|
+
new datadogv2_1.DatadogMonitor(scope, 'ErrorMonitorLogAlert', {
|
|
26
|
+
serviceName: props.serviceName,
|
|
27
|
+
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.LOG_ALERT,
|
|
28
|
+
name: `${this.node.scope?.node.id} ${id}`,
|
|
29
|
+
query: this.alarmToDataDogQuery(props),
|
|
30
|
+
message: `${props.alarmDescription}: {{log.link}}`,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
alarmToDataDogQuery(alarm) {
|
|
34
|
+
const [periodValue, periodUnit] = this.convertToDatadogPeriod(alarm.period, alarm.unitOfPeriod);
|
|
35
|
+
let comparisonOperator = alarm.periodOperator;
|
|
36
|
+
const filters = new Map([
|
|
37
|
+
['service', alarm.serviceName],
|
|
38
|
+
['account_id', aws_cdk_lib_1.Stack.of(this).account],
|
|
39
|
+
['status', alarm.queryFilters],
|
|
40
|
+
]);
|
|
41
|
+
const concatenatedFilters = Array.from(filters.entries())
|
|
42
|
+
.map(([filterKey, filterValue]) => `${filterKey}:${filterValue}`)
|
|
43
|
+
.join(' ');
|
|
44
|
+
return `logs("${concatenatedFilters}").index("${alarm.index}").rollup("${alarm.statistic}").last("${periodValue}${periodUnit}") ${comparisonOperator} ${alarm.threshold}`;
|
|
45
|
+
}
|
|
46
|
+
convertToDatadogPeriod(period, unitOfPeriod) {
|
|
47
|
+
const unit = unitOfPeriod ?? DEFAULT_UNIT_OF_PERIOD;
|
|
48
|
+
const mapPeriodToDatadogTime = {
|
|
49
|
+
[UnitOfPeriod.SECONDS]: () => period.toSeconds(),
|
|
50
|
+
[UnitOfPeriod.MINUTES]: () => period.toMinutes(),
|
|
51
|
+
[UnitOfPeriod.HOURS]: () => period.toHours(),
|
|
52
|
+
[UnitOfPeriod.DAYS]: () => period.toDays(),
|
|
53
|
+
};
|
|
54
|
+
return [
|
|
55
|
+
mapPeriodToDatadogTime[unit](),
|
|
56
|
+
unit.toString(),
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.DataDogLogAlarm = DataDogLogAlarm;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1sb2ctYWxhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2F0Y2hmdWx2Mi9kYXRhZG9nLWxvZy1hbGFybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEM7QUFDOUMsMkNBQXVDO0FBQ3ZDLDRDQUE0RTtBQUs1RSxJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7SUFDYiwyQkFBVyxDQUFBO0lBQ1gsMEJBQVUsQ0FBQTtBQUNaLENBQUMsRUFMVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQUt2QjtBQUVELE1BQU0sc0JBQXNCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztBQUVwRCxJQUFZLGtCQUtYO0FBTEQsV0FBWSxrQkFBa0I7SUFDNUIsK0RBQXlDLENBQUE7SUFDekMsa0RBQTRCLENBQUE7SUFDNUIsNERBQXNDLENBQUE7SUFDdEMsK0NBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLGtCQUFrQixHQUFsQiwwQkFBa0IsS0FBbEIsMEJBQWtCLFFBSzdCO0FBb0JELE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQUM1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSwwQkFBYyxDQUFDLEtBQUssRUFDdEIsc0JBQXNCLEVBQ3RCO1lBQ0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSx3Q0FBNEIsQ0FBQyxTQUFTO1lBQ25ELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsZ0JBQWdCO1NBQ25ELENBQUMsQ0FBQztJQUVQLENBQUM7SUFDTyxtQkFBbUIsQ0FBQyxLQUFnQztRQUUxRCxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUM7WUFDdEIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUM5QixDQUFDLFlBQVksRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDdEMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQztTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQzthQUNoRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFYixPQUFPLFNBQVMsbUJBQW1CLGFBQWEsS0FBSyxDQUFDLEtBQUssY0FBYyxLQUFLLENBQUMsU0FBUyxZQUFZLFdBQVcsR0FBRyxVQUFVLE1BQU0sa0JBQWtCLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzVLLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxNQUFnQixFQUFFLFlBQTJCO1FBQzFFLE1BQU0sSUFBSSxHQUFHLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztRQUNwRCxNQUFNLHNCQUFzQixHQUFHO1lBQzdCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDaEQsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNoRCxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzVDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7U0FDM0MsQ0FBQztRQUNGLE9BQU87WUFDTCxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsUUFBUSxFQUFFO1NBQ2hCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEvQ0QsMENBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZSB9IGZyb20gJy4uL2RhdGFkb2d2Mic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YURvZ0xvZ1F1ZXJ5QWxhcm1Qcm9wcyBleHRlbmRzIERhdGFEb2dQcm9wcywgTG9nQWxhcm1Qcm9wcyB7XG59XG5cbmV4cG9ydCBlbnVtIFVuaXRPZlBlcmlvZCB7XG4gIFNFQ09ORFMgPSAncycsXG4gIE1JTlVURVMgPSAnbScsXG4gIEhPVVJTID0gJ2gnLFxuICBEQVlTID0gJ2QnLFxufVxuXG5jb25zdCBERUZBVUxUX1VOSVRfT0ZfUEVSSU9EID0gVW5pdE9mUGVyaW9kLlNFQ09ORFM7XG5cbmV4cG9ydCBlbnVtIENvbXBhcmlzb25PcGVyYXRvciB7XG4gIEdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQgPSAnPj0nLFxuICBHUkVBVEVSX1RIQU5fVEhSRVNIT0xEID0gJz4nLFxuICBMRVNTX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xEID0gJzw9JyxcbiAgTEVTU19USEFOX1RIUkVTSE9MRCA9ICc8Jyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhRG9nUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nOyAvLyBuZWVkcyB0byBtYXRjaCB0aGUgc2VydmljZSBuYW1lIHVzZWQgaW4gZGF0YWRvZy1pbnRlZ3JhdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ0FsYXJtUHJvcHMge1xuICByZWFkb25seSBhdXRvQ2xvc2VPcHNHZW5pZUFsZXJ0czogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGVyaW9kOiBEdXJhdGlvbjtcbiAgcmVhZG9ubHkgdW5pdE9mUGVyaW9kPzogVW5pdE9mUGVyaW9kOyAvLyB1bml0IHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFsZXJ0LiBpZiBub25lIGlzIHByb3ZpZGVkIHRoZSBwZXJpb2RzIHVuaXQgd2lsbCBkZWZhdWx0IHRvIHNlY29uZHNcbiAgcmVhZG9ubHkgcGVyaW9kT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcjtcbiAgcmVhZG9ubHkgc3RhdGlzdGljOiAnY291bnQnOyAvLyBhZ2dyZWdhdGlvbiBmdW5jdGlvblxuICByZWFkb25seSBxdWVyeUZpbHRlcnM6ICdlcnJvcid8J3dhcm4nOyAvLyBpdCBzaG91bGQgZWl0aGVyIHNheSBlcnJvciBvciB3YXJuXG4gIHJlYWRvbmx5IGFsYXJtRGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGhyZXNob2xkOiBudW1iZXI7XG4gIHJlYWRvbmx5IHByaW9yaXR5OiBudW1iZXI7XG4gIHJlYWRvbmx5IGluZGV4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhbWJkYUNsb3Vkd2F0Y2hHcm91cE5hbWU/OiBzdHJpbmc7IC8vIFNob3VsZCBvbmx5IGJlIHNldCBpbiBjYXNlIG9mIGxhbWJkYSBmdW5jdGlvbi4gVGhlIGNsb3Vkd2F0Y2ggbG9nIGdyb3VwIG5hbWUgaXMgc2FtZSB0aGUgbGFtYmRhIGZ1bmN0aW9uIG5hbWVcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFEb2dMb2dBbGFybSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhRG9nTG9nUXVlcnlBbGFybVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcihzY29wZSxcbiAgICAgICdFcnJvck1vbml0b3JMb2dBbGVydCcsXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuTE9HX0FMRVJULFxuICAgICAgICBuYW1lOiBgJHt0aGlzLm5vZGUuc2NvcGU/Lm5vZGUuaWR9ICR7aWR9YCxcbiAgICAgICAgcXVlcnk6IHRoaXMuYWxhcm1Ub0RhdGFEb2dRdWVyeShwcm9wcyksXG4gICAgICAgIG1lc3NhZ2U6IGAke3Byb3BzLmFsYXJtRGVzY3JpcHRpb259OiB7e2xvZy5saW5rfX1gLFxuICAgICAgfSk7XG5cbiAgfVxuICBwcml2YXRlIGFsYXJtVG9EYXRhRG9nUXVlcnkoYWxhcm06IERhdGFEb2dMb2dRdWVyeUFsYXJtUHJvcHMpOiBzdHJpbmcge1xuXG4gICAgY29uc3QgW3BlcmlvZFZhbHVlLCBwZXJpb2RVbml0XSA9IHRoaXMuY29udmVydFRvRGF0YWRvZ1BlcmlvZChhbGFybS5wZXJpb2QsIGFsYXJtLnVuaXRPZlBlcmlvZCk7XG5cbiAgICBsZXQgY29tcGFyaXNvbk9wZXJhdG9yID0gYWxhcm0ucGVyaW9kT3BlcmF0b3I7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gbmV3IE1hcChbXG4gICAgICBbJ3NlcnZpY2UnLCBhbGFybS5zZXJ2aWNlTmFtZV0sXG4gICAgICBbJ2FjY291bnRfaWQnLCBTdGFjay5vZih0aGlzKS5hY2NvdW50XSxcbiAgICAgIFsnc3RhdHVzJywgYWxhcm0ucXVlcnlGaWx0ZXJzXSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNvbmNhdGVuYXRlZEZpbHRlcnMgPSBBcnJheS5mcm9tKGZpbHRlcnMuZW50cmllcygpKVxuICAgICAgLm1hcCgoW2ZpbHRlcktleSwgZmlsdGVyVmFsdWVdKSA9PiBgJHtmaWx0ZXJLZXl9OiR7ZmlsdGVyVmFsdWV9YClcbiAgICAgIC5qb2luKCcgJyk7XG5cbiAgICByZXR1cm4gYGxvZ3MoXCIke2NvbmNhdGVuYXRlZEZpbHRlcnN9XCIpLmluZGV4KFwiJHthbGFybS5pbmRleH1cIikucm9sbHVwKFwiJHthbGFybS5zdGF0aXN0aWN9XCIpLmxhc3QoXCIke3BlcmlvZFZhbHVlfSR7cGVyaW9kVW5pdH1cIikgJHtjb21wYXJpc29uT3BlcmF0b3J9ICR7YWxhcm0udGhyZXNob2xkfWA7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0RhdGFkb2dQZXJpb2QocGVyaW9kOiBEdXJhdGlvbiwgdW5pdE9mUGVyaW9kPzogVW5pdE9mUGVyaW9kKTogW251bWJlciwgc3RyaW5nXSB7XG4gICAgY29uc3QgdW5pdCA9IHVuaXRPZlBlcmlvZCA/PyBERUZBVUxUX1VOSVRfT0ZfUEVSSU9EO1xuICAgIGNvbnN0IG1hcFBlcmlvZFRvRGF0YWRvZ1RpbWUgPSB7XG4gICAgICBbVW5pdE9mUGVyaW9kLlNFQ09ORFNdOiAoKSA9PiBwZXJpb2QudG9TZWNvbmRzKCksXG4gICAgICBbVW5pdE9mUGVyaW9kLk1JTlVURVNdOiAoKSA9PiBwZXJpb2QudG9NaW51dGVzKCksXG4gICAgICBbVW5pdE9mUGVyaW9kLkhPVVJTXTogKCkgPT4gcGVyaW9kLnRvSG91cnMoKSxcbiAgICAgIFtVbml0T2ZQZXJpb2QuREFZU106ICgpID0+IHBlcmlvZC50b0RheXMoKSxcbiAgICB9O1xuICAgIHJldHVybiBbXG4gICAgICBtYXBQZXJpb2RUb0RhdGFkb2dUaW1lW3VuaXRdKCksXG4gICAgICB1bml0LnRvU3RyaW5nKCksXG4gICAgXTtcbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import { INotification } from '../datadogv2';
|
|
3
|
+
import { MetricAlarmProps } from '../watchful/metric-alarm';
|
|
4
|
+
/**
|
|
5
|
+
* Interface for DataDogMonitor implementation.
|
|
6
|
+
*/
|
|
7
|
+
export interface DataDogMetricAlarmProps extends MetricAlarmProps {
|
|
8
|
+
/**
|
|
9
|
+
* The service name used to name and tag the monitors.
|
|
10
|
+
*/
|
|
11
|
+
readonly serviceName: string;
|
|
12
|
+
/**
|
|
13
|
+
* The name of DataDog's OpsGenie integration. Used to automatically create OpsGenie alarms for the created DataDog Monitor.
|
|
14
|
+
*/
|
|
15
|
+
readonly notification?: INotification;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A wrapper for a custom resource that creates a DataDog Monitor.
|
|
19
|
+
*
|
|
20
|
+
* To use this construct, the DataDog integration needs to be installed.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DataDogMetricAlarm extends Construct {
|
|
23
|
+
constructor(scope: Construct, id: string, props: DataDogMetricAlarmProps);
|
|
24
|
+
private getMessage;
|
|
25
|
+
/**
|
|
26
|
+
* Helper function to convert a generic alarm into a DataDog query string.
|
|
27
|
+
*/
|
|
28
|
+
alarmToDataDogQuery(alarm: MetricAlarmProps): string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataDogMetricAlarm = void 0;
|
|
4
|
+
const cdk = require("aws-cdk-lib");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
const datadogv2_1 = require("../datadogv2");
|
|
8
|
+
const upperToLower_1 = require("../watchful/upperToLower");
|
|
9
|
+
/**
|
|
10
|
+
* A wrapper for a custom resource that creates a DataDog Monitor.
|
|
11
|
+
*
|
|
12
|
+
* To use this construct, the DataDog integration needs to be installed.
|
|
13
|
+
*/
|
|
14
|
+
class DataDogMetricAlarm extends constructs_1.Construct {
|
|
15
|
+
constructor(scope, id, props) {
|
|
16
|
+
super(scope, id);
|
|
17
|
+
new datadogv2_1.DatadogMonitor(this, 'ErrorMonitorMetricAlert', {
|
|
18
|
+
serviceName: props.serviceName,
|
|
19
|
+
name: `${this.node.scope?.node.id} ${id}`,
|
|
20
|
+
monitorType: datadogv2_1.DatadogMonitorQueryAlertType.QUERY_ALERT,
|
|
21
|
+
query: this.alarmToDataDogQuery(props),
|
|
22
|
+
message: this.getMessage(props),
|
|
23
|
+
notification: props.notification,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
getMessage(props) {
|
|
27
|
+
return `
|
|
28
|
+
{{#is_alert}}
|
|
29
|
+
${props.alarmDescription}
|
|
30
|
+
{{/is_alert}}
|
|
31
|
+
|
|
32
|
+
{{#is_alert_recovery}}
|
|
33
|
+
${props.alarmDescription} is back to normal.
|
|
34
|
+
{{/is_alert_recovery}}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Helper function to convert a generic alarm into a DataDog query string.
|
|
38
|
+
*/
|
|
39
|
+
alarmToDataDogQuery(alarm) {
|
|
40
|
+
let unit;
|
|
41
|
+
let totalPeriod;
|
|
42
|
+
if (alarm.metric.period.toSeconds() < 60) {
|
|
43
|
+
totalPeriod = alarm.metric.period.toSeconds() * alarm.evaluationPeriods;
|
|
44
|
+
unit = 's';
|
|
45
|
+
}
|
|
46
|
+
else if (alarm.metric.period.toMinutes() < 1440) {
|
|
47
|
+
totalPeriod = alarm.metric.period.toMinutes() * alarm.evaluationPeriods;
|
|
48
|
+
unit = 'm';
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
totalPeriod = alarm.metric.period.toDays() * alarm.evaluationPeriods;
|
|
52
|
+
unit = 'd';
|
|
53
|
+
}
|
|
54
|
+
// avg(last_15m):max:aws.fargate.cpu.percent{ecs_container_name:$ServiceName$} > 95
|
|
55
|
+
const namespace = alarm.metric.namespace.toLocaleLowerCase().replace('/', '.');
|
|
56
|
+
let metricName = alarm.metric.metricName;
|
|
57
|
+
// Special case for ALB / TargetGroup metrics
|
|
58
|
+
switch (metricName) {
|
|
59
|
+
case 'HTTPCode_ELB_5XX_Count':
|
|
60
|
+
metricName = 'HTTPCode_ELB_5XX';
|
|
61
|
+
break;
|
|
62
|
+
case 'HTTPCode_Target_5XX_Count':
|
|
63
|
+
metricName = 'HTTPCode_Target_5XX';
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
if (!metricName.includes('_')) {
|
|
67
|
+
metricName = metricName.replace(/([a-z])([A-Z])/g, '$1_$2');
|
|
68
|
+
}
|
|
69
|
+
metricName = metricName.toLocaleLowerCase();
|
|
70
|
+
const metric = `${namespace}.${metricName}`;
|
|
71
|
+
// statistics must be lowerCase and probably also converted (see allowed values in cw.Metric)
|
|
72
|
+
let comparisonOperator = 'not supported';
|
|
73
|
+
switch (alarm.comparisonOperator) {
|
|
74
|
+
case cdk.aws_cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD:
|
|
75
|
+
comparisonOperator = '>=';
|
|
76
|
+
break;
|
|
77
|
+
case cdk.aws_cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD:
|
|
78
|
+
comparisonOperator = '>';
|
|
79
|
+
break;
|
|
80
|
+
case cdk.aws_cloudwatch.ComparisonOperator.LESS_THAN_OR_EQUAL_TO_THRESHOLD:
|
|
81
|
+
comparisonOperator = '<=';
|
|
82
|
+
break;
|
|
83
|
+
case cdk.aws_cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD:
|
|
84
|
+
comparisonOperator = '<';
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
let alarmStatistic = 'not supported';
|
|
88
|
+
switch (alarm.metric.statistic) {
|
|
89
|
+
case cdk.aws_cloudwatch.Statistic.AVERAGE:
|
|
90
|
+
alarmStatistic = 'avg';
|
|
91
|
+
break;
|
|
92
|
+
case cdk.aws_cloudwatch.Statistic.MAXIMUM:
|
|
93
|
+
alarmStatistic = 'max';
|
|
94
|
+
break;
|
|
95
|
+
case cdk.aws_cloudwatch.Statistic.MINIMUM:
|
|
96
|
+
alarmStatistic = 'min';
|
|
97
|
+
break;
|
|
98
|
+
case cdk.aws_cloudwatch.Statistic.SAMPLE_COUNT:
|
|
99
|
+
break;
|
|
100
|
+
case cdk.aws_cloudwatch.Statistic.SUM:
|
|
101
|
+
alarmStatistic = 'sum';
|
|
102
|
+
break;
|
|
103
|
+
default:
|
|
104
|
+
alarmStatistic = 'avg';
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
let dimensions = `account_id:${aws_cdk_lib_1.Stack.of(this).account}`;
|
|
108
|
+
if (alarm.metric.dimensions) {
|
|
109
|
+
for (const key in alarm.metric.dimensions) {
|
|
110
|
+
const upperToLowerCr = new aws_cdk_lib_1.CustomResource(this, `${key}UpperToLower`, {
|
|
111
|
+
resourceType: 'Custom::UpperToLower',
|
|
112
|
+
serviceToken: upperToLower_1.UpperToLower.getOrCreate(this).provider.serviceToken,
|
|
113
|
+
properties: {
|
|
114
|
+
Upper: alarm.metric.dimensions[key],
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
const value = upperToLowerCr.getAtt('Lower');
|
|
118
|
+
dimensions += `,${key.toLocaleLowerCase()}:${value}`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
switch (alarm.treatMissingData) {
|
|
122
|
+
case cdk.aws_cloudwatch.TreatMissingData.NOT_BREACHING:
|
|
123
|
+
return `${alarmStatistic}(last_${totalPeriod}${unit}):default_zero(${alarmStatistic}:${metric}{${dimensions}}) ${comparisonOperator} ${alarm.threshold}`;
|
|
124
|
+
case cdk.aws_cloudwatch.TreatMissingData.BREACHING:
|
|
125
|
+
case cdk.aws_cloudwatch.TreatMissingData.IGNORE:
|
|
126
|
+
default:
|
|
127
|
+
return `${alarmStatistic}(last_${totalPeriod}${unit}):${alarmStatistic}:${metric}{${dimensions}} ${comparisonOperator} ${alarm.threshold}`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.DataDogMetricAlarm = DataDogMetricAlarm;
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1tZXRyaWMtYWxhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2F0Y2hmdWx2Mi9kYXRhZG9nLW1ldHJpYy1hbGFybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQW9EO0FBQ3BELDJDQUF1QztBQUN2Qyw0Q0FBMkY7QUFFM0YsMkRBQXdEO0FBbUJ4RDs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUztJQUUvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSwwQkFBYyxDQUFDLElBQUksRUFDckIseUJBQXlCLEVBQ3pCO1lBQ0UsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3pDLFdBQVcsRUFBRSx3Q0FBNEIsQ0FBQyxXQUFXO1lBQ3JELEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUMvQixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBRVAsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUE4QjtRQUMvQyxPQUFPOztFQUVULEtBQUssQ0FBQyxnQkFBZ0I7Ozs7RUFJdEIsS0FBSyxDQUFDLGdCQUFnQjt1QkFDRCxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLEtBQXVCO1FBQ3pDLElBQUksSUFBWSxDQUFDO1FBQ2pCLElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMs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Y0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUNuRCxLQUFLLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQ2hEO2dCQUNFLE9BQU8sR0FBRyxjQUFjLFNBQVMsV0FBVyxHQUFHLElBQUksS0FBSyxjQUFjLElBQUksTUFBTSxJQUFJLFVBQVUsS0FBSyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDOUk7SUFDSCxDQUFDO0NBQ0Y7QUFsSUQsZ0RBa0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUsIElOb3RpZmljYXRpb24gfSBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0IHsgTWV0cmljQWxhcm1Qcm9wcyB9IGZyb20gJy4uL3dhdGNoZnVsL21ldHJpYy1hbGFybSc7XG5pbXBvcnQgeyBVcHBlclRvTG93ZXIgfSBmcm9tICcuLi93YXRjaGZ1bC91cHBlclRvTG93ZXInO1xuXG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBEYXRhRG9nTW9uaXRvciBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhRG9nTWV0cmljQWxhcm1Qcm9wcyBleHRlbmRzIE1ldHJpY0FsYXJtUHJvcHMge1xuXG4gIC8qKlxuICAgICAqIFRoZSBzZXJ2aWNlIG5hbWUgdXNlZCB0byBuYW1lIGFuZCB0YWcgdGhlIG1vbml0b3JzLlxuICAgICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIERhdGFEb2cncyBPcHNHZW5pZSBpbnRlZ3JhdGlvbi4gVXNlZCB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBPcHNHZW5pZSBhbGFybXMgZm9yIHRoZSBjcmVhdGVkIERhdGFEb2cgTW9uaXRvci5cbiAgICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uPzogSU5vdGlmaWNhdGlvbjtcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIGEgY3VzdG9tIHJlc291cmNlIHRoYXQgY3JlYXRlcyBhIERhdGFEb2cgTW9uaXRvci5cbiAqXG4gKiBUbyB1c2UgdGhpcyBjb25zdHJ1Y3QsIHRoZSBEYXRhRG9nIGludGVncmF0aW9uIG5lZWRzIHRvIGJlIGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFEb2dNZXRyaWNBbGFybSBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFEb2dNZXRyaWNBbGFybVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLFxuICAgICAgJ0Vycm9yTW9uaXRvck1ldHJpY0FsZXJ0JyxcbiAgICAgIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBuYW1lOiBgJHt0aGlzLm5vZGUuc2NvcGU/Lm5vZGUuaWR9ICR7aWR9YCxcbiAgICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICAgIHF1ZXJ5OiB0aGlzLmFsYXJtVG9EYXRhRG9nUXVlcnkocHJvcHMpLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmdldE1lc3NhZ2UocHJvcHMpLFxuICAgICAgICBub3RpZmljYXRpb246IHByb3BzLm5vdGlmaWNhdGlvbixcbiAgICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGdldE1lc3NhZ2UocHJvcHM6IERhdGFEb2dNZXRyaWNBbGFybVByb3BzKSB7XG4gICAgcmV0dXJuIGBcbnt7I2lzX2FsZXJ0fX1cbiR7cHJvcHMuYWxhcm1EZXNjcmlwdGlvbn1cbnt7L2lzX2FsZXJ0fX0gXG5cbnt7I2lzX2FsZXJ0X3JlY292ZXJ5fX1cbiR7cHJvcHMuYWxhcm1EZXNjcmlwdGlvbn0gaXMgYmFjayB0byBub3JtYWwuXG57ey9pc19hbGVydF9yZWNvdmVyeX19YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIGdlbmVyaWMgYWxhcm0gaW50byBhIERhdGFEb2cgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgYWxhcm1Ub0RhdGFEb2dRdWVyeShhbGFybTogTWV0cmljQWxhcm1Qcm9wcyk6IHN0cmluZyB7XG4gICAgbGV0IHVuaXQ6IHN0cmluZztcbiAgICBsZXQgdG90YWxQZXJpb2Q6IG51bWJlcjtcbiAgICBpZiAoYWxhcm0ubWV0cmljLnBlcmlvZC50b1NlY29uZHMoKSA8IDYwKSB7XG4gICAgICB0b3RhbFBlcmlvZCA9IGFsYXJtLm1ldHJpYy5wZXJpb2QudG9TZWNvbmRzKCkgKiBhbGFybS5ldmFsdWF0aW9uUGVyaW9kcztcbiAgICAgIHVuaXQgPSAncyc7XG4gICAgfSBlbHNlIGlmIChhbGFybS5tZXRyaWMucGVyaW9kLnRvTWludXRlcygpIDwgMTQ0MCkge1xuICAgICAgdG90YWxQZXJpb2QgPSBhbGFybS5tZXRyaWMucGVyaW9kLnRvTWludXRlcygpICogYWxhcm0uZXZhbHVhdGlvblBlcmlvZHM7XG4gICAgICB1bml0ID0gJ20nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbFBlcmlvZCA9IGFsYXJtLm1ldHJpYy5wZXJpb2QudG9EYXlzKCkgKiBhbGFybS5ldmFsdWF0aW9uUGVyaW9kcztcbiAgICAgIHVuaXQgPSAnZCc7XG4gICAgfVxuXG4gICAgLy8gYXZnKGxhc3RfMTVtKTptYXg6YXdzLmZhcmdhdGUuY3B1LnBlcmNlbnR7ZWNzX2NvbnRhaW5lcl9uYW1lOiRTZXJ2aWNlTmFtZSR9ID4gOTVcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBhbGFybS5tZXRyaWMubmFtZXNwYWNlLnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgnLycsICcuJyk7XG5cbiAgICBsZXQgbWV0cmljTmFtZSA9IGFsYXJtLm1ldHJpYy5tZXRyaWNOYW1lO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGZvciBBTEIgLyBUYXJnZXRHcm91cCBtZXRyaWNzXG4gICAgc3dpdGNoIChtZXRyaWNOYW1lKSB7XG4gICAgICBjYXNlICdIVFRQQ29kZV9FTEJfNVhYX0NvdW50JzpcbiAgICAgICAgbWV0cmljTmFtZSA9ICdIVFRQQ29kZV9FTEJfNVhYJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIVFRQQ29kZV9UYXJnZXRfNVhYX0NvdW50JzpcbiAgICAgICAgbWV0cmljTmFtZSA9ICdIVFRQQ29kZV9UYXJnZXRfNVhYJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghbWV0cmljTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICBtZXRyaWNOYW1lID0gbWV0cmljTmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDFfJDInKTtcbiAgICB9XG4gICAgbWV0cmljTmFtZSA9IG1ldHJpY05hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IG1ldHJpYyA9IGAke25hbWVzcGFjZX0uJHttZXRyaWNOYW1lfWA7XG5cbiAgICAvLyBzdGF0aXN0aWNzIG11c3QgYmUgbG93ZXJDYXNlIGFuZCBwcm9iYWJseSBhbHNvIGNvbnZlcnRlZCAoc2VlIGFsbG93ZWQgdmFsdWVzIGluIGN3Lk1ldHJpYylcbiAgICBsZXQgY29tcGFyaXNvbk9wZXJhdG9yID0gJ25vdCBzdXBwb3J0ZWQnO1xuICAgIHN3aXRjaCAoYWxhcm0uY29tcGFyaXNvbk9wZXJhdG9yKSB7XG4gICAgICBjYXNlIGNkay5hd3NfY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRDpcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yID0gJz49JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNkay5hd3NfY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRDpcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yID0gJz4nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xEOlxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3IgPSAnPD0nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xEOlxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3IgPSAnPCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGxldCBhbGFybVN0YXRpc3RpYyA9ICdub3Qgc3VwcG9ydGVkJztcbiAgICBzd2l0Y2ggKGFsYXJtLm1ldHJpYy5zdGF0aXN0aWMpIHtcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLlN0YXRpc3RpYy5BVkVSQUdFOlxuICAgICAgICBhbGFybVN0YXRpc3RpYyA9ICdhdmcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLlN0YXRpc3RpYy5NQVhJTVVNOlxuICAgICAgICBhbGFybVN0YXRpc3RpYyA9ICdtYXgnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLlN0YXRpc3RpYy5NSU5JTVVNOlxuICAgICAgICBhbGFybVN0YXRpc3RpYyA9ICdtaW4nO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLlN0YXRpc3RpYy5TQU1QTEVfQ09VTlQ6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjZGsuYXdzX2Nsb3Vkd2F0Y2guU3RhdGlzdGljLlNVTTpcbiAgICAgICAgYWxhcm1TdGF0aXN0aWMgPSAnc3VtJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhbGFybVN0YXRpc3RpYyA9ICdhdmcnO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgZGltZW5zaW9ucyA9IGBhY2NvdW50X2lkOiR7U3RhY2sub2YodGhpcykuYWNjb3VudH1gO1xuXG4gICAgaWYgKGFsYXJtLm1ldHJpYy5kaW1lbnNpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBhbGFybS5tZXRyaWMuZGltZW5zaW9ucykge1xuICAgICAgICBjb25zdCB1cHBlclRvTG93ZXJDciA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtrZXl9VXBwZXJUb0xvd2VyYCwge1xuICAgICAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6VXBwZXJUb0xvd2VyJyxcbiAgICAgICAgICBzZXJ2aWNlVG9rZW46IFVwcGVyVG9Mb3dlci5nZXRPckNyZWF0ZSh0aGlzKS5wcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgVXBwZXI6IGFsYXJtLm1ldHJpYy5kaW1lbnNpb25zW2tleV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdXBwZXJUb0xvd2VyQ3IuZ2V0QXR0KCdMb3dlcicpO1xuICAgICAgICBkaW1lbnNpb25zICs9IGAsJHtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKX06JHt2YWx1ZX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxhcm0udHJlYXRNaXNzaW5nRGF0YSkge1xuICAgICAgY2FzZSBjZGsuYXdzX2Nsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HOlxuICAgICAgICByZXR1cm4gYCR7YWxhcm1TdGF0aXN0aWN9KGxhc3RfJHt0b3RhbFBlcmlvZH0ke3VuaXR9KTpkZWZhdWx0X3plcm8oJHthbGFybVN0YXRpc3RpY306JHttZXRyaWN9eyR7ZGltZW5zaW9uc319KSAke2NvbXBhcmlzb25PcGVyYXRvcn0gJHthbGFybS50aHJlc2hvbGR9YDtcbiAgICAgIGNhc2UgY2RrLmF3c19jbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuQlJFQUNISU5HOlxuICAgICAgY2FzZSBjZGsuYXdzX2Nsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkU6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCR7YWxhcm1TdGF0aXN0aWN9KGxhc3RfJHt0b3RhbFBlcmlvZH0ke3VuaXR9KToke2FsYXJtU3RhdGlzdGljfToke21ldHJpY317JHtkaW1lbnNpb25zfX0gJHtjb21wYXJpc29uT3BlcmF0b3J9ICR7YWxhcm0udGhyZXNob2xkfWA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './watchful';
|
|
@@ -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("./watchful"), exports);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2F0Y2hmdWx2Mi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3dhdGNoZnVsJzsiXX0=
|