@rio-cloud/cdk-v2-constructs 2.0.0 → 2.0.3
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 +92 -50
- package/CHANGELOG.md +11 -0
- package/MIGRATION_GUIDE.md +20 -14
- package/lib/datadog/datadogLogIndexMonitoring.d.ts +6 -0
- package/lib/datadog/datadogLogIndexMonitoring.js +3 -3
- package/lib/fargate/datadog.d.ts +76 -5
- package/lib/fargate/datadog.js +266 -196
- package/lib/fargate/rio-fargate-service.d.ts +36 -17
- package/lib/fargate/rio-fargate-service.js +92 -9
- package/lib/pipeline/rio-backup-secrets-restore-stage.js +3 -3
- package/package.json +12 -12
- package/version.json +1 -1
package/lib/fargate/datadog.js
CHANGED
|
@@ -1,225 +1,295 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataDog = void 0;
|
|
3
|
+
exports.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts = exports.setupLogging = exports.addFireLensLogRouter = exports.addDatadogSidecar = exports.getFargateDockerLabels = exports.getFargateContainerEnvironmentVariables = exports.DataDog = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const ecs = require("aws-cdk-lib/aws-ecs");
|
|
6
6
|
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
7
7
|
const logs = require("aws-cdk-lib/aws-logs");
|
|
8
8
|
const rio_fargate_service_1 = require("./rio-fargate-service");
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Moved out static methods and imporoved signature. Use named import instead.
|
|
11
|
+
*/
|
|
9
12
|
class DataDog {
|
|
10
|
-
static getFargateContainerEnvironmentVariables(scope, stage, serviceName, version, accountName, teamName) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
DD_TRACE_SAMPLE_RATE: '1.0',
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
// we add all possible service mappings here even if not used in a particular service to get globally unique names
|
|
25
|
-
static getApmServiceMappingEnvironmentVariableValue(serviceName) {
|
|
26
|
-
const serviceMapping = {
|
|
27
|
-
'database': `${serviceName}-aurora`,
|
|
28
|
-
'java-aws-sdk': `${serviceName}-aws-sdk`,
|
|
29
|
-
'kafka': `${serviceName}-kafka`,
|
|
30
|
-
'mysql': `${serviceName}-aurora`,
|
|
31
|
-
'redis': `${serviceName}-redis`,
|
|
32
|
-
};
|
|
33
|
-
return Object.entries(serviceMapping)
|
|
34
|
-
.map(([key, value]) => `${key}:${value}`)
|
|
35
|
-
.join(',');
|
|
13
|
+
static getFargateContainerEnvironmentVariables(scope, stage, serviceName, version, accountName, teamName, teamIdentifier, additionalTags) {
|
|
14
|
+
return getFargateContainerEnvironmentVariables({
|
|
15
|
+
scope,
|
|
16
|
+
stage,
|
|
17
|
+
serviceName,
|
|
18
|
+
version,
|
|
19
|
+
accountName,
|
|
20
|
+
teamName,
|
|
21
|
+
teamIdentifier,
|
|
22
|
+
additionalTags,
|
|
23
|
+
});
|
|
36
24
|
}
|
|
37
25
|
static getFargateDockerLabels(stage, serviceName, version) {
|
|
38
|
-
return {
|
|
39
|
-
'com.datadoghq.tags.env': stage,
|
|
40
|
-
'com.datadoghq.tags.service': serviceName,
|
|
41
|
-
'com.datadoghq.tags.version': version,
|
|
42
|
-
};
|
|
26
|
+
return getFargateDockerLabels({ stage, serviceName, version });
|
|
43
27
|
}
|
|
44
|
-
static addDatadogSidecar(scope, taskDefinition, accountName, teamName, stage, serviceName, version, datadogApiKeyParameter, datadogSite, datadogLoggingMode, apmGetResourcesToIgnore, cpu, memoryLimitMiB, essential, containerTag) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
28
|
+
static addDatadogSidecar(scope, taskDefinition, accountName, teamName, teamIdentifier, stage, serviceName, version, datadogApiKeyParameter, datadogSite, datadogLoggingMode, apmGetResourcesToIgnore, cpu, memoryLimitMiB, essential, containerTag, additionalTags) {
|
|
29
|
+
return addDatadogSidecar({
|
|
30
|
+
scope,
|
|
31
|
+
taskDefinition,
|
|
32
|
+
accountName,
|
|
33
|
+
teamName,
|
|
34
|
+
teamIdentifier,
|
|
35
|
+
stage,
|
|
36
|
+
serviceName,
|
|
37
|
+
version,
|
|
38
|
+
datadogApiKeyParameter,
|
|
39
|
+
datadogSite,
|
|
40
|
+
datadogLoggingMode,
|
|
41
|
+
apmGetResourcesToIgnore,
|
|
49
42
|
cpu,
|
|
50
43
|
memoryLimitMiB,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
DD_SERVICE: serviceName,
|
|
55
|
-
DD_VERSION: version,
|
|
56
|
-
// APM and tracing see https://docs.datadoghq.com/agent/docker/apm/?tab=linux
|
|
57
|
-
DD_APM_ENABLED: 'true',
|
|
58
|
-
DD_APM_IGNORE_RESOURCES: apmGetResourcesToIgnore
|
|
59
|
-
.map((apmGetResourceToIgnore) => `GET ${apmGetResourceToIgnore}`)
|
|
60
|
-
.join(','),
|
|
61
|
-
// general settings
|
|
62
|
-
DD_SITE: datadogSite,
|
|
63
|
-
DD_TAGS: this.getTagsEnvironmentVariableValue(accountId, accountName, region, teamName, stage, serviceName, version, 'datadog-sidecar'),
|
|
64
|
-
ECS_FARGATE: 'true',
|
|
65
|
-
DD_COLLECT_GCE_TAGS: 'false',
|
|
66
|
-
},
|
|
67
|
-
// see https://github.com/DataDog/datadog-agent/blob/master/Dockerfiles/agent/amd64/Dockerfile#L171-L172
|
|
68
|
-
healthCheck: {
|
|
69
|
-
startPeriod: aws_cdk_lib_1.Duration.minutes(2),
|
|
70
|
-
interval: aws_cdk_lib_1.Duration.seconds(30),
|
|
71
|
-
timeout: aws_cdk_lib_1.Duration.seconds(5),
|
|
72
|
-
retries: 2,
|
|
73
|
-
command: ['CMD-SHELL', '/probe.sh'],
|
|
74
|
-
},
|
|
75
|
-
secrets: {
|
|
76
|
-
DD_API_KEY: ecs.Secret.fromSsmParameter(datadogApiKeyParameter),
|
|
77
|
-
},
|
|
78
|
-
essential: essential,
|
|
79
|
-
});
|
|
80
|
-
datadogSidecar.addPortMappings({
|
|
81
|
-
containerPort: 8125,
|
|
82
|
-
protocol: ecs.Protocol.UDP,
|
|
44
|
+
essential,
|
|
45
|
+
containerTag,
|
|
46
|
+
additionalTags,
|
|
83
47
|
});
|
|
84
|
-
datadogSidecar.addPortMappings({
|
|
85
|
-
containerPort: 8126,
|
|
86
|
-
protocol: ecs.Protocol.TCP,
|
|
87
|
-
});
|
|
88
|
-
return datadogSidecar;
|
|
89
48
|
}
|
|
90
|
-
static
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
const tags = {
|
|
104
|
-
// unified tagging
|
|
105
|
-
// overridden by dedicated settings (environment variables/tags)
|
|
106
|
-
// duplicated here to ensure they are used (and sometimes, not all three values are supported)
|
|
107
|
-
env: stage,
|
|
108
|
-
service: serviceName,
|
|
49
|
+
static addFireLensLogRouter(taskDefinition, cpu, memoryLimitMiB) {
|
|
50
|
+
return addFireLensLogRouter({ taskDefinition, cpu, memoryLimitMiB });
|
|
51
|
+
}
|
|
52
|
+
static setupLogging(scope, accountName, teamName, teamIdentifier, stage, serviceName, version, datadogApiKeyParameter, datadogLoggingMode, datadogSite, containerType, additionalTags) {
|
|
53
|
+
return setupLogging({
|
|
54
|
+
scope,
|
|
55
|
+
accountName,
|
|
56
|
+
teamName,
|
|
57
|
+
teamIdentifier,
|
|
58
|
+
stage,
|
|
59
|
+
serviceName,
|
|
109
60
|
version,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
61
|
+
datadogApiKeyParameter,
|
|
62
|
+
datadogLoggingMode,
|
|
63
|
+
datadogSite,
|
|
64
|
+
containerType,
|
|
65
|
+
additionalTags,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
static ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService) {
|
|
69
|
+
ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.DataDog = DataDog;
|
|
73
|
+
function getFargateContainerEnvironmentVariables(props) {
|
|
74
|
+
const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
|
|
75
|
+
return {
|
|
76
|
+
// unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
|
|
77
|
+
DD_ENV: props.stage,
|
|
78
|
+
DD_SERVICE: props.serviceName,
|
|
79
|
+
DD_VERSION: props.version,
|
|
80
|
+
// APM and tracing, see https://docs.datadoghq.com/tracing/setup_overview/setup/java/?tab=containers
|
|
81
|
+
DD_LOGS_INJECTION: 'true',
|
|
82
|
+
DD_SERVICE_MAPPING: getApmServiceMappingEnvironmentVariableValue(props.serviceName),
|
|
83
|
+
DD_TAGS: getTagsEnvironmentVariableValue({
|
|
84
|
+
...props,
|
|
85
|
+
containerType: 'service',
|
|
86
|
+
accountId,
|
|
113
87
|
region,
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
88
|
+
}),
|
|
89
|
+
DD_TRACE_SAMPLE_RATE: '1.0',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.getFargateContainerEnvironmentVariables = getFargateContainerEnvironmentVariables;
|
|
93
|
+
// we add all possible service mappings here even if not used in a particular service to get globally unique names
|
|
94
|
+
function getApmServiceMappingEnvironmentVariableValue(serviceName) {
|
|
95
|
+
const serviceMapping = {
|
|
96
|
+
'database': `${serviceName}-aurora`,
|
|
97
|
+
'java-aws-sdk': `${serviceName}-aws-sdk`,
|
|
98
|
+
'kafka': `${serviceName}-kafka`,
|
|
99
|
+
'mysql': `${serviceName}-aurora`,
|
|
100
|
+
'redis': `${serviceName}-redis`,
|
|
101
|
+
};
|
|
102
|
+
return Object.entries(serviceMapping)
|
|
103
|
+
.map(([key, value]) => `${key}:${value}`)
|
|
104
|
+
.join(',');
|
|
105
|
+
}
|
|
106
|
+
function getFargateDockerLabels(props) {
|
|
107
|
+
return {
|
|
108
|
+
'com.datadoghq.tags.env': props.stage,
|
|
109
|
+
'com.datadoghq.tags.service': props.serviceName,
|
|
110
|
+
'com.datadoghq.tags.version': props.version,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
exports.getFargateDockerLabels = getFargateDockerLabels;
|
|
114
|
+
function addDatadogSidecar(props) {
|
|
115
|
+
const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
|
|
116
|
+
const datadogSidecar = props.taskDefinition.addContainer('datadog-agent', {
|
|
117
|
+
image: ecs.ContainerImage.fromRegistry(`public.ecr.aws/datadog/agent:${props.containerTag}`),
|
|
118
|
+
logging: setupLogging({ ...props, containerType: 'datadog-sidecar' }),
|
|
119
|
+
cpu: props.cpu,
|
|
120
|
+
memoryLimitMiB: props.memoryLimitMiB,
|
|
121
|
+
environment: {
|
|
122
|
+
// unified tagging, see https://docs.datadoghq.com/getting_started/tagging/unified_service_tagging/?tab=ecs
|
|
123
|
+
DD_ENV: props.stage,
|
|
124
|
+
DD_SERVICE: props.serviceName,
|
|
125
|
+
DD_VERSION: props.version,
|
|
126
|
+
// APM and tracing see https://docs.datadoghq.com/agent/docker/apm/?tab=linux
|
|
127
|
+
DD_APM_ENABLED: 'true',
|
|
128
|
+
DD_APM_IGNORE_RESOURCES: props.apmGetResourcesToIgnore
|
|
129
|
+
.map((apmGetResourceToIgnore) => `GET ${apmGetResourceToIgnore}`)
|
|
130
|
+
.join(','),
|
|
131
|
+
// general settings
|
|
132
|
+
DD_SITE: props.datadogSite,
|
|
133
|
+
DD_TAGS: getTagsEnvironmentVariableValue({ ...props, accountId, region, containerType: 'datadog-sidecar' }),
|
|
134
|
+
ECS_FARGATE: 'true',
|
|
135
|
+
DD_COLLECT_GCE_TAGS: 'false',
|
|
136
|
+
},
|
|
137
|
+
// see https://github.com/DataDog/datadog-agent/blob/master/Dockerfiles/agent/amd64/Dockerfile#L171-L172
|
|
138
|
+
healthCheck: {
|
|
139
|
+
startPeriod: aws_cdk_lib_1.Duration.minutes(2),
|
|
140
|
+
interval: aws_cdk_lib_1.Duration.seconds(30),
|
|
141
|
+
timeout: aws_cdk_lib_1.Duration.seconds(5),
|
|
142
|
+
retries: 2,
|
|
143
|
+
command: ['CMD-SHELL', '/probe.sh'],
|
|
144
|
+
},
|
|
145
|
+
secrets: {
|
|
146
|
+
DD_API_KEY: ecs.Secret.fromSsmParameter(props.datadogApiKeyParameter),
|
|
147
|
+
},
|
|
148
|
+
essential: props.essential,
|
|
149
|
+
});
|
|
150
|
+
datadogSidecar.addPortMappings({
|
|
151
|
+
containerPort: 8125,
|
|
152
|
+
protocol: ecs.Protocol.UDP,
|
|
153
|
+
});
|
|
154
|
+
datadogSidecar.addPortMappings({
|
|
155
|
+
containerPort: 8126,
|
|
156
|
+
protocol: ecs.Protocol.TCP,
|
|
157
|
+
});
|
|
158
|
+
return datadogSidecar;
|
|
159
|
+
}
|
|
160
|
+
exports.addDatadogSidecar = addDatadogSidecar;
|
|
161
|
+
function getTagsEnvironmentVariableValue(props) {
|
|
162
|
+
const separator = determineSeparator(props.containerType);
|
|
163
|
+
const tags = {
|
|
164
|
+
// unified tagging
|
|
165
|
+
// overridden by dedicated settings (environment variables/tags)
|
|
166
|
+
// duplicated here to ensure they are used (and sometimes, not all three values are supported)
|
|
167
|
+
env: props.stage,
|
|
168
|
+
service: props.serviceName,
|
|
169
|
+
version: props.version,
|
|
170
|
+
// account/team specific parts
|
|
171
|
+
account_id: props.accountId,
|
|
172
|
+
account_name: props.accountName,
|
|
173
|
+
region: props.region,
|
|
174
|
+
team: props.teamName,
|
|
175
|
+
team_identifier: props.teamIdentifier,
|
|
176
|
+
};
|
|
177
|
+
return Object.entries({ ...tags, ...props.additionalTags })
|
|
178
|
+
.map(([key, value]) => `${key}:${value}`)
|
|
179
|
+
.join(separator);
|
|
180
|
+
}
|
|
181
|
+
function determineSeparator(containerType) {
|
|
182
|
+
if (containerType === 'datadog-sidecar') {
|
|
183
|
+
return ' ';
|
|
119
184
|
}
|
|
120
|
-
|
|
121
|
-
return
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
185
|
+
else {
|
|
186
|
+
return ',';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function addFireLensLogRouter(props) {
|
|
190
|
+
return props.taskDefinition.addFirelensLogRouter('firelens-log-router', {
|
|
191
|
+
image: ecs.ContainerImage.fromRegistry('public.ecr.aws/aws-observability/aws-for-fluent-bit:latest'),
|
|
192
|
+
firelensConfig: {
|
|
193
|
+
type: ecs.FirelensLogRouterType.FLUENTBIT,
|
|
194
|
+
options: {
|
|
195
|
+
configFileType: ecs.FirelensConfigFileType.FILE,
|
|
196
|
+
configFileValue: '/fluent-bit/configs/parse-json.conf',
|
|
197
|
+
enableECSLogMetadata: true,
|
|
130
198
|
},
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
199
|
+
},
|
|
200
|
+
cpu: props.cpu,
|
|
201
|
+
memoryLimitMiB: props.memoryLimitMiB,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
exports.addFireLensLogRouter = addFireLensLogRouter;
|
|
205
|
+
function setupLogging(props) {
|
|
206
|
+
let logGroupName;
|
|
207
|
+
let logGroupId;
|
|
208
|
+
let containerTypeCamelCase;
|
|
209
|
+
switch (props.containerType) {
|
|
210
|
+
case 'service':
|
|
211
|
+
logGroupId = 'LogGroupForService';
|
|
212
|
+
logGroupName = props.serviceName;
|
|
213
|
+
containerTypeCamelCase = 'Service';
|
|
214
|
+
break;
|
|
215
|
+
case 'datadog-sidecar':
|
|
216
|
+
logGroupId = 'LogGroupForDatadogSidecar';
|
|
217
|
+
logGroupName = `${props.serviceName}-${props.containerType}`;
|
|
218
|
+
containerTypeCamelCase = 'DatadogSidecar';
|
|
219
|
+
break;
|
|
134
220
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
filterPattern: '',
|
|
187
|
-
logGroupName: logGroupForForwardingLambda.logGroupName,
|
|
188
|
-
});
|
|
189
|
-
cfnSubscriptionFilter.addDependsOn(cfnPermission);
|
|
190
|
-
return ecs.LogDrivers.awsLogs({
|
|
191
|
-
streamPrefix: containerType,
|
|
192
|
-
logGroup: logGroupForForwardingLambda,
|
|
193
|
-
});
|
|
194
|
-
case rio_fargate_service_1.DataDogLoggingMode.NONE:
|
|
195
|
-
const logGroupInCloudwatchOnly = new logs.LogGroup(scope, logGroupId, {
|
|
196
|
-
retention: logs.RetentionDays.ONE_WEEK,
|
|
197
|
-
});
|
|
198
|
-
return ecs.LogDrivers.awsLogs({
|
|
199
|
-
streamPrefix: containerType,
|
|
200
|
-
logGroup: logGroupInCloudwatchOnly,
|
|
201
|
-
});
|
|
202
|
-
}
|
|
221
|
+
const { account: accountId, region } = aws_cdk_lib_1.Stack.of(props.scope);
|
|
222
|
+
switch (props.datadogLoggingMode) {
|
|
223
|
+
case rio_fargate_service_1.DataDogLoggingMode.AWS_FIRE_LENS:
|
|
224
|
+
// TODO can we use `secretOptions` here as well, e.g. as in https://github.com/aws-samples/amazon-ecs-firelens-examples/blob/mainline/examples/fluent-bit/datadog/task-definition.json#L33-L36
|
|
225
|
+
// Probably not, see https://github.com/aws/aws-cdk/issues/8174
|
|
226
|
+
return ecs.LogDrivers.firelens({
|
|
227
|
+
// see https://docs.datadoghq.com/integrations/fluentbit/#configuration-parameters
|
|
228
|
+
options: {
|
|
229
|
+
Name: 'datadog',
|
|
230
|
+
Match: '*',
|
|
231
|
+
Host: `http-intake.logs.${props.datadogSite}`,
|
|
232
|
+
TLS: 'on',
|
|
233
|
+
apikey: props.datadogApiKeyParameter.stringValue,
|
|
234
|
+
compress: 'gzip',
|
|
235
|
+
dd_service: logGroupName,
|
|
236
|
+
dd_source: 'rio-fargate',
|
|
237
|
+
dd_message_key: 'log',
|
|
238
|
+
dd_tags: getTagsEnvironmentVariableValue({ ...props, accountId, region, containerType: 'fluent-bit' }),
|
|
239
|
+
provider: 'ecs',
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
case rio_fargate_service_1.DataDogLoggingMode.FORWARDER_LAMBDA:
|
|
243
|
+
const logGroupForForwardingLambda = new logs.LogGroup(props.scope, logGroupId, {
|
|
244
|
+
logGroupName,
|
|
245
|
+
retention: logs.RetentionDays.ONE_WEEK,
|
|
246
|
+
});
|
|
247
|
+
const logForwarderLambdaArn = aws_cdk_lib_1.Fn.importValue('custom-resource-datadog-logforwarder-function-arn');
|
|
248
|
+
const cfnPermission = new lambda.CfnPermission(props.scope, `LogForwarderPermission${containerTypeCamelCase}`, {
|
|
249
|
+
action: 'lambda:InvokeFunction',
|
|
250
|
+
functionName: logForwarderLambdaArn,
|
|
251
|
+
principal: `logs.${region}.amazonaws.com`,
|
|
252
|
+
sourceArn: logGroupForForwardingLambda.logGroupArn,
|
|
253
|
+
});
|
|
254
|
+
const cfnSubscriptionFilter = new logs.CfnSubscriptionFilter(props.scope, `LogForwarderSubscriptionFilter${containerTypeCamelCase}`, {
|
|
255
|
+
destinationArn: logForwarderLambdaArn,
|
|
256
|
+
filterPattern: '',
|
|
257
|
+
logGroupName: logGroupForForwardingLambda.logGroupName,
|
|
258
|
+
});
|
|
259
|
+
cfnSubscriptionFilter.addDependsOn(cfnPermission);
|
|
260
|
+
return ecs.LogDrivers.awsLogs({
|
|
261
|
+
streamPrefix: props.containerType,
|
|
262
|
+
logGroup: logGroupForForwardingLambda,
|
|
263
|
+
});
|
|
264
|
+
case rio_fargate_service_1.DataDogLoggingMode.NONE:
|
|
265
|
+
const logGroupInCloudwatchOnly = new logs.LogGroup(props.scope, logGroupId, {
|
|
266
|
+
retention: logs.RetentionDays.ONE_WEEK,
|
|
267
|
+
});
|
|
268
|
+
return ecs.LogDrivers.awsLogs({
|
|
269
|
+
streamPrefix: props.containerType,
|
|
270
|
+
logGroup: logGroupInCloudwatchOnly,
|
|
271
|
+
});
|
|
203
272
|
}
|
|
204
|
-
|
|
205
|
-
|
|
273
|
+
}
|
|
274
|
+
exports.setupLogging = setupLogging;
|
|
275
|
+
function ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(rioFargateService) {
|
|
276
|
+
var _a;
|
|
277
|
+
rioFargateService.serviceContainerDefinition.addContainerDependencies({
|
|
278
|
+
container: rioFargateService.datadogSideCarContainerDefinition,
|
|
279
|
+
condition: ecs.ContainerDependencyCondition.HEALTHY,
|
|
280
|
+
});
|
|
281
|
+
if (rioFargateService.logRouterContainerDefinition) {
|
|
206
282
|
rioFargateService.serviceContainerDefinition.addContainerDependencies({
|
|
207
|
-
container: rioFargateService.
|
|
208
|
-
condition: ecs.ContainerDependencyCondition.
|
|
283
|
+
container: rioFargateService.logRouterContainerDefinition,
|
|
284
|
+
condition: ecs.ContainerDependencyCondition.START,
|
|
209
285
|
});
|
|
210
|
-
if (rioFargateService.
|
|
211
|
-
rioFargateService.
|
|
286
|
+
if (((_a = rioFargateService.datadogSideCarContainerDefinition.logDriverConfig) === null || _a === void 0 ? void 0 : _a.logDriver) === 'awsfirelens') {
|
|
287
|
+
rioFargateService.datadogSideCarContainerDefinition.addContainerDependencies({
|
|
212
288
|
container: rioFargateService.logRouterContainerDefinition,
|
|
213
289
|
condition: ecs.ContainerDependencyCondition.START,
|
|
214
290
|
});
|
|
215
|
-
if (((_a = rioFargateService.datadogSideCarContainerDefinition.logDriverConfig) === null || _a === void 0 ? void 0 : _a.logDriver) === 'awsfirelens') {
|
|
216
|
-
rioFargateService.datadogSideCarContainerDefinition.addContainerDependencies({
|
|
217
|
-
container: rioFargateService.logRouterContainerDefinition,
|
|
218
|
-
condition: ecs.ContainerDependencyCondition.START,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
291
|
}
|
|
222
292
|
}
|
|
223
293
|
}
|
|
224
|
-
exports.
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RSxNQUFhLE9BQU87SUFFWCxNQUFNLENBQUMsdUNBQXVDLENBQ25ELEtBQWdCLEVBQ2hCLEtBQWEsRUFDYixXQUFtQixFQUNuQixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsUUFBZ0I7UUFHaEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkQsT0FBTztZQUNMLDJHQUEyRztZQUMzRyxNQUFNLEVBQUUsS0FBSztZQUNiLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLG9HQUFvRztZQUNwRyxpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGtCQUFrQixFQUFFLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxXQUFXLENBQUM7WUFDbEYsT0FBTyxFQUFFLElBQUksQ0FBQywrQkFBK0IsQ0FDM0MsU0FBUyxFQUNULFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsT0FBTyxFQUNQLFNBQVMsQ0FDVjtZQUNELG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxrSEFBa0g7SUFDbEgsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLFdBQW1CO1FBRXJFLE1BQU0sY0FBYyxHQUFHO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLFdBQVcsU0FBUztZQUNuQyxjQUFjLEVBQUUsR0FBRyxXQUFXLFVBQVU7WUFDeEMsT0FBTyxFQUFFLEdBQUcsV0FBVyxRQUFRO1lBQy9CLE9BQU8sRUFBRSxHQUFHLFdBQVcsU0FBUztZ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QkFBaUIsQ0FBQyw0QkFBNEIsRUFBRTtZQUNsRCxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLDRCQUE0QjtnQkFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO2FBQ2xELENBQUMsQ0FBQztZQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7Z0JBQ3BHLGlCQUFpQixDQUFDLGlDQUFpQyxDQUFDLHdCQUF3QixDQUFDO29CQUMzRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsNEJBQTRCO29CQUN6RCxTQUFTLEVBQUUsR0FBRyxDQUFDLDRCQUE0QixDQUFDLEtBQUs7aUJBQ2xELENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0NBQ0Y7QUFqVkQsMEJBaVZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIER1cmF0aW9uLCBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhRG9nTG9nZ2luZ01vZGUsIFJpb0ZhcmdhdGVTZXJ2aWNlIH0gZnJvbSAnLi9yaW8tZmFyZ2F0ZS1zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIERhdGFEb2cge1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50SWQsIHJlZ2lvbiB9ID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgICBERF9FTlY6IHN0YWdlLFxuICAgICAgRERfU0VSVklDRTogc2VydmljZU5hbWUsXG4gICAgICBERF9WRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgLy8gQVBNIGFuZCB0cmFjaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vdHJhY2luZy9zZXR1cF9vdmVydmlldy9zZXR1cC9qYXZhLz90YWI9Y29udGFpbmVyc1xuICAgICAgRERfTE9HU19JTkpFQ1RJT046ICd0cnVlJyxcbiAgICAgIEREX1NFUlZJQ0VfTUFQUElORzogdGhpcy5nZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZSksXG4gICAgICBERF9UQUdTOiB0aGlzLmdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgIHN0YWdlLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgJ3NlcnZpY2UnLFxuICAgICAgKSxcbiAgICAgIEREX1RSQUNFX1NBTVBMRV9SQVRFOiAnMS4wJywgLy8gc2VlIGh0dHBzOi8vZGR0cmFjZS5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvY29uZmlndXJhdGlvbi5odG1sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHdlIGFkZCBhbGwgcG9zc2libGUgc2VydmljZSBtYXBwaW5ncyBoZXJlIGV2ZW4gaWYgbm90IHVzZWQgaW4gYSBwYXJ0aWN1bGFyIHNlcnZpY2UgdG8gZ2V0IGdsb2JhbGx5IHVuaXF1ZSBuYW1lc1xuICBzdGF0aWMgZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoc2VydmljZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAgICdkYXRhYmFzZSc6IGAke3NlcnZpY2VOYW1lfS1hdXJvcmFgLFxuICAgICAgJ2phdmEtYXdzLXNkayc6IGAke3NlcnZpY2VOYW1lfS1hd3Mtc2RrYCxcbiAgICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgICAnbXlzcWwnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAgICdyZWRpcyc6IGAke3NlcnZpY2VOYW1lfS1yZWRpc2AsXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzZXJ2aWNlTWFwcGluZylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fToke3ZhbHVlfWApXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlRG9ja2VyTGFiZWxzKHN0YWdlOiBzdHJpbmcsIHNlcnZpY2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB7XG4gICAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHN0YWdlLFxuICAgICAgJ2NvbS5kYXRhZG9naHEudGFncy5zZXJ2aWNlJzogc2VydmljZU5hbWUsXG4gICAgICAnY29tLmRhdGFkb2docS50YWdzLnZlcnNpb24nOiB2ZXJzaW9uLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZERhdGFkb2dTaWRlY2FyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgdGFza0RlZmluaXRpb246IGVjcy5UYXNrRGVmaW5pdGlvbixcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyOiBzc20uSVN0cmluZ1BhcmFtZXRlcixcbiAgICBkYXRhZG9nU2l0ZTogc3RyaW5nLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGFwbUdldFJlc291cmNlc1RvSWdub3JlOiBzdHJpbmdbXSxcbiAgICBjcHU6IG51bWJlcixcbiAgICBtZW1vcnlMaW1pdE1pQjogbnVtYmVyLFxuICAgIGVzc2VudGlhbDogYm9vbGVhbixcbiAgICBjb250YWluZXJUYWc6IHN0cmluZyxcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gICAgY29uc3QgeyBhY2NvdW50OiBhY2NvdW50SWQsIHJlZ2lvbiB9ID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyID0gdGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdkYXRhZG9nLWFnZW50Jywge1xuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtjb250YWluZXJUYWd9YCksXG4gICAgICBsb2dnaW5nOiB0aGlzLnNldHVwTG9nZ2luZyhcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgc3RhZ2UsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgICAnZGF0YWRvZy1zaWRlY2FyJyxcbiAgICAgICksXG4gICAgICBjcHUsXG4gICAgICBtZW1vcnlMaW1pdE1pQixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgICAgIEREX0VOVjogc3RhZ2UsXG4gICAgICAgIEREX1NFUlZJQ0U6IHNlcnZpY2VOYW1lLFxuICAgICAgICBERF9WRVJTSU9OOiB2ZXJzaW9uLFxuICAgICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgICBERF9BUE1fRU5BQkxFRDogJ3RydWUnLFxuICAgICAgICBERF9BUE1fSUdOT1JFX1JFU09VUkNFUzogYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmVcbiAgICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAgIC5qb2luKCcsJyksXG4gICAgICAgIC8vIGdlbmVyYWwgc2V0dGluZ3NcbiAgICAgICAgRERfU0lURTogZGF0YWRvZ1NpdGUsXG4gICAgICAgIEREX1RBR1M6IHRoaXMuZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIHRlYW1OYW1lLFxuICAgICAgICAgIHN0YWdlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgICAgICksXG4gICAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICAgIEREX0NPTExFQ1RfR0NFX1RBR1M6ICdmYWxzZScsXG4gICAgICB9LFxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICAgIGhlYWx0aENoZWNrOiB7XG4gICAgICAgIHN0YXJ0UGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDIpLFxuICAgICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIHJldHJpZXM6IDIsXG4gICAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgICAgfSxcbiAgICAgIHNlY3JldHM6IHtcbiAgICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgICAgfSxcbiAgICAgIGVzc2VudGlhbDogZXNzZW50aWFsLFxuICAgIH0pO1xuXG4gICAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICAgIGNvbnRhaW5lclBvcnQ6IDgxMjUsXG4gICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgICB9KTtcblxuICAgIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgc3RhZ2U6IHN0cmluZyxcbiAgICBzZXJ2aWNlTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJyB8ICdmbHVlbnQtYml0JyxcbiAgKTogc3RyaW5nIHtcblxuICAgIGxldCBzZXBhcmF0b3I6IHN0cmluZztcblxuICAgIHN3aXRjaCAoY29udGFpbmVyVHlwZSkge1xuXG4gICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgc2VwYXJhdG9yID0gJywnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZGF0YWRvZy1zaWRlY2FyJzpcbiAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZmx1ZW50LWJpdCc6XG4gICAgICAgIHNlcGFyYXRvciA9ICcsJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgdGFncyA9IHtcbiAgICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgICAgLy8gb3ZlcnJpZGRlbiBieSBkZWRpY2F0ZWQgc2V0dGluZ3MgKGVudmlyb25tZW50IHZhcmlhYmxlcy90YWdzKVxuICAgICAgLy8gZHVwbGljYXRlZCBoZXJlIHRvIGVuc3VyZSB0aGV5IGFyZSB1c2VkIChhbmQgc29tZXRpbWVzLCBub3QgYWxsIHRocmVlIHZhbHVlcyBhcmUgc3VwcG9ydGVkKVxuICAgICAgZW52OiBzdGFnZSxcbiAgICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgICAgYWNjb3VudF9pZDogYWNjb3VudElkLFxuICAgICAgYWNjb3VudF9uYW1lOiBhY2NvdW50TmFtZSxcbiAgICAgIHJlZ2lvbixcbiAgICAgIHRlYW06IHRlYW1OYW1lLFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRhZ3MpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06JHt2YWx1ZX1gKVxuICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRmlyZUxlbnNMb2dSb3V0ZXIoXG4gICAgdGFza0RlZmluaXRpb246IGVjcy5UYXNrRGVmaW5pdGlvbixcbiAgICBjcHU6IG51bWJlcixcbiAgICBtZW1vcnlMaW1pdE1pQjogbnVtYmVyLFxuICApOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgICByZXR1cm4gdGFza0RlZmluaXRpb24uYWRkRmlyZWxlbnNMb2dSb3V0ZXIoJ2ZpcmVsZW5zLWxvZy1yb3V0ZXInLCB7XG4gICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeSgncHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLWZvci1mbHVlbnQtYml0OmxhdGVzdCcpLFxuICAgICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgICAgdHlwZTogZWNzLkZpcmVsZW5zTG9nUm91dGVyVHlwZS5GTFVFTlRCSVQsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgICBjb25maWdGaWxlVmFsdWU6ICcvZmx1ZW50LWJpdC9jb25maWdzL3BhcnNlLWpzb24uY29uZicsXG4gICAgICAgICAgZW5hYmxlRUNTTG9nTWV0YWRhdGE6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY3B1LFxuICAgICAgbWVtb3J5TGltaXRNaUIsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNldHVwTG9nZ2luZyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICAgIGxldCBsb2dHcm91cElkOiBzdHJpbmc7XG4gICAgbGV0IGNvbnRhaW5lclR5cGVDYW1lbENhc2U7XG5cbiAgICBzd2l0Y2ggKGNvbnRhaW5lclR5cGUpIHtcblxuICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGxvZ0dyb3VwSWQgPSAnTG9nR3JvdXBGb3JTZXJ2aWNlJztcbiAgICAgICAgbG9nR3JvdXBOYW1lID0gc2VydmljZU5hbWU7XG4gICAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnU2VydmljZSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgICBsb2dHcm91cElkID0gJ0xvZ0dyb3VwRm9yRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgICBsb2dHcm91cE5hbWUgPSBgJHtzZXJ2aWNlTmFtZX0tJHtjb250YWluZXJUeXBlfWA7XG4gICAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICBzd2l0Y2ggKGRhdGFkb2dMb2dnaW5nTW9kZSkge1xuXG4gICAgICBjYXNlIERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TOlxuICAgICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAgIC8vIFByb2JhYmx5IG5vdCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvODE3NFxuICAgICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuZmlyZWxlbnMoe1xuICAgICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBOYW1lOiAnZGF0YWRvZycsXG4gICAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgICAgSG9zdDogYGh0dHAtaW50YWtlLmxvZ3MuJHtkYXRhZG9nU2l0ZX1gLFxuICAgICAgICAgICAgVExTOiAnb24nLFxuICAgICAgICAgICAgYXBpa2V5OiBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgICAgY29tcHJlc3M6ICdnemlwJyxcbiAgICAgICAgICAgIGRkX3NlcnZpY2U6IGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICAgIGRkX21lc3NhZ2Vfa2V5OiAnbG9nJyxcbiAgICAgICAgICAgIGRkX3RhZ3M6IHRoaXMuZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShcbiAgICAgICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgICAgICAgc3RhZ2UsXG4gICAgICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICAnZmx1ZW50LWJpdCcsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlY3MnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlIERhdGFEb2dMb2dnaW5nTW9kZS5GT1JXQVJERVJfTEFNQkRBOlxuICAgICAgICBjb25zdCBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEgPSBuZXcgbG9ncy5Mb2dHcm91cChzY29wZSwgbG9nR3JvdXBJZCwge1xuICAgICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICAgIGNvbnN0IGNmblBlcm1pc3Npb24gPSBuZXcgbGFtYmRhLkNmblBlcm1pc3Npb24oc2NvcGUsIGBMb2dGb3J3YXJkZXJQZXJtaXNzaW9uJHtjb250YWluZXJUeXBlQ2FtZWxDYXNlfWAsIHtcbiAgICAgICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb24nLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICAgIHByaW5jaXBhbDogYGxvZ3MuJHtyZWdpb259LmFtYXpvbmF3cy5jb21gLFxuICAgICAgICAgIHNvdXJjZUFybjogbG9nR3JvdXBGb3JGb3J3YXJkaW5nTGFtYmRhLmxvZ0dyb3VwQXJuLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2ZuU3Vic2NyaXB0aW9uRmlsdGVyID0gbmV3IGxvZ3MuQ2ZuU3Vic2NyaXB0aW9uRmlsdGVyKFxuICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkFybjogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYS5sb2dHcm91cE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgY2ZuU3Vic2NyaXB0aW9uRmlsdGVyLmFkZERlcGVuZHNPbihjZm5QZXJtaXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIGVjcy5Mb2dEcml2ZXJzLmF3c0xvZ3Moe1xuICAgICAgICAgIHN0cmVhbVByZWZpeDogY29udGFpbmVyVHlwZSxcbiAgICAgICAgICBsb2dHcm91cDogbG9nR3JvdXBGb3JGb3J3YXJkaW5nTGFtYmRhLFxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgICAgY29uc3QgbG9nR3JvdXBJbkNsb3Vkd2F0Y2hPbmx5ID0gbmV3IGxvZ3MuTG9nR3JvdXAoc2NvcGUsIGxvZ0dyb3VwSWQsIHtcbiAgICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgICBzdHJlYW1QcmVmaXg6IGNvbnRhaW5lclR5cGUsXG4gICAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcblxuICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uLmFkZENvbnRhaW5lckRlcGVuZGVuY2llcyh7XG4gICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbixcbiAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uKSB7XG4gICAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5sb2dEcml2ZXJDb25maWc/LmxvZ0RyaXZlciA9PT0gJ2F3c2ZpcmVsZW5zJykge1xuICAgICAgICByaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24uYWRkQ29udGFpbmVyRGVwZW5kZW5jaWVzKHtcbiAgICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
|
|
294
|
+
exports.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts = ensureLoggingAndMonitoringAreReadyBeforeServiceStarts;
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL2RhdGFkb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWtEO0FBQ2xELDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBRzdDLCtEQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQWEsT0FBTztJQUVYLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FDbkQsS0FBZ0IsRUFDaEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixXQUFtQixFQUNuQixRQUFnQixFQUNoQixjQUFzQixFQUN0QixjQUFrRDtRQUVsRCxPQUFPLHVDQUF1QyxDQUFDO1lBQzdDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsV0FBVztZQUNYLE9BQU87WUFDUCxXQUFXO1lBQ1gsUUFBUTtZQUNSLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsV0FBbUIsRUFBRSxPQUFlO1FBQ3RGLE9BQU8sc0JBQXNCLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDN0IsS0FBZ0IsRUFDaEIsY0FBa0MsRUFDbEMsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsY0FBc0IsRUFDdEIsS0FBYSxFQUNiLFdBQW1CLEVBQ25CLE9BQWUsRUFDZixzQkFBNEMsRUFDNUMsV0FBbUIsRUFDbkIsa0JBQXNDLEVBQ3RDLHVCQUFpQyxFQUNqQyxHQUFXLEVBQ1gsY0FBc0IsRUFDdEIsU0FBa0IsRUFDbEIsWUFBb0IsRUFDcEIsY0FBa0Q7UUFHbEQsT0FBTyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLO1lBQ0wsY0FBYztZQUNkLFdBQVc7WUFDWCxRQUFRO1lBQ1IsY0FBYztZQUNkLEtBQUs7WUFDTCxXQUFX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SSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUMxRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRO2FBQ3ZDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDakMsUUFBUSxFQUFFLHdCQUF3QjthQUNuQyxDQUFDLENBQUM7S0FDTjtBQUNILENBQUM7QUE5RkQsb0NBOEZDO0FBRUQsU0FBZ0IscURBQXFELENBQUMsaUJBQW9DOztJQUV4RyxpQkFBaUIsQ0FBQywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsaUNBQWlDO1FBQzlELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsT0FBTztLQUNwRCxDQUFDLENBQUM7SUFFSCxJQUFJLGlCQUFpQixDQUFDLDRCQUE0QixFQUFFO1FBQ2xELGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLHdCQUF3QixDQUFDO1lBQ3BFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7WUFDekQsU0FBUyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLO1NBQ2xELENBQUMsQ0FBQztRQUVILElBQUksT0FBQSxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxlQUFlLDBDQUFFLFNBQVMsTUFBSyxhQUFhLEVBQUU7WUFDcEcsaUJBQWlCLENBQUMsaUNBQWlDLENBQUMsd0JBQXdCLENBQUM7Z0JBQzNFLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyw0QkFBNEI7Z0JBQ3pELFNBQVMsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsS0FBSzthQUNsRCxDQUFDLENBQUM7U0FDSjtLQUNGO0FBQ0gsQ0FBQztBQXBCRCxzSEFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgRHVyYXRpb24sIEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERhdGFEb2dMb2dnaW5nTW9kZSwgUmlvRmFyZ2F0ZVNlcnZpY2UgfSBmcm9tICcuL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE1vdmVkIG91dCBzdGF0aWMgbWV0aG9kcyBhbmQgaW1wb3JvdmVkIHNpZ25hdHVyZS4gVXNlIG5hbWVkIGltcG9ydCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YURvZyB7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkLFxuICApOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKHtcbiAgICAgIHNjb3BlLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBhY2NvdW50TmFtZSxcbiAgICAgIHRlYW1OYW1lLFxuICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICBhZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhzdGFnZTogc3RyaW5nLCBzZXJ2aWNlTmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYWRkRGF0YWRvZ1NpZGVjYXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uLFxuICAgIGFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgdGVhbU5hbWU6IHN0cmluZyxcbiAgICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nLFxuICAgIHN0YWdlOiBzdHJpbmcsXG4gICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBzdHJpbmcsXG4gICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXIsXG4gICAgZGF0YWRvZ1NpdGU6IHN0cmluZyxcbiAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZSxcbiAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgICBlc3NlbnRpYWw6IGJvb2xlYW4sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Db250YWluZXJEZWZpbml0aW9uIHtcblxuICAgIHJldHVybiBhZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5UGFyYW1ldGVyLFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGUsXG4gICAgICBhcG1HZXRSZXNvdXJjZXNUb0lnbm9yZSxcbiAgICAgIGNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCLFxuICAgICAgZXNzZW50aWFsLFxuICAgICAgY29udGFpbmVyVGFnLFxuICAgICAgYWRkaXRpb25hbFRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFkZEZpcmVMZW5zTG9nUm91dGVyKFxuICAgIHRhc2tEZWZpbml0aW9uOiBlY3MuVGFza0RlZmluaXRpb24sXG4gICAgY3B1OiBudW1iZXIsXG4gICAgbWVtb3J5TGltaXRNaUI6IG51bWJlcixcbiAgKTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuICAgIHJldHVybiBhZGRGaXJlTGVuc0xvZ1JvdXRlcih7IHRhc2tEZWZpbml0aW9uLCBjcHUsIG1lbW9yeUxpbWl0TWlCIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXR1cExvZ2dpbmcoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBhY2NvdW50TmFtZTogc3RyaW5nLFxuICAgIHRlYW1OYW1lOiBzdHJpbmcsXG4gICAgdGVhbUlkZW50aWZpZXI6IHN0cmluZyxcbiAgICBzdGFnZTogc3RyaW5nLFxuICAgIHNlcnZpY2VOYW1lOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyLFxuICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICAgIGRhdGFkb2dTaXRlOiBzdHJpbmcsXG4gICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicsXG4gICAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQsXG4gICk6IGVjcy5Mb2dEcml2ZXIge1xuXG4gICAgcmV0dXJuIHNldHVwTG9nZ2luZyh7XG4gICAgICBzY29wZSxcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcixcbiAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgY29udGFpbmVyVHlwZSxcbiAgICAgIGFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpIHtcbiAgICBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxUYWdzOiB7IFtrOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xufSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcblxuICByZXR1cm4ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2dldHRpbmdfc3RhcnRlZC90YWdnaW5nL3VuaWZpZWRfc2VydmljZV90YWdnaW5nLz90YWI9ZWNzXG4gICAgRERfRU5WOiBwcm9wcy5zdGFnZSxcbiAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICBERF9WRVJTSU9OOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIEFQTSBhbmQgdHJhY2luZywgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL3RyYWNpbmcvc2V0dXBfb3ZlcnZpZXcvc2V0dXAvamF2YS8/dGFiPWNvbnRhaW5lcnNcbiAgICBERF9MT0dTX0lOSkVDVElPTjogJ3RydWUnLFxuICAgIEREX1NFUlZJQ0VfTUFQUElORzogZ2V0QXBtU2VydmljZU1hcHBpbmdFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHMuc2VydmljZU5hbWUpLFxuICAgIEREX1RBR1M6IGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICBhY2NvdW50SWQsXG4gICAgICByZWdpb24sXG4gICAgfSksXG4gICAgRERfVFJBQ0VfU0FNUExFX1JBVEU6ICcxLjAnLCAvLyBzZWUgaHR0cHM6Ly9kZHRyYWNlLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9jb25maWd1cmF0aW9uLmh0bWxcbiAgfTtcbn1cblxuLy8gd2UgYWRkIGFsbCBwb3NzaWJsZSBzZXJ2aWNlIG1hcHBpbmdzIGhlcmUgZXZlbiBpZiBub3QgdXNlZCBpbiBhIHBhcnRpY3VsYXIgc2VydmljZSB0byBnZXQgZ2xvYmFsbHkgdW5pcXVlIG5hbWVzXG5mdW5jdGlvbiBnZXRBcG1TZXJ2aWNlTWFwcGluZ0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblxuICBjb25zdCBzZXJ2aWNlTWFwcGluZyA9IHtcbiAgICAnZGF0YWJhc2UnOiBgJHtzZXJ2aWNlTmFtZX0tYXVyb3JhYCxcbiAgICAnamF2YS1hd3Mtc2RrJzogYCR7c2VydmljZU5hbWV9LWF3cy1zZGtgLFxuICAgICdrYWZrYSc6IGAke3NlcnZpY2VOYW1lfS1rYWZrYWAsXG4gICAgJ215c3FsJzogYCR7c2VydmljZU5hbWV9LWF1cm9yYWAsXG4gICAgJ3JlZGlzJzogYCR7c2VydmljZU5hbWV9LXJlZGlzYCxcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc2VydmljZU1hcHBpbmcpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbignLCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyhwcm9wczoge3N0YWdlOiBzdHJpbmc7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZ30pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICAnY29tLmRhdGFkb2docS50YWdzLmVudic6IHByb3BzLnN0YWdlLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3Muc2VydmljZSc6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICdjb20uZGF0YWRvZ2hxLnRhZ3MudmVyc2lvbic6IHByb3BzLnZlcnNpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXRhZG9nU2lkZWNhcihwcm9wczoge1xuICBzY29wZTogQ29uc3RydWN0O1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGRhdGFkb2dBcGlLZXlQYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBkYXRhZG9nTG9nZ2luZ01vZGU6IERhdGFEb2dMb2dnaW5nTW9kZTtcbiAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IHN0cmluZ1tdO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbiAgZXNzZW50aWFsOiBib29sZWFuO1xuICBjb250YWluZXJUYWc6IHN0cmluZztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkNvbnRhaW5lckRlZmluaXRpb24ge1xuXG4gIGNvbnN0IHsgYWNjb3VudDogYWNjb3VudElkLCByZWdpb24gfSA9IFN0YWNrLm9mKHByb3BzLnNjb3BlKTtcbiAgY29uc3QgZGF0YWRvZ1NpZGVjYXIgPSBwcm9wcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoJ2RhdGFkb2ctYWdlbnQnLCB7XG4gICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL2RhdGFkb2cvYWdlbnQ6JHtwcm9wcy5jb250YWluZXJUYWd9YCksXG4gICAgbG9nZ2luZzogc2V0dXBMb2dnaW5nKHsgLi4ucHJvcHMsIGNvbnRhaW5lclR5cGU6ICdkYXRhZG9nLXNpZGVjYXInIH0pLFxuICAgIGNwdTogcHJvcHMuY3B1LFxuICAgIG1lbW9yeUxpbWl0TWlCOiBwcm9wcy5tZW1vcnlMaW1pdE1pQixcbiAgICBlbnZpcm9ubWVudDoge1xuICAgICAgLy8gdW5pZmllZCB0YWdnaW5nLCBzZWUgaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vZ2V0dGluZ19zdGFydGVkL3RhZ2dpbmcvdW5pZmllZF9zZXJ2aWNlX3RhZ2dpbmcvP3RhYj1lY3NcbiAgICAgIEREX0VOVjogcHJvcHMuc3RhZ2UsXG4gICAgICBERF9TRVJWSUNFOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIEREX1ZFUlNJT046IHByb3BzLnZlcnNpb24sXG4gICAgICAvLyBBUE0gYW5kIHRyYWNpbmcgc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2FnZW50L2RvY2tlci9hcG0vP3RhYj1saW51eFxuICAgICAgRERfQVBNX0VOQUJMRUQ6ICd0cnVlJyxcbiAgICAgIEREX0FQTV9JR05PUkVfUkVTT1VSQ0VTOiBwcm9wcy5hcG1HZXRSZXNvdXJjZXNUb0lnbm9yZVxuICAgICAgICAubWFwKChhcG1HZXRSZXNvdXJjZVRvSWdub3JlKSA9PiBgR0VUICR7YXBtR2V0UmVzb3VyY2VUb0lnbm9yZX1gKVxuICAgICAgICAuam9pbignLCcpLFxuICAgICAgLy8gZ2VuZXJhbCBzZXR0aW5nc1xuICAgICAgRERfU0lURTogcHJvcHMuZGF0YWRvZ1NpdGUsXG4gICAgICBERF9UQUdTOiBnZXRUYWdzRW52aXJvbm1lbnRWYXJpYWJsZVZhbHVlKHsgLi4ucHJvcHMsIGFjY291bnRJZCwgcmVnaW9uLCBjb250YWluZXJUeXBlOiAnZGF0YWRvZy1zaWRlY2FyJyB9KSxcbiAgICAgIEVDU19GQVJHQVRFOiAndHJ1ZScsXG4gICAgICBERF9DT0xMRUNUX0dDRV9UQUdTOiAnZmFsc2UnLFxuICAgIH0sXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctYWdlbnQvYmxvYi9tYXN0ZXIvRG9ja2VyZmlsZXMvYWdlbnQvYW1kNjQvRG9ja2VyZmlsZSNMMTcxLUwxNzJcbiAgICBoZWFsdGhDaGVjazoge1xuICAgICAgc3RhcnRQZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBpbnRlcnZhbDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgcmV0cmllczogMixcbiAgICAgIGNvbW1hbmQ6IFsnQ01ELVNIRUxMJywgJy9wcm9iZS5zaCddLFxuICAgIH0sXG4gICAgc2VjcmV0czoge1xuICAgICAgRERfQVBJX0tFWTogZWNzLlNlY3JldC5mcm9tU3NtUGFyYW1ldGVyKHByb3BzLmRhdGFkb2dBcGlLZXlQYXJhbWV0ZXIpLFxuICAgIH0sXG4gICAgZXNzZW50aWFsOiBwcm9wcy5lc3NlbnRpYWwsXG4gIH0pO1xuXG4gIGRhdGFkb2dTaWRlY2FyLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgY29udGFpbmVyUG9ydDogODEyNSxcbiAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlVEUCxcbiAgfSk7XG5cbiAgZGF0YWRvZ1NpZGVjYXIuYWRkUG9ydE1hcHBpbmdzKHtcbiAgICBjb250YWluZXJQb3J0OiA4MTI2LFxuICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICB9KTtcblxuICByZXR1cm4gZGF0YWRvZ1NpZGVjYXI7XG59XG5cbmZ1bmN0aW9uIGdldFRhZ3NFbnZpcm9ubWVudFZhcmlhYmxlVmFsdWUocHJvcHM6IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICB0ZWFtTmFtZTogc3RyaW5nO1xuICB0ZWFtSWRlbnRpZmllcjogc3RyaW5nO1xuICBzdGFnZTogc3RyaW5nO1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyB8ICdkYXRhZG9nLXNpZGVjYXInIHwgJ2ZsdWVudC1iaXQnO1xuICBhZGRpdGlvbmFsVGFnczogeyBbazogc3RyaW5nXTogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbn0pOiBzdHJpbmcge1xuXG4gIGNvbnN0IHNlcGFyYXRvciA9IGRldGVybWluZVNlcGFyYXRvcihwcm9wcy5jb250YWluZXJUeXBlKTtcblxuICBjb25zdCB0YWdzID0ge1xuICAgIC8vIHVuaWZpZWQgdGFnZ2luZ1xuICAgIC8vIG92ZXJyaWRkZW4gYnkgZGVkaWNhdGVkIHNldHRpbmdzIChlbnZpcm9ubWVudCB2YXJpYWJsZXMvdGFncylcbiAgICAvLyBkdXBsaWNhdGVkIGhlcmUgdG8gZW5zdXJlIHRoZXkgYXJlIHVzZWQgKGFuZCBzb21ldGltZXMsIG5vdCBhbGwgdGhyZWUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQpXG4gICAgZW52OiBwcm9wcy5zdGFnZSxcbiAgICBzZXJ2aWNlOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICB2ZXJzaW9uOiBwcm9wcy52ZXJzaW9uLFxuICAgIC8vIGFjY291bnQvdGVhbSBzcGVjaWZpYyBwYXJ0c1xuICAgIGFjY291bnRfaWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICBhY2NvdW50X25hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgIHRlYW06IHByb3BzLnRlYW1OYW1lLFxuICAgIHRlYW1faWRlbnRpZmllcjogcHJvcHMudGVhbUlkZW50aWZpZXIsXG4gIH07XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh7IC4uLnRhZ3MsIC4uLnByb3BzLmFkZGl0aW9uYWxUYWdzIH0pXG4gICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiR7dmFsdWV9YClcbiAgICAuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVTZXBhcmF0b3IoY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnIHwgJ2RhdGFkb2ctc2lkZWNhcicgfCAnZmx1ZW50LWJpdCcpIHtcbiAgaWYgKGNvbnRhaW5lclR5cGUgPT09ICdkYXRhZG9nLXNpZGVjYXInKSB7XG4gICAgcmV0dXJuICcgJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJywnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaXJlTGVuc0xvZ1JvdXRlcihwcm9wczoge1xuICB0YXNrRGVmaW5pdGlvbjogZWNzLlRhc2tEZWZpbml0aW9uO1xuICBjcHU6IG51bWJlcjtcbiAgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcbn0pOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbiB7XG5cbiAgcmV0dXJuIHByb3BzLnRhc2tEZWZpbml0aW9uLmFkZEZpcmVsZW5zTG9nUm91dGVyKCdmaXJlbGVucy1sb2ctcm91dGVyJywge1xuICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3MtZm9yLWZsdWVudC1iaXQ6bGF0ZXN0JyksXG4gICAgZmlyZWxlbnNDb25maWc6IHtcbiAgICAgIHR5cGU6IGVjcy5GaXJlbGVuc0xvZ1JvdXRlclR5cGUuRkxVRU5UQklULFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBjb25maWdGaWxlVHlwZTogZWNzLkZpcmVsZW5zQ29uZmlnRmlsZVR5cGUuRklMRSxcbiAgICAgICAgY29uZmlnRmlsZVZhbHVlOiAnL2ZsdWVudC1iaXQvY29uZmlncy9wYXJzZS1qc29uLmNvbmYnLFxuICAgICAgICBlbmFibGVFQ1NMb2dNZXRhZGF0YTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBjcHU6IHByb3BzLmNwdSxcbiAgICBtZW1vcnlMaW1pdE1pQjogcHJvcHMubWVtb3J5TGltaXRNaUIsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBMb2dnaW5nKHByb3BzOiB7XG4gIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIGFjY291bnROYW1lOiBzdHJpbmc7XG4gIHRlYW1OYW1lOiBzdHJpbmc7XG4gIHRlYW1JZGVudGlmaWVyOiBzdHJpbmc7XG4gIHN0YWdlOiBzdHJpbmc7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZGF0YWRvZ0FwaUtleVBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG4gIGRhdGFkb2dMb2dnaW5nTW9kZTogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuICBkYXRhZG9nU2l0ZTogc3RyaW5nO1xuICBjb250YWluZXJUeXBlOiAnc2VydmljZScgfCAnZGF0YWRvZy1zaWRlY2FyJztcbiAgYWRkaXRpb25hbFRhZ3M6IHsgW2s6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG59KTogZWNzLkxvZ0RyaXZlciB7XG5cbiAgbGV0IGxvZ0dyb3VwTmFtZTogc3RyaW5nO1xuICBsZXQgbG9nR3JvdXBJZDogc3RyaW5nO1xuICBsZXQgY29udGFpbmVyVHlwZUNhbWVsQ2FzZTtcblxuICBzd2l0Y2ggKHByb3BzLmNvbnRhaW5lclR5cGUpIHtcblxuICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvclNlcnZpY2UnO1xuICAgICAgbG9nR3JvdXBOYW1lID0gcHJvcHMuc2VydmljZU5hbWU7XG4gICAgICBjb250YWluZXJUeXBlQ2FtZWxDYXNlID0gJ1NlcnZpY2UnO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkYXRhZG9nLXNpZGVjYXInOlxuICAgICAgbG9nR3JvdXBJZCA9ICdMb2dHcm91cEZvckRhdGFkb2dTaWRlY2FyJztcbiAgICAgIGxvZ0dyb3VwTmFtZSA9IGAke3Byb3BzLnNlcnZpY2VOYW1lfS0ke3Byb3BzLmNvbnRhaW5lclR5cGV9YDtcbiAgICAgIGNvbnRhaW5lclR5cGVDYW1lbENhc2UgPSAnRGF0YWRvZ1NpZGVjYXInO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCB7IGFjY291bnQ6IGFjY291bnRJZCwgcmVnaW9uIH0gPSBTdGFjay5vZihwcm9wcy5zY29wZSk7XG5cbiAgc3dpdGNoIChwcm9wcy5kYXRhZG9nTG9nZ2luZ01vZGUpIHtcblxuICAgIGNhc2UgRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM6XG4gICAgICAvLyBUT0RPIGNhbiB3ZSB1c2UgYHNlY3JldE9wdGlvbnNgIGhlcmUgYXMgd2VsbCwgZS5nLiBhcyBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzLXNhbXBsZXMvYW1hem9uLWVjcy1maXJlbGVucy1leGFtcGxlcy9ibG9iL21haW5saW5lL2V4YW1wbGVzL2ZsdWVudC1iaXQvZGF0YWRvZy90YXNrLWRlZmluaXRpb24uanNvbiNMMzMtTDM2XG4gICAgICAvLyBQcm9iYWJseSBub3QsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzgxNzRcbiAgICAgIHJldHVybiBlY3MuTG9nRHJpdmVycy5maXJlbGVucyh7XG4gICAgICAgIC8vIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZmx1ZW50Yml0LyNjb25maWd1cmF0aW9uLXBhcmFtZXRlcnNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIE5hbWU6ICdkYXRhZG9nJyxcbiAgICAgICAgICBNYXRjaDogJyonLFxuICAgICAgICAgIEhvc3Q6IGBodHRwLWludGFrZS5sb2dzLiR7cHJvcHMuZGF0YWRvZ1NpdGV9YCxcbiAgICAgICAgICBUTFM6ICdvbicsXG4gICAgICAgICAgYXBpa2V5OiBwcm9wcy5kYXRhZG9nQXBpS2V5UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICAgICAgIGNvbXByZXNzOiAnZ3ppcCcsXG4gICAgICAgICAgZGRfc2VydmljZTogbG9nR3JvdXBOYW1lLFxuICAgICAgICAgIGRkX3NvdXJjZTogJ3Jpby1mYXJnYXRlJyxcbiAgICAgICAgICBkZF9tZXNzYWdlX2tleTogJ2xvZycsXG4gICAgICAgICAgZGRfdGFnczogZ2V0VGFnc0Vudmlyb25tZW50VmFyaWFibGVWYWx1ZSh7IC4uLnByb3BzLCBhY2NvdW50SWQsIHJlZ2lvbiwgY29udGFpbmVyVHlwZTogJ2ZsdWVudC1iaXQnIH0pLFxuICAgICAgICAgIHByb3ZpZGVyOiAnZWNzJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYUFybiA9IEZuLmltcG9ydFZhbHVlKCdjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuJyk7XG4gICAgICBjb25zdCBjZm5QZXJtaXNzaW9uID0gbmV3IGxhbWJkYS5DZm5QZXJtaXNzaW9uKHByb3BzLnNjb3BlLCBgTG9nRm9yd2FyZGVyUGVybWlzc2lvbiR7Y29udGFpbmVyVHlwZUNhbWVsQ2FzZX1gLCB7XG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogbG9nRm9yd2FyZGVyTGFtYmRhQXJuLFxuICAgICAgICBwcmluY2lwYWw6IGBsb2dzLiR7cmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgc291cmNlQXJuOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBBcm4sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmblN1YnNjcmlwdGlvbkZpbHRlciA9IG5ldyBsb2dzLkNmblN1YnNjcmlwdGlvbkZpbHRlcihcbiAgICAgICAgcHJvcHMuc2NvcGUsXG4gICAgICAgIGBMb2dGb3J3YXJkZXJTdWJzY3JpcHRpb25GaWx0ZXIke2NvbnRhaW5lclR5cGVDYW1lbENhc2V9YCxcbiAgICAgICAge1xuICAgICAgICAgIGRlc3RpbmF0aW9uQXJuOiBsb2dGb3J3YXJkZXJMYW1iZGFBcm4sXG4gICAgICAgICAgZmlsdGVyUGF0dGVybjogJycsXG4gICAgICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cEZvckZvcndhcmRpbmdMYW1iZGEubG9nR3JvdXBOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNmblN1YnNjcmlwdGlvbkZpbHRlci5hZGREZXBlbmRzT24oY2ZuUGVybWlzc2lvbik7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwRm9yRm9yd2FyZGluZ0xhbWJkYSxcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTpcbiAgICAgIGNvbnN0IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSA9IG5ldyBsb2dzLkxvZ0dyb3VwKHByb3BzLnNjb3BlLCBsb2dHcm91cElkLCB7XG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZWNzLkxvZ0RyaXZlcnMuYXdzTG9ncyh7XG4gICAgICAgIHN0cmVhbVByZWZpeDogcHJvcHMuY29udGFpbmVyVHlwZSxcbiAgICAgICAgbG9nR3JvdXA6IGxvZ0dyb3VwSW5DbG91ZHdhdGNoT25seSxcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyhyaW9GYXJnYXRlU2VydmljZTogUmlvRmFyZ2F0ZVNlcnZpY2UpOiB2b2lkIHtcblxuICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgIGNvbnRhaW5lcjogcmlvRmFyZ2F0ZVNlcnZpY2UuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uSEVBTFRIWSxcbiAgfSk7XG5cbiAgaWYgKHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24pIHtcbiAgICByaW9GYXJnYXRlU2VydmljZS5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgY29udGFpbmVyOiByaW9GYXJnYXRlU2VydmljZS5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uLFxuICAgICAgY29uZGl0aW9uOiBlY3MuQ29udGFpbmVyRGVwZW5kZW5jeUNvbmRpdGlvbi5TVEFSVCxcbiAgICB9KTtcblxuICAgIGlmIChyaW9GYXJnYXRlU2VydmljZS5kYXRhZG9nU2lkZUNhckNvbnRhaW5lckRlZmluaXRpb24ubG9nRHJpdmVyQ29uZmlnPy5sb2dEcml2ZXIgPT09ICdhd3NmaXJlbGVucycpIHtcbiAgICAgIHJpb0ZhcmdhdGVTZXJ2aWNlLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRDb250YWluZXJEZXBlbmRlbmNpZXMoe1xuICAgICAgICBjb250YWluZXI6IHJpb0ZhcmdhdGVTZXJ2aWNlLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24sXG4gICAgICAgIGNvbmRpdGlvbjogZWNzLkNvbnRhaW5lckRlcGVuZGVuY3lDb25kaXRpb24uU1RBUlQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|