ec2-instance-running-scheduler 0.3.6 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.devcontainer/devcontainer.json +4 -3
- package/.jsii +298 -41
- package/API.md +239 -6
- package/README.md +76 -11
- package/assets/funcs/running-scheduler.lambda/index.js +355 -54
- package/assets/funcs/running-scheduler.lambda/index.js.map +4 -4
- package/lib/constructs/ec2-instance-running-scheduler.d.ts +105 -3
- package/lib/constructs/ec2-instance-running-scheduler.js +101 -17
- package/lib/constructs/running-scheduler-failure-detection.js +1 -1
- package/lib/funcs/running-scheduler-predicates.d.ts +4 -0
- package/lib/funcs/running-scheduler-predicates.js +5 -2
- package/lib/funcs/running-scheduler-wait-config.d.ts +13 -1
- package/lib/funcs/running-scheduler-wait-config.js +15 -3
- package/lib/funcs/running-scheduler-wait-env.d.ts +8 -2
- package/lib/funcs/running-scheduler-wait-env.js +29 -27
- package/lib/funcs/running-scheduler.lambda.d.ts +8 -5
- package/lib/funcs/running-scheduler.lambda.js +44 -21
- package/lib/stacks/ec2-instance-running-schedule-stack.d.ts +6 -3
- package/lib/stacks/ec2-instance-running-schedule-stack.js +6 -4
- package/package.json +14 -14
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TimeZone } from 'aws-cdk-lib';
|
|
1
|
+
import { Duration, RemovalPolicy, TimeZone } from 'aws-cdk-lib';
|
|
2
|
+
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
2
3
|
import { Construct } from 'constructs';
|
|
3
4
|
import { type FailureDetectionAlarms, type RunningSchedulerFailureDetection } from './running-scheduler-failure-detection';
|
|
4
5
|
export type { FailureDetectionAlarms, RunningSchedulerFailureDetection, RunningSchedulerFailureDetectionProps, } from './running-scheduler-failure-detection';
|
|
@@ -17,6 +18,10 @@ export interface Schedule {
|
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Defines which EC2 instances are targeted by tag key and values.
|
|
21
|
+
*
|
|
22
|
+
* Instances must already have this tag. IAM allows `ec2:StartInstances` /
|
|
23
|
+
* `ec2:StopInstances` only on instances in the stack account and region whose
|
|
24
|
+
* `aws:ResourceTag/<tagKey>` matches one of {@link TargetResource.tagValues}.
|
|
20
25
|
*/
|
|
21
26
|
export interface TargetResource {
|
|
22
27
|
/** Tag key used to select instances (e.g. Schedule). */
|
|
@@ -53,6 +58,79 @@ export interface ResourceWaitLimits {
|
|
|
53
58
|
* @default {@link DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds} (1800, 30 minutes)
|
|
54
59
|
*/
|
|
55
60
|
readonly maxElapsedSeconds?: number;
|
|
61
|
+
/**
|
|
62
|
+
* Seconds to wait between describe iterations after start/stop or while transitioning.
|
|
63
|
+
*
|
|
64
|
+
* Lower values detect state changes sooner; higher values reduce DescribeInstances calls.
|
|
65
|
+
*
|
|
66
|
+
* @default {@link DEFAULT_RESOURCE_WAIT_LIMITS.statusChangeWaitSeconds} (20)
|
|
67
|
+
*/
|
|
68
|
+
readonly statusChangeWaitSeconds?: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Lambda invoke settings and bounded parallelism for the running scheduler function.
|
|
72
|
+
*
|
|
73
|
+
* Increase {@link memorySize} and {@link maxConcurrency} when a single invocation targets
|
|
74
|
+
* many instances or regions.
|
|
75
|
+
*/
|
|
76
|
+
export interface RunningSchedulerRuntimeProps {
|
|
77
|
+
/**
|
|
78
|
+
* Memory allocated to the running scheduler Lambda, in MB.
|
|
79
|
+
*
|
|
80
|
+
* @default 512
|
|
81
|
+
*/
|
|
82
|
+
readonly memorySize?: number;
|
|
83
|
+
/**
|
|
84
|
+
* Invoke timeout for the Lambda function (not the durable execution timeout).
|
|
85
|
+
*
|
|
86
|
+
* AWS Lambda's maximum invoke timeout is 15 minutes. Durable waits can continue
|
|
87
|
+
* beyond this via {@link RunningSchedulerDurableProps.executionTimeout}.
|
|
88
|
+
*
|
|
89
|
+
* @default Duration.minutes(15)
|
|
90
|
+
*/
|
|
91
|
+
readonly timeout?: Duration;
|
|
92
|
+
/**
|
|
93
|
+
* Maximum number of instances processed in parallel by the durable `map`.
|
|
94
|
+
*
|
|
95
|
+
* @default {@link DEFAULT_MAX_CONCURRENCY} (10)
|
|
96
|
+
*/
|
|
97
|
+
readonly maxConcurrency?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Durable Execution timeout and history retention for the running scheduler Lambda.
|
|
101
|
+
*/
|
|
102
|
+
export interface RunningSchedulerDurableProps {
|
|
103
|
+
/**
|
|
104
|
+
* Maximum duration of a durable execution.
|
|
105
|
+
*
|
|
106
|
+
* Increase when many instances are processed with long per-instance waits.
|
|
107
|
+
*
|
|
108
|
+
* @default Duration.hours(2)
|
|
109
|
+
*/
|
|
110
|
+
readonly executionTimeout?: Duration;
|
|
111
|
+
/**
|
|
112
|
+
* How long to retain durable execution history.
|
|
113
|
+
*
|
|
114
|
+
* @default Duration.days(1)
|
|
115
|
+
*/
|
|
116
|
+
readonly retentionPeriod?: Duration;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* CloudWatch Logs settings for the running scheduler function log group.
|
|
120
|
+
*/
|
|
121
|
+
export interface RunningSchedulerLogGroupProps {
|
|
122
|
+
/**
|
|
123
|
+
* How long to retain application logs.
|
|
124
|
+
*
|
|
125
|
+
* @default RetentionDays.THREE_MONTHS
|
|
126
|
+
*/
|
|
127
|
+
readonly retention?: logs.RetentionDays;
|
|
128
|
+
/**
|
|
129
|
+
* Removal policy for the log group.
|
|
130
|
+
*
|
|
131
|
+
* @default RemovalPolicy.DESTROY
|
|
132
|
+
*/
|
|
133
|
+
readonly removalPolicy?: RemovalPolicy;
|
|
56
134
|
}
|
|
57
135
|
/**
|
|
58
136
|
* Properties for creating an EC2 instance running scheduler.
|
|
@@ -74,6 +152,24 @@ export interface EC2InstanceRunningSchedulerProps {
|
|
|
74
152
|
* @default {@link DEFAULT_RESOURCE_WAIT_LIMITS}
|
|
75
153
|
*/
|
|
76
154
|
readonly resourceWait?: ResourceWaitLimits;
|
|
155
|
+
/**
|
|
156
|
+
* Lambda memory, invoke timeout, and per-invocation instance concurrency.
|
|
157
|
+
*
|
|
158
|
+
* @default 512 MB, 15 minutes, {@link DEFAULT_MAX_CONCURRENCY} (10)
|
|
159
|
+
*/
|
|
160
|
+
readonly runtime?: RunningSchedulerRuntimeProps;
|
|
161
|
+
/**
|
|
162
|
+
* Durable Execution timeout and history retention.
|
|
163
|
+
*
|
|
164
|
+
* @default executionTimeout 2 hours, retentionPeriod 1 day
|
|
165
|
+
*/
|
|
166
|
+
readonly durable?: RunningSchedulerDurableProps;
|
|
167
|
+
/**
|
|
168
|
+
* CloudWatch Logs retention and removal policy for the function log group.
|
|
169
|
+
*
|
|
170
|
+
* @default RetentionDays.THREE_MONTHS, RemovalPolicy.DESTROY
|
|
171
|
+
*/
|
|
172
|
+
readonly logGroup?: RunningSchedulerLogGroupProps;
|
|
77
173
|
/**
|
|
78
174
|
* Optional CloudWatch alarms and log-based metrics for failure detection.
|
|
79
175
|
*
|
|
@@ -90,7 +186,11 @@ export interface EC2InstanceRunningSchedulerProps {
|
|
|
90
186
|
* the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
|
|
91
187
|
*
|
|
92
188
|
* Per-instance wait timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourceWait}
|
|
93
|
-
* and enforced in the handler before the Durable execution timeout.
|
|
189
|
+
* and enforced in the handler before the Durable execution timeout. Lambda memory, invoke timeout,
|
|
190
|
+
* and map concurrency are set via {@link EC2InstanceRunningSchedulerProps.runtime}; Durable
|
|
191
|
+
* execution timeout and history retention via {@link EC2InstanceRunningSchedulerProps.durable};
|
|
192
|
+
* log retention via {@link EC2InstanceRunningSchedulerProps.logGroup}. Start/stop IAM is limited
|
|
193
|
+
* to instances tagged as {@link TargetResource}. Optional CloudWatch failure
|
|
94
194
|
* detection is available via {@link EC2InstanceRunningSchedulerProps.failureDetection}.
|
|
95
195
|
*/
|
|
96
196
|
export declare class EC2InstanceRunningScheduler extends Construct {
|
|
@@ -103,7 +203,9 @@ export declare class EC2InstanceRunningScheduler extends Construct {
|
|
|
103
203
|
* @param scope - Parent construct.
|
|
104
204
|
* @param id - Construct id.
|
|
105
205
|
* @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
|
|
106
|
-
* {@link ResourceWaitLimits},
|
|
206
|
+
* {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
|
|
207
|
+
* {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
|
|
208
|
+
* and optional {@link FailureDetectionAlarms}.
|
|
107
209
|
*/
|
|
108
210
|
constructor(scope: Construct, id: string, props: EC2InstanceRunningSchedulerProps);
|
|
109
211
|
}
|
|
@@ -47,6 +47,76 @@ const running_scheduler_failure_detection_1 = require("./running-scheduler-failu
|
|
|
47
47
|
const running_scheduler_function_1 = require("../funcs/running-scheduler-function");
|
|
48
48
|
const running_scheduler_predicates_1 = require("../funcs/running-scheduler-predicates");
|
|
49
49
|
const running_scheduler_wait_config_1 = require("../funcs/running-scheduler-wait-config");
|
|
50
|
+
const DEFAULT_LAMBDA_MEMORY_SIZE = 512;
|
|
51
|
+
const DEFAULT_LAMBDA_TIMEOUT = aws_cdk_lib_1.Duration.minutes(15);
|
|
52
|
+
const DEFAULT_DURABLE_EXECUTION_TIMEOUT = aws_cdk_lib_1.Duration.hours(2);
|
|
53
|
+
const DEFAULT_DURABLE_RETENTION_PERIOD = aws_cdk_lib_1.Duration.days(1);
|
|
54
|
+
/**
|
|
55
|
+
* Returns `value` when set, otherwise `defaultValue`.
|
|
56
|
+
*
|
|
57
|
+
* @param name - Property path used in the error message.
|
|
58
|
+
* @param value - Optional positive integer from construct props.
|
|
59
|
+
* @param defaultValue - Fallback when `value` is omitted.
|
|
60
|
+
* @returns A positive integer.
|
|
61
|
+
* @throws {Error} When `value` is set and is not a positive integer.
|
|
62
|
+
*/
|
|
63
|
+
const resolvePositiveInteger = (name, value, defaultValue) => {
|
|
64
|
+
if (value === undefined) {
|
|
65
|
+
return defaultValue;
|
|
66
|
+
}
|
|
67
|
+
if (!Number.isInteger(value) || value <= 0) {
|
|
68
|
+
throw new Error(`${name} must be a positive integer (got ${String(value)})`);
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Ensures {@link TargetResource} can be used in IAM `aws:ResourceTag` conditions.
|
|
74
|
+
*
|
|
75
|
+
* @param targetResource - Tag key and values used to select EC2 instances.
|
|
76
|
+
* @throws {Error} When `tagKey` is empty or `tagValues` is empty.
|
|
77
|
+
*/
|
|
78
|
+
const assertTargetResourceForIam = (targetResource) => {
|
|
79
|
+
if (targetResource.tagKey === '') {
|
|
80
|
+
throw new Error('targetResource.tagKey must be a non-empty string');
|
|
81
|
+
}
|
|
82
|
+
if (targetResource.tagValues.length === 0) {
|
|
83
|
+
throw new Error('targetResource.tagValues must contain at least one value');
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* IAM statement that allows start/stop only on EC2 instances in this account and region
|
|
88
|
+
* whose tags match {@link TargetResource}.
|
|
89
|
+
*
|
|
90
|
+
* `tag:GetResources` and `ec2:DescribeInstances` cannot use resource-level ARNs or
|
|
91
|
+
* resource-tag conditions (AWS API limitation). Start/stop are scoped instead so a
|
|
92
|
+
* compromised function cannot start or stop untagged instances.
|
|
93
|
+
*
|
|
94
|
+
* @param scope - Construct used to resolve the stack ARN partition, region, and account.
|
|
95
|
+
* @param targetResource - Tag key and values required on target instances.
|
|
96
|
+
* @returns Policy statement for `ec2:StartInstances` and `ec2:StopInstances`.
|
|
97
|
+
*/
|
|
98
|
+
const taggedInstanceStartStopStatement = (scope, targetResource) => {
|
|
99
|
+
const instanceArn = aws_cdk_lib_1.Stack.of(scope).formatArn({
|
|
100
|
+
service: 'ec2',
|
|
101
|
+
resource: 'instance',
|
|
102
|
+
resourceName: '*',
|
|
103
|
+
arnFormat: aws_cdk_lib_1.ArnFormat.SLASH_RESOURCE_NAME,
|
|
104
|
+
});
|
|
105
|
+
return new iam.PolicyStatement({
|
|
106
|
+
sid: 'Ec2StartStopTaggedInstances',
|
|
107
|
+
effect: iam.Effect.ALLOW,
|
|
108
|
+
actions: [
|
|
109
|
+
'ec2:StartInstances',
|
|
110
|
+
'ec2:StopInstances',
|
|
111
|
+
],
|
|
112
|
+
resources: [instanceArn],
|
|
113
|
+
conditions: {
|
|
114
|
+
StringEquals: {
|
|
115
|
+
[`aws:ResourceTag/${targetResource.tagKey}`]: targetResource.tagValues,
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
};
|
|
50
120
|
/**
|
|
51
121
|
* Provisions EventBridge Scheduler rules and a Durable Execution Lambda that start/stop tagged EC2 instances.
|
|
52
122
|
*
|
|
@@ -54,11 +124,15 @@ const running_scheduler_wait_config_1 = require("../funcs/running-scheduler-wait
|
|
|
54
124
|
* the Resource Groups Tagging API and EC2 APIs; Slack notifications use the secret named in {@link Secrets.slackSecretName}.
|
|
55
125
|
*
|
|
56
126
|
* Per-instance wait timeouts are configured via {@link EC2InstanceRunningSchedulerProps.resourceWait}
|
|
57
|
-
* and enforced in the handler before the Durable execution timeout.
|
|
127
|
+
* and enforced in the handler before the Durable execution timeout. Lambda memory, invoke timeout,
|
|
128
|
+
* and map concurrency are set via {@link EC2InstanceRunningSchedulerProps.runtime}; Durable
|
|
129
|
+
* execution timeout and history retention via {@link EC2InstanceRunningSchedulerProps.durable};
|
|
130
|
+
* log retention via {@link EC2InstanceRunningSchedulerProps.logGroup}. Start/stop IAM is limited
|
|
131
|
+
* to instances tagged as {@link TargetResource}. Optional CloudWatch failure
|
|
58
132
|
* detection is available via {@link EC2InstanceRunningSchedulerProps.failureDetection}.
|
|
59
133
|
*/
|
|
60
134
|
class EC2InstanceRunningScheduler extends constructs_1.Construct {
|
|
61
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.
|
|
135
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduler", version: "0.4.1" };
|
|
62
136
|
/** Failure detection alarms, when {@link EC2InstanceRunningSchedulerProps.failureDetection} is enabled. */
|
|
63
137
|
failureDetection;
|
|
64
138
|
/**
|
|
@@ -68,31 +142,41 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
|
|
|
68
142
|
* @param scope - Parent construct.
|
|
69
143
|
* @param id - Construct id.
|
|
70
144
|
* @param props - Target tags, schedules, Slack secret, schedule enable flag, optional
|
|
71
|
-
* {@link ResourceWaitLimits},
|
|
145
|
+
* {@link ResourceWaitLimits}, {@link RunningSchedulerRuntimeProps},
|
|
146
|
+
* {@link RunningSchedulerDurableProps}, {@link RunningSchedulerLogGroupProps},
|
|
147
|
+
* and optional {@link FailureDetectionAlarms}.
|
|
72
148
|
*/
|
|
73
149
|
constructor(scope, id, props) {
|
|
74
150
|
super(scope, id);
|
|
151
|
+
assertTargetResourceForIam(props.targetResource);
|
|
75
152
|
const slackSecret = aws_secretsmanager_1.Secret.fromSecretNameV2(this, 'SlackSecret', props.secrets.slackSecretName);
|
|
153
|
+
const maxLoopCount = resolvePositiveInteger('resourceWait.maxLoopCount', props.resourceWait?.maxLoopCount, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxLoopCount);
|
|
154
|
+
const maxElapsedSeconds = resolvePositiveInteger('resourceWait.maxElapsedSeconds', props.resourceWait?.maxElapsedSeconds, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds);
|
|
155
|
+
const statusChangeWaitSeconds = resolvePositiveInteger('resourceWait.statusChangeWaitSeconds', props.resourceWait?.statusChangeWaitSeconds, running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.statusChangeWaitSeconds);
|
|
156
|
+
const maxConcurrency = resolvePositiveInteger('runtime.maxConcurrency', props.runtime?.maxConcurrency, running_scheduler_predicates_1.DEFAULT_MAX_CONCURRENCY);
|
|
157
|
+
const memorySize = resolvePositiveInteger('runtime.memorySize', props.runtime?.memorySize, DEFAULT_LAMBDA_MEMORY_SIZE);
|
|
76
158
|
// Durable Functions-based Running Scheduler (previous Step Functions logic implemented in Lambda).
|
|
77
159
|
// Durable Execution requires Node.js 22+.
|
|
78
160
|
const runningScheduleFunctionLogGroup = new logs.LogGroup(this, 'RunningSchedulerFunctionLogGroup', {
|
|
79
|
-
retention: logs.RetentionDays.THREE_MONTHS,
|
|
80
|
-
removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
161
|
+
retention: props.logGroup?.retention ?? logs.RetentionDays.THREE_MONTHS,
|
|
162
|
+
removalPolicy: props.logGroup?.removalPolicy ?? aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
81
163
|
});
|
|
82
164
|
const runningScheduleFunction = new running_scheduler_function_1.RunningSchedulerFunction(this, 'RunningSchedulerFunction', {
|
|
83
165
|
description: 'Starts and stops tagged EC2 instances on EventBridge Scheduler schedules.',
|
|
84
166
|
architecture: lambda.Architecture.ARM_64,
|
|
85
|
-
timeout:
|
|
86
|
-
memorySize
|
|
167
|
+
timeout: props.runtime?.timeout ?? DEFAULT_LAMBDA_TIMEOUT,
|
|
168
|
+
memorySize,
|
|
87
169
|
retryAttempts: 2,
|
|
88
170
|
durableConfig: {
|
|
89
|
-
executionTimeout:
|
|
90
|
-
retentionPeriod:
|
|
171
|
+
executionTimeout: props.durable?.executionTimeout ?? DEFAULT_DURABLE_EXECUTION_TIMEOUT,
|
|
172
|
+
retentionPeriod: props.durable?.retentionPeriod ?? DEFAULT_DURABLE_RETENTION_PERIOD,
|
|
91
173
|
},
|
|
92
174
|
environment: {
|
|
93
175
|
SLACK_SECRET_NAME: props.secrets.slackSecretName,
|
|
94
|
-
[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: String(
|
|
95
|
-
[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: String(
|
|
176
|
+
[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: String(maxLoopCount),
|
|
177
|
+
[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: String(maxElapsedSeconds),
|
|
178
|
+
[running_scheduler_wait_config_1.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV]: String(statusChangeWaitSeconds),
|
|
179
|
+
[running_scheduler_wait_config_1.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV]: String(maxConcurrency),
|
|
96
180
|
},
|
|
97
181
|
paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
|
|
98
182
|
// Required by aws-lambda-secret-fetcher (extension HTTP API on localhost; port from PARAMETERS_SECRETS_EXTENSION_HTTP_PORT).
|
|
@@ -100,7 +184,7 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
|
|
|
100
184
|
logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
|
|
101
185
|
}),
|
|
102
186
|
role: new iam.Role(this, 'RunningSchedulerFunctionRole', {
|
|
103
|
-
description: 'Allows the running scheduler to describe
|
|
187
|
+
description: 'Allows the running scheduler to describe instances and start/stop tagged EC2 instances, and to read Slack secrets.',
|
|
104
188
|
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
105
189
|
managedPolicies: [
|
|
106
190
|
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
|
|
@@ -118,19 +202,19 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
|
|
|
118
202
|
actions: [
|
|
119
203
|
'tag:GetResources',
|
|
120
204
|
],
|
|
205
|
+
// Resource Groups Tagging API does not support resource-level permissions.
|
|
121
206
|
resources: ['*'],
|
|
122
207
|
}));
|
|
123
|
-
// EC2: describe instances and start/stop by instance id
|
|
124
208
|
runningScheduleFunction.addToRolePolicy(new iam.PolicyStatement({
|
|
125
|
-
sid: '
|
|
209
|
+
sid: 'Ec2DescribeInstances',
|
|
126
210
|
effect: iam.Effect.ALLOW,
|
|
127
211
|
actions: [
|
|
128
212
|
'ec2:DescribeInstances',
|
|
129
|
-
'ec2:StartInstances',
|
|
130
|
-
'ec2:StopInstances',
|
|
131
213
|
],
|
|
214
|
+
// Describe* APIs do not support resource-level permissions or resource-tag conditions.
|
|
132
215
|
resources: ['*'],
|
|
133
216
|
}));
|
|
217
|
+
runningScheduleFunction.addToRolePolicy(taggedInstanceStartStopStatement(this, props.targetResource));
|
|
134
218
|
// Grant read access to the Slack secret
|
|
135
219
|
slackSecret.grantRead(runningScheduleFunction);
|
|
136
220
|
this.failureDetection = (0, running_scheduler_failure_detection_1.createRunningSchedulerFailureDetection)(this, 'FailureDetection', {
|
|
@@ -191,4 +275,4 @@ class EC2InstanceRunningScheduler extends constructs_1.Construct {
|
|
|
191
275
|
}
|
|
192
276
|
}
|
|
193
277
|
exports.EC2InstanceRunningScheduler = EC2InstanceRunningScheduler;
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBQXFGO0FBQ3JGLDBGQUdnRDtBQThGaEQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxzQkFBUzs7SUFDeEQsMkdBQTJHO0lBQzNGLGdCQUFnQixDQUFvQztJQUVwRTs7Ozs7Ozs7T0FRRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLFdBQVcsR0FBRywyQkFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVoRyxtR0FBbUc7UUFDbkcsMENBQTBDO1FBQzFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRTtZQUNsRyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO1lBQzFDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLHFEQUF3QixDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUM3RixXQUFXLEVBQUUsMkVBQTJF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Q0FBQyxDQUFDO1FBRUgsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNsRCxXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksR0FBRztnQkFDekMsSUFBSSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUk7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxTQUFTO2dCQUM5QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksc0JBQVEsQ0FBQyxPQUFPO2FBQzNELENBQUM7WUFDRixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUM3RCxLQUFLLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztvQkFDOUMsTUFBTSxFQUFFO3dCQUNOLE1BQU0sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLE1BQU07d0JBQ25DLFNBQVMsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVM7d0JBQ3pDLElBQUksRUFBRSxNQUFNO3FCQUNiO2lCQUNGLENBQUM7YUFDSCxDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE5SUgsa0VBK0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFRpbWVab25lIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzY2hlZHVsZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNjaGVkdWxlcic7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXItdGFyZ2V0cyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBjcmVhdGVSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbiAgdHlwZSBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zLFxuICB0eXBlIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLWZhaWx1cmUtZGV0ZWN0aW9uJztcbmltcG9ydCB7IFJ1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLWZ1bmN0aW9uJztcbmltcG9ydCB7IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMgfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzJztcbmltcG9ydCB7XG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WLFxufSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWNvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgRmFpbHVyZURldGVjdGlvbkFsYXJtcyxcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIFJ1bm5pbmdTY2hlZHVsZXJGYWlsdXJlRGV0ZWN0aW9uUHJvcHMsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItZmFpbHVyZS1kZXRlY3Rpb24nO1xuXG4vKipcbiAqIENyb24tc3R5bGUgc2NoZWR1bGUgY29uZmlndXJhdGlvbiBmb3Igc3RhcnQvc3RvcCBhY3Rpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlIHtcbiAgLyoqIFRpbWUgem9uZSBmb3IgdGhlIHNjaGVkdWxlIChlLmcuIEVUQ19VVEMpLiAqL1xuICByZWFkb25seSB0aW1lem9uZTogVGltZVpvbmU7XG4gIC8qKiBDcm9uIG1pbnV0ZSAoMOKAkzU5KS4gKi9cbiAgcmVhZG9ubHkgbWludXRlPzogc3RyaW5nO1xuICAvKiogQ3JvbiBob3VyICgw4oCTMjMpLiAqL1xuICByZWFkb25seSBob3VyPzogc3RyaW5nO1xuICAvKiogQ3JvbiBkYXkgb2Ygd2VlayAoZS5nLiBNT04tRlJJKS4gKi9cbiAgcmVhZG9ubHkgd2Vlaz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHdoaWNoIEVDMiBpbnN0YW5jZXMgYXJlIHRhcmdldGVkIGJ5IHRhZyBrZXkgYW5kIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXJnZXRSZXNvdXJjZSB7XG4gIC8qKiBUYWcga2V5IHVzZWQgdG8gc2VsZWN0IGluc3RhbmNlcyAoZS5nLiBTY2hlZHVsZSkuICovXG4gIHJlYWRvbmx5IHRhZ0tleTogc3RyaW5nO1xuICAvKiogVGFnIHZhbHVlcyB0aGF0IG1hdGNoIGluc3RhbmNlcyB0byBpbmNsdWRlLiAqL1xuICByZWFkb25seSB0YWdWYWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNlY3JldCBpZGVudGlmaWVycyByZXF1aXJlZCBieSB0aGUgc2NoZWR1bGVyIChlLmcuIFNsYWNrKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFNlY3JldHMgTWFuYWdlciBzZWNyZXQgY29udGFpbmluZyBTbGFjayB0b2tlbiBhbmQgY2hhbm5lbC4gKi9cbiAgcmVhZG9ubHkgc2xhY2tTZWNyZXROYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ0RLLXNpZGUgbGltaXRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHdhaXRpbmcgaW4gdGhlIER1cmFibGUgTGFtYmRhIGhhbmRsZXIuXG4gKlxuICogT3B0aW9uYWwgZmllbGRzIG1hcCB0byB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZ9IGFuZFxuICoge0BsaW5rIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZ9IG9uIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbi5cbiAqIFByZXZlbnRzIGFibm9ybWFsIG9yIHN0dWNrIHRyYW5zaXRpb25zIGZyb20gcnVubmluZyB1bnRpbCB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC5cbiAqXG4gKiBAc2VlIHtAbGluayBSZXNvdXJjZVdhaXRMaW1pdHN9IGluIGBydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzYCBmb3IgdGhlIGhhbmRsZXItc2lkZSByZXF1aXJlZCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVdhaXRMaW1pdHMge1xuICAvKipcbiAgICogTWF4aW11bSBkZXNjcmliZS93YWl0IGxvb3AgaXRlcmF0aW9ucyBwZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heExvb3BDb3VudH0gKDkwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50PzogbnVtYmVyO1xuICAvKipcbiAgICogTWF4aW11bSB3YWxsLWNsb2NrIHNlY29uZHMgc3BlbnQgd2FpdGluZyBmb3IgYSBzaW5nbGUgaW5zdGFuY2UgdG8gc3RhYmlsaXplLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kc30gKDE4MDAsIDMwIG1pbnV0ZXMpXG4gICAqL1xuICByZWFkb25seSBtYXhFbGFwc2VkU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogRmFpbHVyZURldGVjdGlvbkFsYXJtcztcbn1cblxuLyoqXG4gKiBQcm92aXNpb25zIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhbmQgYSBEdXJhYmxlIEV4ZWN1dGlvbiBMYW1iZGEgdGhhdCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLlxuICpcbiAqIEVhY2ggc2NoZWR1bGUgaW52b2tlcyB0aGUgZnVuY3Rpb24gd2l0aCBgUGFyYW1zYCAoYFRhZ0tleWAsIGBUYWdWYWx1ZXNgLCBgTW9kZWApLiBUaGUgZnVuY3Rpb24gdXNlc1xuICogdGhlIFJlc291cmNlIEdyb3VwcyBUYWdnaW5nIEFQSSBhbmQgRUMyIEFQSXM7IFNsYWNrIG5vdGlmaWNhdGlvbnMgdXNlIHRoZSBzZWNyZXQgbmFtZWQgaW4ge0BsaW5rIFNlY3JldHMuc2xhY2tTZWNyZXROYW1lfS5cbiAqXG4gKiBQZXItaW5zdGFuY2Ugd2FpdCB0aW1lb3V0cyBhcmUgY29uZmlndXJlZCB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLnJlc291cmNlV2FpdH1cbiAqIGFuZCBlbmZvcmNlZCBpbiB0aGUgaGFuZGxlciBiZWZvcmUgdGhlIER1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQuIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIGFuZCBvcHRpb25hbCB7QGxpbmsgRmFpbHVyZURldGVjdGlvbkFsYXJtc30uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc2xhY2tTZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMih0aGlzLCAnU2xhY2tTZWNyZXQnLCBwcm9wcy5zZWNyZXRzLnNsYWNrU2VjcmV0TmFtZSk7XG5cbiAgICAvLyBEdXJhYmxlIEZ1bmN0aW9ucy1iYXNlZCBSdW5uaW5nIFNjaGVkdWxlciAocHJldmlvdXMgU3RlcCBGdW5jdGlvbnMgbG9naWMgaW1wbGVtZW50ZWQgaW4gTGFtYmRhKS5cbiAgICAvLyBEdXJhYmxlIEV4ZWN1dGlvbiByZXF1aXJlcyBOb2RlLmpzIDIyKy5cbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ1J1bm5pbmdTY2hlZHVsZXJGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgcmV0cnlBdHRlbXB0czogMixcbiAgICAgIGR1cmFibGVDb25maWc6IHtcbiAgICAgICAgZXhlY3V0aW9uVGltZW91dDogRHVyYXRpb24uaG91cnMoMiksXG4gICAgICAgIHJldGVudGlvblBlcmlvZDogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTTEFDS19TRUNSRVRfTkFNRTogcHJvcHMuc2VjcmV0cy5zbGFja1NlY3JldE5hbWUsXG4gICAgICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVl06IFN0cmluZyhcbiAgICAgICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCA/PyBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heExvb3BDb3VudCxcbiAgICAgICAgKSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcoXG4gICAgICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5tYXhFbGFwc2VkU2Vjb25kcyA/PyBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIHBhcmFtc0FuZFNlY3JldHM6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLmZyb21WZXJzaW9uKGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgLy8gUmVxdWlyZWQgYnkgYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlciAoZXh0ZW5zaW9uIEhUVFAgQVBJIG9uIGxvY2FsaG9zdDsgcG9ydCBmcm9tIFBBUkFNRVRFUlNfU0VDUkVUU19FWFRFTlNJT05fSFRUUF9QT1JUKS5cbiAgICAgICAgY2FjaGVTaXplOiA1MDAsXG4gICAgICAgIGxvZ0xldmVsOiBsYW1iZGEuUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLklORk8sXG4gICAgICB9KSxcbiAgICAgIHJvbGU6IG5ldyBpYW0uUm9sZSh0aGlzLCAnUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uUm9sZScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdBbGxvd3MgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIHRvIGRlc2NyaWJlLCBzdGFydCwgYW5kIHN0b3AgRUMyIGluc3RhbmNlcyBhbmQgcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gRUMyOiBkZXNjcmliZSBpbnN0YW5jZXMgYW5kIHN0YXJ0L3N0b3AgYnkgaW5zdGFuY2UgaWRcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyUnVubmluZ0NvbnRyb2wnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgICAgJ2VjMjpTdGFydEluc3RhbmNlcycsXG4gICAgICAgICdlYzI6U3RvcEluc3RhbmNlcycsXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICB9KSk7XG4gICAgLy8gR3JhbnQgcmVhZCBhY2Nlc3MgdG8gdGhlIFNsYWNrIHNlY3JldFxuICAgIHNsYWNrU2VjcmV0LmdyYW50UmVhZChydW5uaW5nU2NoZWR1bGVGdW5jdGlvbik7XG5cbiAgICB0aGlzLmZhaWx1cmVEZXRlY3Rpb24gPSBjcmVhdGVSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbih0aGlzLCAnRmFpbHVyZURldGVjdGlvbicsIHtcbiAgICAgIGZhaWx1cmVEZXRlY3Rpb246IHByb3BzLmZhaWx1cmVEZXRlY3Rpb24sXG4gICAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbixcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgIH0pO1xuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9kdXJhYmxlLWdldHRpbmctc3RhcnRlZC1pYWMuaHRtbFxuICAgIGNvbnN0IHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMgPSBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRBbGlhcygnbGl2ZScpO1xuXG4gICAgLy8gV2hldGhlciBzY2hlZHVsZXMgYXJlIGVuYWJsZWQgKGRlZmF1bHQgdHJ1ZSB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCkuXG4gICAgY29uc3Qgc2NoZWR1bGVFbmFibGVkOiBib29sZWFuID0gKCgpID0+IHtcbiAgICAgIGlmIChwcm9wcy5lbmFibGVTY2hlZHVsaW5nID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5hYmxlU2NoZWR1bGluZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnM6IExhbWJkYSBwZXJmb3JtcyB0YWcgbG9va3VwIGFuZCBpbnN0YW5jZSBzdGFydC9zdG9wIGluIGEgc2luZ2xlIHJ1bi5cbiAgICBuZXcgc2NoZWR1bGVyLlNjaGVkdWxlKHRoaXMsICdSdW5uaW5nU3RhcnRTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdGFydCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdGFydFNjaGVkdWxlPy5taW51dGUgPz8gJzUwJyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RhcnRTY2hlZHVsZT8uaG91ciA/PyAnNycsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8udGltZXpvbmUgPz8gVGltZVpvbmUuRVRDX1VUQyxcbiAgICAgIH0pLFxuICAgICAgdGFyZ2V0OiBuZXcgdGFyZ2V0cy5MYW1iZGFJbnZva2UocnVubmluZ1NjaGVkdWxlRnVuY3Rpb25BbGlhcywge1xuICAgICAgICBpbnB1dDogc2NoZWR1bGVyLlNjaGVkdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdCh7XG4gICAgICAgICAgUGFyYW1zOiB7XG4gICAgICAgICAgICBUYWdLZXk6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ0tleSxcbiAgICAgICAgICAgIFRhZ1ZhbHVlczogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLFxuICAgICAgICAgICAgTW9kZTogJ1N0YXJ0JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0b3BTY2hlZHVsZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAncnVubmluZyBzdG9wIHNjaGVkdWxlJyxcbiAgICAgIGVuYWJsZWQ6IHNjaGVkdWxlRW5hYmxlZCxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZXIuU2NoZWR1bGVFeHByZXNzaW9uLmNyb24oe1xuICAgICAgICBtaW51dGU6IHByb3BzLnN0b3BTY2hlZHVsZT8ubWludXRlID8/ICc1JyxcbiAgICAgICAgaG91cjogcHJvcHMuc3RvcFNjaGVkdWxlPy5ob3VyID8/ICcxOScsXG4gICAgICAgIHdlZWtEYXk6IHByb3BzLnN0b3BTY2hlZHVsZT8ud2VlayA/PyAnTU9OLUZSSScsXG4gICAgICAgIHRpbWVab25lOiBwcm9wcy5zdG9wU2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdG9wJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBa0Y7QUFDbEYseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCwyREFBNkM7QUFDN0MscUVBQXVEO0FBQ3ZELDJFQUE2RDtBQUM3RCx1RUFBd0Q7QUFDeEQsMkNBQXVDO0FBQ3ZDLCtGQUkrQztBQUMvQyxvRkFBK0U7QUFDL0Usd0ZBRytDO0FBQy9DLDBGQUtnRDtBQWdNaEQsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSxzQkFBc0IsR0FBRyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRCxNQUFNLGlDQUFpQyxHQUFHLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sZ0NBQWdDLEdBQUcsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLENBQUMsSUFBWSxFQUFFLEtBQXlCLEVBQUUsWUFBb0IsRUFBVSxFQUFFO0lBQ3ZHLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFD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QUFTO3dCQUN6QyxJQUFJLEVBQUUsTUFBTTtxQkFDYjtpQkFDRixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUtILGtFQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFybkZvcm1hdCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBUaW1lWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgc2NoZWR1bGVyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zY2hlZHVsZXInO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2NoZWR1bGVyLXRhcmdldHMnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24sXG4gIHR5cGUgRmFpbHVyZURldGVjdGlvbkFsYXJtcyxcbiAgdHlwZSBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5pbXBvcnQgeyBSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1mdW5jdGlvbic7XG5pbXBvcnQge1xuICBERUZBVUxUX01BWF9DT05DVVJSRU5DWSxcbiAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUyxcbn0gZnJvbSAnLi4vZnVuY3MvcnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcyc7XG5pbXBvcnQge1xuICBQUk9DRVNTX1JFU09VUkNFX01BWF9FTEFQU0VEX1NFQ09ORFNfRU5WLFxuICBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VTX01BWF9DT05DVVJSRU5DWV9FTlYsXG59IGZyb20gJy4uL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLXdhaXQtY29uZmlnJztcblxuZXhwb3J0IHR5cGUge1xuICBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zLFxuICBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbixcbiAgUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb25Qcm9wcyxcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1mYWlsdXJlLWRldGVjdGlvbic7XG5cbi8qKlxuICogQ3Jvbi1zdHlsZSBzY2hlZHVsZSBjb25maWd1cmF0aW9uIGZvciBzdGFydC9zdG9wIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGUge1xuICAvKiogVGltZSB6b25lIGZvciB0aGUgc2NoZWR1bGUgKGUuZy4gRVRDX1VUQykuICovXG4gIHJlYWRvbmx5IHRpbWV6b25lOiBUaW1lWm9uZTtcbiAgLyoqIENyb24gbWludXRlICgw4oCTNTkpLiAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGhvdXIgKDDigJMyMykuICovXG4gIHJlYWRvbmx5IGhvdXI/OiBzdHJpbmc7XG4gIC8qKiBDcm9uIGRheSBvZiB3ZWVrIChlLmcuIE1PTi1GUkkpLiAqL1xuICByZWFkb25seSB3ZWVrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hpY2ggRUMyIGluc3RhbmNlcyBhcmUgdGFyZ2V0ZWQgYnkgdGFnIGtleSBhbmQgdmFsdWVzLlxuICpcbiAqIEluc3RhbmNlcyBtdXN0IGFscmVhZHkgaGF2ZSB0aGlzIHRhZy4gSUFNIGFsbG93cyBgZWMyOlN0YXJ0SW5zdGFuY2VzYCAvXG4gKiBgZWMyOlN0b3BJbnN0YW5jZXNgIG9ubHkgb24gaW5zdGFuY2VzIGluIHRoZSBzdGFjayBhY2NvdW50IGFuZCByZWdpb24gd2hvc2VcbiAqIGBhd3M6UmVzb3VyY2VUYWcvPHRhZ0tleT5gIG1hdGNoZXMgb25lIG9mIHtAbGluayBUYXJnZXRSZXNvdXJjZS50YWdWYWx1ZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldFJlc291cmNlIHtcbiAgLyoqIFRhZyBrZXkgdXNlZCB0byBzZWxlY3QgaW5zdGFuY2VzIChlLmcuIFNjaGVkdWxlKS4gKi9cbiAgcmVhZG9ubHkgdGFnS2V5OiBzdHJpbmc7XG4gIC8qKiBUYWcgdmFsdWVzIHRoYXQgbWF0Y2ggaW5zdGFuY2VzIHRvIGluY2x1ZGUuICovXG4gIHJlYWRvbmx5IHRhZ1ZhbHVlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogU2VjcmV0IGlkZW50aWZpZXJzIHJlcXVpcmVkIGJ5IHRoZSBzY2hlZHVsZXIgKGUuZy4gU2xhY2spLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldHMge1xuICAvKiogTmFtZSBvZiB0aGUgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIFNsYWNrIHRva2VuIGFuZCBjaGFubmVsLiAqL1xuICByZWFkb25seSBzbGFja1NlY3JldE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDREstc2lkZSBsaW1pdHMgZm9yIHBlci1pbnN0YW5jZSBzdGFibGUtc3RhdGUgd2FpdGluZyBpbiB0aGUgRHVyYWJsZSBMYW1iZGEgaGFuZGxlci5cbiAqXG4gKiBPcHRpb25hbCBmaWVsZHMgbWFwIHRvIHtAbGluayBQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVn0gYW5kXG4gKiB7QGxpbmsgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVn0gb24gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICogUHJldmVudHMgYWJub3JtYWwgb3Igc3R1Y2sgdHJhbnNpdGlvbnMgZnJvbSBydW5uaW5nIHVudGlsIHRoZSBEdXJhYmxlIGV4ZWN1dGlvbiB0aW1lb3V0LlxuICpcbiAqIEBzZWUge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMudHNgIGZvciB0aGUgaGFuZGxlci1zaWRlIHJlcXVpcmVkIHNoYXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlV2FpdExpbWl0cyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIGRlc2NyaWJlL3dhaXQgbG9vcCBpdGVyYXRpb25zIHBlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50fSAoOTApXG4gICAqL1xuICByZWFkb25seSBtYXhMb29wQ291bnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBzcGVudCB3YWl0aW5nIGZvciBhIHNpbmdsZSBpbnN0YW5jZSB0byBzdGFiaWxpemUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heEVsYXBzZWRTZWNvbmRzfSAoMTgwMCwgMzAgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IG1heEVsYXBzZWRTZWNvbmRzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2Vjb25kcyB0byB3YWl0IGJldHdlZW4gZGVzY3JpYmUgaXRlcmF0aW9ucyBhZnRlciBzdGFydC9zdG9wIG9yIHdoaWxlIHRyYW5zaXRpb25pbmcuXG4gICAqXG4gICAqIExvd2VyIHZhbHVlcyBkZXRlY3Qgc3RhdGUgY2hhbmdlcyBzb29uZXI7IGhpZ2hlciB2YWx1ZXMgcmVkdWNlIERlc2NyaWJlSW5zdGFuY2VzIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kc30gKDIwKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGFtYmRhIGludm9rZSBzZXR0aW5ncyBhbmQgYm91bmRlZCBwYXJhbGxlbGlzbSBmb3IgdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uLlxuICpcbiAqIEluY3JlYXNlIHtAbGluayBtZW1vcnlTaXplfSBhbmQge0BsaW5rIG1heENvbmN1cnJlbmN5fSB3aGVuIGEgc2luZ2xlIGludm9jYXRpb24gdGFyZ2V0c1xuICogbWFueSBpbnN0YW5jZXMgb3IgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIE1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSwgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDUxMlxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEludm9rZSB0aW1lb3V0IGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uIChub3QgdGhlIGR1cmFibGUgZXhlY3V0aW9uIHRpbWVvdXQpLlxuICAgKlxuICAgKiBBV1MgTGFtYmRhJ3MgbWF4aW11bSBpbnZva2UgdGltZW91dCBpcyAxNSBtaW51dGVzLiBEdXJhYmxlIHdhaXRzIGNhbiBjb250aW51ZVxuICAgKiBiZXlvbmQgdGhpcyB2aWEge0BsaW5rIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMuZXhlY3V0aW9uVGltZW91dH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoMTUpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgcHJvY2Vzc2VkIGluIHBhcmFsbGVsIGJ5IHRoZSBkdXJhYmxlIGBtYXBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIER1cmFibGUgRXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIGZvciB0aGUgcnVubmluZyBzY2hlZHVsZXIgTGFtYmRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5pbmdTY2hlZHVsZXJEdXJhYmxlUHJvcHMge1xuICAvKipcbiAgICogTWF4aW11bSBkdXJhdGlvbiBvZiBhIGR1cmFibGUgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBJbmNyZWFzZSB3aGVuIG1hbnkgaW5zdGFuY2VzIGFyZSBwcm9jZXNzZWQgd2l0aCBsb25nIHBlci1pbnN0YW5jZSB3YWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uaG91cnMoMilcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRpbWVvdXQ/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHJldGFpbiBkdXJhYmxlIGV4ZWN1dGlvbiBoaXN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5kYXlzKDEpXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb25QZXJpb2Q/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3Mgc2V0dGluZ3MgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBmdW5jdGlvbiBsb2cgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmluZ1NjaGVkdWxlckxvZ0dyb3VwUHJvcHMge1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gcmV0YWluIGFwcGxpY2F0aW9uIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTXG4gICAqL1xuICByZWFkb25seSByZXRlbnRpb24/OiBsb2dzLlJldGVudGlvbkRheXM7XG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMge1xuICAvKiogVGFnLWJhc2VkIHRhcmdldGluZyBmb3IgRUMyIGluc3RhbmNlcyB0byBzdGFydC9zdG9wLiAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2U7XG4gIC8qKiBXaGV0aGVyIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBydWxlcyBhcmUgZW5hYmxlZC4gRGVmYXVsdHMgdG8gdHJ1ZSBpZiBvbWl0dGVkLiAqL1xuICByZWFkb25seSBlbmFibGVTY2hlZHVsaW5nPzogYm9vbGVhbjtcbiAgLyoqIFNlY3JldHMgKGUuZy4gU2xhY2spIHVzZWQgZm9yIG5vdGlmaWNhdGlvbnMuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKlxuICAgKiBQZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZm9yIHRoZSBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VXYWl0PzogUmVzb3VyY2VXYWl0TGltaXRzO1xuICAvKipcbiAgICogTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsIGFuZCBwZXItaW52b2NhdGlvbiBpbnN0YW5jZSBjb25jdXJyZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgNTEyIE1CLCAxNSBtaW51dGVzLCB7QGxpbmsgREVGQVVMVF9NQVhfQ09OQ1VSUkVOQ1l9ICgxMClcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzO1xuICAvKipcbiAgICogRHVyYWJsZSBFeGVjdXRpb24gdGltZW91dCBhbmQgaGlzdG9yeSByZXRlbnRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGV4ZWN1dGlvblRpbWVvdXQgMiBob3VycywgcmV0ZW50aW9uUGVyaW9kIDEgZGF5XG4gICAqL1xuICByZWFkb25seSBkdXJhYmxlPzogUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wcztcbiAgLyoqXG4gICAqIENsb3VkV2F0Y2ggTG9ncyByZXRlbnRpb24gYW5kIHJlbW92YWwgcG9saWN5IGZvciB0aGUgZnVuY3Rpb24gbG9nIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUywgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cD86IFJ1bm5pbmdTY2hlZHVsZXJMb2dHcm91cFByb3BzO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ2xvdWRXYXRjaCBhbGFybXMgYW5kIGxvZy1iYXNlZCBtZXRyaWNzIGZvciBmYWlsdXJlIGRldGVjdGlvbi5cbiAgICpcbiAgICogU2V0IGBlbmFibGVkOiB0cnVlYCB0byBjcmVhdGUgYWxhcm1zOyBvcHRpb25hbGx5IHBhc3MgYGFsYXJtVG9waWNgIGZvciBTTlMgbm90aWZpY2F0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzYWJsZWQgd2hlbiBvbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBmYWlsdXJlRGV0ZWN0aW9uPzogRmFpbHVyZURldGVjdGlvbkFsYXJtcztcbn1cblxuY29uc3QgREVGQVVMVF9MQU1CREFfTUVNT1JZX1NJWkUgPSA1MTI7XG5jb25zdCBERUZBVUxUX0xBTUJEQV9USU1FT1VUID0gRHVyYXRpb24ubWludXRlcygxNSk7XG5jb25zdCBERUZBVUxUX0RVUkFCTEVfRVhFQ1VUSU9OX1RJTUVPVVQgPSBEdXJhdGlvbi5ob3VycygyKTtcbmNvbnN0IERFRkFVTFRfRFVSQUJMRV9SRVRFTlRJT05fUEVSSU9EID0gRHVyYXRpb24uZGF5cygxKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB2YWx1ZWAgd2hlbiBzZXQsIG90aGVyd2lzZSBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFByb3BlcnR5IHBhdGggdXNlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIE9wdGlvbmFsIHBvc2l0aXZlIGludGVnZXIgZnJvbSBjb25zdHJ1Y3QgcHJvcHMuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gRmFsbGJhY2sgd2hlbiBgdmFsdWVgIGlzIG9taXR0ZWQuXG4gKiBAcmV0dXJucyBBIHBvc2l0aXZlIGludGVnZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdmFsdWVgIGlzIHNldCBhbmQgaXMgbm90IGEgcG9zaXRpdmUgaW50ZWdlci5cbiAqL1xuY29uc3QgcmVzb2x2ZVBvc2l0aXZlSW50ZWdlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290ICR7U3RyaW5nKHZhbHVlKX0pYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBFbnN1cmVzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0gY2FuIGJlIHVzZWQgaW4gSUFNIGBhd3M6UmVzb3VyY2VUYWdgIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHRhcmdldFJlc291cmNlIC0gVGFnIGtleSBhbmQgdmFsdWVzIHVzZWQgdG8gc2VsZWN0IEVDMiBpbnN0YW5jZXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBgdGFnS2V5YCBpcyBlbXB0eSBvciBgdGFnVmFsdWVzYCBpcyBlbXB0eS5cbiAqL1xuY29uc3QgYXNzZXJ0VGFyZ2V0UmVzb3VyY2VGb3JJYW0gPSAodGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlKTogdm9pZCA9PiB7XG4gIGlmICh0YXJnZXRSZXNvdXJjZS50YWdLZXkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXRSZXNvdXJjZS50YWdLZXkgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBpZiAodGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndGFyZ2V0UmVzb3VyY2UudGFnVmFsdWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgdmFsdWUnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJQU0gc3RhdGVtZW50IHRoYXQgYWxsb3dzIHN0YXJ0L3N0b3Agb25seSBvbiBFQzIgaW5zdGFuY2VzIGluIHRoaXMgYWNjb3VudCBhbmQgcmVnaW9uXG4gKiB3aG9zZSB0YWdzIG1hdGNoIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uXG4gKlxuICogYHRhZzpHZXRSZXNvdXJjZXNgIGFuZCBgZWMyOkRlc2NyaWJlSW5zdGFuY2VzYCBjYW5ub3QgdXNlIHJlc291cmNlLWxldmVsIEFSTnMgb3JcbiAqIHJlc291cmNlLXRhZyBjb25kaXRpb25zIChBV1MgQVBJIGxpbWl0YXRpb24pLiBTdGFydC9zdG9wIGFyZSBzY29wZWQgaW5zdGVhZCBzbyBhXG4gKiBjb21wcm9taXNlZCBmdW5jdGlvbiBjYW5ub3Qgc3RhcnQgb3Igc3RvcCB1bnRhZ2dlZCBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gQ29uc3RydWN0IHVzZWQgdG8gcmVzb2x2ZSB0aGUgc3RhY2sgQVJOIHBhcnRpdGlvbiwgcmVnaW9uLCBhbmQgYWNjb3VudC5cbiAqIEBwYXJhbSB0YXJnZXRSZXNvdXJjZSAtIFRhZyBrZXkgYW5kIHZhbHVlcyByZXF1aXJlZCBvbiB0YXJnZXQgaW5zdGFuY2VzLlxuICogQHJldHVybnMgUG9saWN5IHN0YXRlbWVudCBmb3IgYGVjMjpTdGFydEluc3RhbmNlc2AgYW5kIGBlYzI6U3RvcEluc3RhbmNlc2AuXG4gKi9cbmNvbnN0IHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50ID0gKFxuICBzY29wZTogQ29uc3RydWN0LFxuICB0YXJnZXRSZXNvdXJjZTogVGFyZ2V0UmVzb3VyY2UsXG4pOiBpYW0uUG9saWN5U3RhdGVtZW50ID0+IHtcbiAgY29uc3QgaW5zdGFuY2VBcm4gPSBTdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICByZXNvdXJjZTogJ2luc3RhbmNlJyxcbiAgICByZXNvdXJjZU5hbWU6ICcqJyxcbiAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICB9KTtcblxuICByZXR1cm4gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgIHNpZDogJ0VjMlN0YXJ0U3RvcFRhZ2dlZEluc3RhbmNlcycsXG4gICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgIGFjdGlvbnM6IFtcbiAgICAgICdlYzI6U3RhcnRJbnN0YW5jZXMnLFxuICAgICAgJ2VjMjpTdG9wSW5zdGFuY2VzJyxcbiAgICBdLFxuICAgIHJlc291cmNlczogW2luc3RhbmNlQXJuXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgW2Bhd3M6UmVzb3VyY2VUYWcvJHt0YXJnZXRSZXNvdXJjZS50YWdLZXl9YF06IHRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFByb3Zpc2lvbnMgRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHJ1bGVzIGFuZCBhIER1cmFibGUgRXhlY3V0aW9uIExhbWJkYSB0aGF0IHN0YXJ0L3N0b3AgdGFnZ2VkIEVDMiBpbnN0YW5jZXMuXG4gKlxuICogRWFjaCBzY2hlZHVsZSBpbnZva2VzIHRoZSBmdW5jdGlvbiB3aXRoIGBQYXJhbXNgIChgVGFnS2V5YCwgYFRhZ1ZhbHVlc2AsIGBNb2RlYCkuIFRoZSBmdW5jdGlvbiB1c2VzXG4gKiB0aGUgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGFuZCBFQzIgQVBJczsgU2xhY2sgbm90aWZpY2F0aW9ucyB1c2UgdGhlIHNlY3JldCBuYW1lZCBpbiB7QGxpbmsgU2VjcmV0cy5zbGFja1NlY3JldE5hbWV9LlxuICpcbiAqIFBlci1pbnN0YW5jZSB3YWl0IHRpbWVvdXRzIGFyZSBjb25maWd1cmVkIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMucmVzb3VyY2VXYWl0fVxuICogYW5kIGVuZm9yY2VkIGluIHRoZSBoYW5kbGVyIGJlZm9yZSB0aGUgRHVyYWJsZSBleGVjdXRpb24gdGltZW91dC4gTGFtYmRhIG1lbW9yeSwgaW52b2tlIHRpbWVvdXQsXG4gKiBhbmQgbWFwIGNvbmN1cnJlbmN5IGFyZSBzZXQgdmlhIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcy5ydW50aW1lfTsgRHVyYWJsZVxuICogZXhlY3V0aW9uIHRpbWVvdXQgYW5kIGhpc3RvcnkgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZHVyYWJsZX07XG4gKiBsb2cgcmV0ZW50aW9uIHZpYSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMubG9nR3JvdXB9LiBTdGFydC9zdG9wIElBTSBpcyBsaW1pdGVkXG4gKiB0byBpbnN0YW5jZXMgdGFnZ2VkIGFzIHtAbGluayBUYXJnZXRSZXNvdXJjZX0uIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZVxuICogZGV0ZWN0aW9uIGlzIGF2YWlsYWJsZSB2aWEge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlclByb3BzLmZhaWx1cmVEZXRlY3Rpb259LlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqIEZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgd2hlbiB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHMuZmFpbHVyZURldGVjdGlvbn0gaXMgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBSdW5uaW5nU2NoZWR1bGVyRmFpbHVyZURldGVjdGlvbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBJQU0sIGxvZ2dpbmcsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcywgdHdvIGNyb24gc2NoZWR1bGVzIChzdGFydC9zdG9wKSxcbiAgICogYW5kIHRoZSBidW5kbGVkIHJ1bm5pbmctc2NoZWR1bGVyIExhbWJkYSAoTm9kZS5qcywgRHVyYWJsZSBFeGVjdXRpb24pLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBQYXJlbnQgY29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRhcmdldCB0YWdzLCBzY2hlZHVsZXMsIFNsYWNrIHNlY3JldCwgc2NoZWR1bGUgZW5hYmxlIGZsYWcsIG9wdGlvbmFsXG4gICAqICAge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyUnVudGltZVByb3BzfSxcbiAgICogICB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wc30sIHtAbGluayBSdW5uaW5nU2NoZWR1bGVyTG9nR3JvdXBQcm9wc30sXG4gICAqICAgYW5kIG9wdGlvbmFsIHtAbGluayBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zfS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBhc3NlcnRUYXJnZXRSZXNvdXJjZUZvcklhbShwcm9wcy50YXJnZXRSZXNvdXJjZSk7XG5cbiAgICBjb25zdCBzbGFja1NlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKHRoaXMsICdTbGFja1NlY3JldCcsIHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lKTtcblxuICAgIGNvbnN0IG1heExvb3BDb3VudCA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncmVzb3VyY2VXYWl0Lm1heExvb3BDb3VudCcsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heExvb3BDb3VudCxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50LFxuICAgICk7XG4gICAgY29uc3QgbWF4RWxhcHNlZFNlY29uZHMgPSByZXNvbHZlUG9zaXRpdmVJbnRlZ2VyKFxuICAgICAgJ3Jlc291cmNlV2FpdC5tYXhFbGFwc2VkU2Vjb25kcycsXG4gICAgICBwcm9wcy5yZXNvdXJjZVdhaXQ/Lm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzID0gcmVzb2x2ZVBvc2l0aXZlSW50ZWdlcihcbiAgICAgICdyZXNvdXJjZVdhaXQuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMnLFxuICAgICAgcHJvcHMucmVzb3VyY2VXYWl0Py5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kcyxcbiAgICAgIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gICAgKTtcbiAgICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tYXhDb25jdXJyZW5jeScsXG4gICAgICBwcm9wcy5ydW50aW1lPy5tYXhDb25jdXJyZW5jeSxcbiAgICAgIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZLFxuICAgICk7XG4gICAgY29uc3QgbWVtb3J5U2l6ZSA9IHJlc29sdmVQb3NpdGl2ZUludGVnZXIoXG4gICAgICAncnVudGltZS5tZW1vcnlTaXplJyxcbiAgICAgIHByb3BzLnJ1bnRpbWU/Lm1lbW9yeVNpemUsXG4gICAgICBERUZBVUxUX0xBTUJEQV9NRU1PUllfU0laRSxcbiAgICApO1xuXG4gICAgLy8gRHVyYWJsZSBGdW5jdGlvbnMtYmFzZWQgUnVubmluZyBTY2hlZHVsZXIgKHByZXZpb3VzIFN0ZXAgRnVuY3Rpb25zIGxvZ2ljIGltcGxlbWVudGVkIGluIExhbWJkYSkuXG4gICAgLy8gRHVyYWJsZSBFeGVjdXRpb24gcmVxdWlyZXMgTm9kZS5qcyAyMisuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Mb2dHcm91cCcsIHtcbiAgICAgIHJldGVudGlvbjogcHJvcHMubG9nR3JvdXA/LnJldGVudGlvbiA/PyBsb2dzLlJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMubG9nR3JvdXA/LnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24gPSBuZXcgUnVubmluZ1NjaGVkdWxlckZ1bmN0aW9uKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb24nLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1N0YXJ0cyBhbmQgc3RvcHMgdGFnZ2VkIEVDMiBpbnN0YW5jZXMgb24gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyIHNjaGVkdWxlcy4nLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnJ1bnRpbWU/LnRpbWVvdXQgPz8gREVGQVVMVF9MQU1CREFfVElNRU9VVCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICByZXRyeUF0dGVtcHRzOiAyLFxuICAgICAgZHVyYWJsZUNvbmZpZzoge1xuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBwcm9wcy5kdXJhYmxlPy5leGVjdXRpb25UaW1lb3V0ID8/IERFRkFVTFRfRFVSQUJMRV9FWEVDVVRJT05fVElNRU9VVCxcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBwcm9wcy5kdXJhYmxlPy5yZXRlbnRpb25QZXJpb2QgPz8gREVGQVVMVF9EVVJBQkxFX1JFVEVOVElPTl9QRVJJT0QsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfU0VDUkVUX05BTUU6IHByb3BzLnNlY3JldHMuc2xhY2tTZWNyZXROYW1lLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlZdOiBTdHJpbmcobWF4TG9vcENvdW50KSxcbiAgICAgICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBTdHJpbmcobWF4RWxhcHNlZFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlZdOiBTdHJpbmcoc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMpLFxuICAgICAgICBbUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVl06IFN0cmluZyhtYXhDb25jdXJyZW5jeSksXG4gICAgICB9LFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICAvLyBSZXF1aXJlZCBieSBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyIChleHRlbnNpb24gSFRUUCBBUEkgb24gbG9jYWxob3N0OyBwb3J0IGZyb20gUEFSQU1FVEVSU19TRUNSRVRTX0VYVEVOU0lPTl9IVFRQX1BPUlQpLlxuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdSdW5uaW5nU2NoZWR1bGVyRnVuY3Rpb25Sb2xlJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0FsbG93cyB0aGUgcnVubmluZyBzY2hlZHVsZXIgdG8gZGVzY3JpYmUgaW5zdGFuY2VzIGFuZCBzdGFydC9zdG9wIHRhZ2dlZCBFQzIgaW5zdGFuY2VzLCBhbmQgdG8gcmVhZCBTbGFjayBzZWNyZXRzLicsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdsYW1iZGEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnKSxcbiAgICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0R1cmFibGVFeGVjdXRpb25Sb2xlUG9saWN5JyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIGxvZ0dyb3VwOiBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkxvZ0dyb3VwLFxuICAgICAgbG9nZ2luZ0Zvcm1hdDogbGFtYmRhLkxvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgIHN5c3RlbUxvZ0xldmVsVjI6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbFYyOiBsYW1iZGEuQXBwbGljYXRpb25Mb2dMZXZlbC5JTkZPLFxuICAgIH0pO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdHZXRSZXNvdXJjZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAndGFnOkdldFJlc291cmNlcycsXG4gICAgICBdLFxuICAgICAgLy8gUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgIH0pKTtcbiAgICBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnRWMyRGVzY3JpYmVJbnN0YW5jZXMnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnZWMyOkRlc2NyaWJlSW5zdGFuY2VzJyxcbiAgICAgIF0sXG4gICAgICAvLyBEZXNjcmliZSogQVBJcyBkbyBub3Qgc3VwcG9ydCByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucyBvciByZXNvdXJjZS10YWcgY29uZGl0aW9ucy5cbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuICAgIHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIHRhZ2dlZEluc3RhbmNlU3RhcnRTdG9wU3RhdGVtZW50KHRoaXMsIHByb3BzLnRhcmdldFJlc291cmNlKSxcbiAgICApO1xuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHRoZSBTbGFjayBzZWNyZXRcbiAgICBzbGFja1NlY3JldC5ncmFudFJlYWQocnVubmluZ1NjaGVkdWxlRnVuY3Rpb24pO1xuXG4gICAgdGhpcy5mYWlsdXJlRGV0ZWN0aW9uID0gY3JlYXRlUnVubmluZ1NjaGVkdWxlckZhaWx1cmVEZXRlY3Rpb24odGhpcywgJ0ZhaWx1cmVEZXRlY3Rpb24nLCB7XG4gICAgICBmYWlsdXJlRGV0ZWN0aW9uOiBwcm9wcy5mYWlsdXJlRGV0ZWN0aW9uLFxuICAgICAgcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24sXG4gICAgICBsb2dHcm91cDogcnVubmluZ1NjaGVkdWxlRnVuY3Rpb25Mb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1nZXR0aW5nLXN0YXJ0ZWQtaWFjLmh0bWxcbiAgICBjb25zdCBydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzID0gcnVubmluZ1NjaGVkdWxlRnVuY3Rpb24uYWRkQWxpYXMoJ2xpdmUnKTtcblxuICAgIC8vIFdoZXRoZXIgc2NoZWR1bGVzIGFyZSBlbmFibGVkIChkZWZhdWx0IHRydWUgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWQpLlxuICAgIGNvbnN0IHNjaGVkdWxlRW5hYmxlZDogYm9vbGVhbiA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuZW5hYmxlU2NoZWR1bGluZyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIC8vIER1cmFibGUgRnVuY3Rpb25zOiBMYW1iZGEgcGVyZm9ybXMgdGFnIGxvb2t1cCBhbmQgaW5zdGFuY2Ugc3RhcnQvc3RvcCBpbiBhIHNpbmdsZSBydW4uXG4gICAgbmV3IHNjaGVkdWxlci5TY2hlZHVsZSh0aGlzLCAnUnVubmluZ1N0YXJ0U2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RhcnQgc2NoZWR1bGUnLFxuICAgICAgZW5hYmxlZDogc2NoZWR1bGVFbmFibGVkLFxuICAgICAgc2NoZWR1bGU6IHNjaGVkdWxlci5TY2hlZHVsZUV4cHJlc3Npb24uY3Jvbih7XG4gICAgICAgIG1pbnV0ZTogcHJvcHMuc3RhcnRTY2hlZHVsZT8ubWludXRlID8/ICc1MCcsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LmhvdXIgPz8gJzcnLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdGFydFNjaGVkdWxlPy53ZWVrID8/ICdNT04tRlJJJyxcbiAgICAgICAgdGltZVpvbmU6IHByb3BzLnN0YXJ0U2NoZWR1bGU/LnRpbWV6b25lID8/IFRpbWVab25lLkVUQ19VVEMsXG4gICAgICB9KSxcbiAgICAgIHRhcmdldDogbmV3IHRhcmdldHMuTGFtYmRhSW52b2tlKHJ1bm5pbmdTY2hlZHVsZUZ1bmN0aW9uQWxpYXMsIHtcbiAgICAgICAgaW5wdXQ6IHNjaGVkdWxlci5TY2hlZHVsZVRhcmdldElucHV0LmZyb21PYmplY3Qoe1xuICAgICAgICAgIFBhcmFtczoge1xuICAgICAgICAgICAgVGFnS2V5OiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdLZXksXG4gICAgICAgICAgICBUYWdWYWx1ZXM6IHByb3BzLnRhcmdldFJlc291cmNlLnRhZ1ZhbHVlcyxcbiAgICAgICAgICAgIE1vZGU6ICdTdGFydCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIG5ldyBzY2hlZHVsZXIuU2NoZWR1bGUodGhpcywgJ1J1bm5pbmdTdG9wU2NoZWR1bGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3J1bm5pbmcgc3RvcCBzY2hlZHVsZScsXG4gICAgICBlbmFibGVkOiBzY2hlZHVsZUVuYWJsZWQsXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGVyLlNjaGVkdWxlRXhwcmVzc2lvbi5jcm9uKHtcbiAgICAgICAgbWludXRlOiBwcm9wcy5zdG9wU2NoZWR1bGU/Lm1pbnV0ZSA/PyAnNScsXG4gICAgICAgIGhvdXI6IHByb3BzLnN0b3BTY2hlZHVsZT8uaG91ciA/PyAnMTknLFxuICAgICAgICB3ZWVrRGF5OiBwcm9wcy5zdG9wU2NoZWR1bGU/LndlZWsgPz8gJ01PTi1GUkknLFxuICAgICAgICB0aW1lWm9uZTogcHJvcHMuc3RvcFNjaGVkdWxlPy50aW1lem9uZSA/PyBUaW1lWm9uZS5FVENfVVRDLFxuICAgICAgfSksXG4gICAgICB0YXJnZXQ6IG5ldyB0YXJnZXRzLkxhbWJkYUludm9rZShydW5uaW5nU2NoZWR1bGVGdW5jdGlvbkFsaWFzLCB7XG4gICAgICAgIGlucHV0OiBzY2hlZHVsZXIuU2NoZWR1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICBQYXJhbXM6IHtcbiAgICAgICAgICAgIFRhZ0tleTogcHJvcHMudGFyZ2V0UmVzb3VyY2UudGFnS2V5LFxuICAgICAgICAgICAgVGFnVmFsdWVzOiBwcm9wcy50YXJnZXRSZXNvdXJjZS50YWdWYWx1ZXMsXG4gICAgICAgICAgICBNb2RlOiAnU3RvcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -88,7 +88,7 @@ const createLogSumAlarm = (scope, id, props) => {
|
|
|
88
88
|
* Custom metrics are published under the `EC2InstanceRunningScheduler` namespace.
|
|
89
89
|
*/
|
|
90
90
|
class RunningSchedulerFailureDetection extends constructs_1.Construct {
|
|
91
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.RunningSchedulerFailureDetection", version: "0.
|
|
91
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.RunningSchedulerFailureDetection", version: "0.4.1" };
|
|
92
92
|
/** SNS topic used for alarm actions, when configured. */
|
|
93
93
|
alarmTopic;
|
|
94
94
|
/** Fires when the Lambda `Errors` metric is non-zero. */
|
|
@@ -9,9 +9,13 @@ export interface ResourceWaitLimits {
|
|
|
9
9
|
readonly maxLoopCount: number;
|
|
10
10
|
/** Maximum wall-clock seconds from the first wait iteration before failing. */
|
|
11
11
|
readonly maxElapsedSeconds: number;
|
|
12
|
+
/** Seconds between describe iterations after start/stop or while transitioning. */
|
|
13
|
+
readonly statusChangeWaitSeconds: number;
|
|
12
14
|
}
|
|
13
15
|
/** Default wait limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
|
|
14
16
|
export declare const DEFAULT_RESOURCE_WAIT_LIMITS: ResourceWaitLimits;
|
|
17
|
+
/** Default bounded parallelism for durable `map` over target instances. */
|
|
18
|
+
export declare const DEFAULT_MAX_CONCURRENCY = 10;
|
|
15
19
|
/**
|
|
16
20
|
* Why per-instance waiting stopped with an error.
|
|
17
21
|
*
|
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* Pure predicates for the EC2 running scheduler Lambda (no AWS SDK).
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.formatResourceWaitFailure = exports.getWaitAbortReason = exports.isTransitioningState = exports.isDesiredStableState = exports.DEFAULT_RESOURCE_WAIT_LIMITS = void 0;
|
|
6
|
+
exports.formatResourceWaitFailure = exports.getWaitAbortReason = exports.isTransitioningState = exports.isDesiredStableState = exports.DEFAULT_MAX_CONCURRENCY = exports.DEFAULT_RESOURCE_WAIT_LIMITS = void 0;
|
|
7
7
|
/** Default wait limits (90 loops × 20s wait ≈ 30 minutes of waits; 30 minutes elapsed). */
|
|
8
8
|
exports.DEFAULT_RESOURCE_WAIT_LIMITS = {
|
|
9
9
|
maxLoopCount: 90,
|
|
10
10
|
maxElapsedSeconds: 1800,
|
|
11
|
+
statusChangeWaitSeconds: 20,
|
|
11
12
|
};
|
|
13
|
+
/** Default bounded parallelism for durable `map` over target instances. */
|
|
14
|
+
exports.DEFAULT_MAX_CONCURRENCY = 10;
|
|
12
15
|
/**
|
|
13
16
|
* Whether the instance is already in the goal state for the scheduler mode (no start/stop needed).
|
|
14
17
|
*
|
|
@@ -66,4 +69,4 @@ const formatResourceWaitFailure = (reason, context) => {
|
|
|
66
69
|
return `ResourceWaitFailed:UnexpectedInstanceState: ${common}`;
|
|
67
70
|
};
|
|
68
71
|
exports.formatResourceWaitFailure = formatResourceWaitFailure;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBZUgsMkZBQTJGO0FBQzlFLFFBQUEsNEJBQTRCLEdBQXVCO0lBQzlELFlBQVksRUFBRSxFQUFFO0lBQ2hCLGlCQUFpQixFQUFFLElBQUk7SUFDdkIsdUJBQXVCLEVBQUUsRUFBRTtDQUM1QixDQUFDO0FBRUYsMkVBQTJFO0FBQzlELFFBQUEsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBYzFDOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxZQUFZLEtBQUssU0FBUyxDQUFDLENBQUM7QUFEekYsUUFBQSxvQkFBb0Isd0JBQ3FFO0FBRXRHOzs7Ozs7R0FNRztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFFLFlBQW9CLEVBQVcsRUFBRSxDQUNoRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksWUFBWSxLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxJQUFJLFlBQVksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRjVFLFFBQUEsb0JBQW9CLHdCQUV3RDtBQUV6Rjs7Ozs7Ozs7R0FRRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsS0FBYSxFQUNiLE1BQTBCLEVBQ3FDLEVBQUU7SUFDakUsSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNwRCxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFkVyxRQUFBLGtCQUFrQixzQkFjN0I7QUFnQkY7Ozs7OztHQU1HO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxNQUFpQyxFQUNqQyxPQUFtQyxFQUMzQixFQUFFO0lBQ1YsTUFBTSxNQUFNLEdBQ1YsY0FBYyxPQUFPLENBQUMsVUFBVSxTQUFTLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixPQUFPLENBQUMsWUFBWSxjQUFjLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM5SCxJQUFJLE1BQU0sS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sNENBQTRDLE1BQU0saUJBQWlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7UUFDeEMsT0FBTyw4Q0FBOEMsTUFBTSxzQkFBc0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ3RILENBQUM7SUFDRCxPQUFPLCtDQUErQyxNQUFNLEVBQUUsQ0FBQztBQUNqRSxDQUFDLENBQUM7QUFiVyxRQUFBLHlCQUF5Qiw2QkFhcEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1cmUgcHJlZGljYXRlcyBmb3IgdGhlIEVDMiBydW5uaW5nIHNjaGVkdWxlciBMYW1iZGEgKG5vIEFXUyBTREspLlxuICovXG5cbi8qKiBWYWx1ZSBvZiBgUGFyYW1zLk1vZGVgIGZyb20gdGhlIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBwYXlsb2FkLiAqL1xuZXhwb3J0IHR5cGUgUnVubmluZ1NjaGVkdWxlck1vZGUgPSAnU3RhcnQnIHwgJ1N0b3AnO1xuXG4vKiogVXBwZXIgYm91bmRzIGZvciBwZXItaW5zdGFuY2Ugc3RhYmxlLXN0YXRlIHdhaXRpbmcgaW4gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIExhbWJkYSBoYW5kbGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVdhaXRMaW1pdHMge1xuICAvKiogTWF4aW11bSBkZXNjcmliZS93YWl0IGxvb3AgaXRlcmF0aW9ucyBiZWZvcmUgZmFpbGluZyAoZWFjaCBsb29wIG1heSBpbmNsdWRlIGEgZHVyYWJsZSB3YWl0KS4gKi9cbiAgcmVhZG9ubHkgbWF4TG9vcENvdW50OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHdhbGwtY2xvY2sgc2Vjb25kcyBmcm9tIHRoZSBmaXJzdCB3YWl0IGl0ZXJhdGlvbiBiZWZvcmUgZmFpbGluZy4gKi9cbiAgcmVhZG9ubHkgbWF4RWxhcHNlZFNlY29uZHM6IG51bWJlcjtcbiAgLyoqIFNlY29uZHMgYmV0d2VlbiBkZXNjcmliZSBpdGVyYXRpb25zIGFmdGVyIHN0YXJ0L3N0b3Agb3Igd2hpbGUgdHJhbnNpdGlvbmluZy4gKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqIERlZmF1bHQgd2FpdCBsaW1pdHMgKDkwIGxvb3BzIMOXIDIwcyB3YWl0IOKJiCAzMCBtaW51dGVzIG9mIHdhaXRzOyAzMCBtaW51dGVzIGVsYXBzZWQpLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFM6IFJlc291cmNlV2FpdExpbWl0cyA9IHtcbiAgbWF4TG9vcENvdW50OiA5MCxcbiAgbWF4RWxhcHNlZFNlY29uZHM6IDE4MDAsXG4gIHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzOiAyMCxcbn07XG5cbi8qKiBEZWZhdWx0IGJvdW5kZWQgcGFyYWxsZWxpc20gZm9yIGR1cmFibGUgYG1hcGAgb3ZlciB0YXJnZXQgaW5zdGFuY2VzLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZID0gMTA7XG5cbi8qKlxuICogV2h5IHBlci1pbnN0YW5jZSB3YWl0aW5nIHN0b3BwZWQgd2l0aCBhbiBlcnJvci5cbiAqXG4gKiAtIGBNYXhMb29wQ291bnRFeGNlZWRlZGAg4oCTIHtAbGluayBnZXRXYWl0QWJvcnRSZWFzb259IGhpdCB7QGxpbmsgUmVzb3VyY2VXYWl0TGltaXRzLm1heExvb3BDb3VudH0uXG4gKiAtIGBNYXhFbGFwc2VkVGltZUV4Y2VlZGVkYCDigJMgZWxhcHNlZCB3YWxsLWNsb2NrIHRpbWUgZXhjZWVkZWQge0BsaW5rIFJlc291cmNlV2FpdExpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc30uXG4gKiAtIGBVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZWAg4oCTIHN0YXRlIGlzIG5laXRoZXIgc3RhYmxlLCBhY3Rpb25hYmxlLCBub3IgYSBrbm93biB0cmFuc2l0aW9uLlxuICovXG5leHBvcnQgdHlwZSBSZXNvdXJjZVdhaXRGYWlsdXJlUmVhc29uID1cbiAgfCAnTWF4TG9vcENvdW50RXhjZWVkZWQnXG4gIHwgJ01heEVsYXBzZWRUaW1lRXhjZWVkZWQnXG4gIHwgJ1VuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlJztcblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBhbHJlYWR5IGluIHRoZSBnb2FsIHN0YXRlIGZvciB0aGUgc2NoZWR1bGVyIG1vZGUgKG5vIHN0YXJ0L3N0b3AgbmVlZGVkKS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgZXhwZWN0cyBgcnVubmluZ2A7IGBTdG9wYCBleHBlY3RzIGBzdG9wcGVkYC5cbiAqIEBwYXJhbSBjdXJyZW50U3RhdGUgLSBJbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AgKGUuZy4gYHJ1bm5pbmdgLCBgcGVuZGluZ2ApLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIGluc3RhbmNlIG1hdGNoZXMgdGhlIHRhcmdldCBzdGF0ZSBmb3IgYG1vZGVgLlxuICovXG5leHBvcnQgY29uc3QgaXNEZXNpcmVkU3RhYmxlU3RhdGUgPSAobW9kZTogUnVubmluZ1NjaGVkdWxlck1vZGUsIGN1cnJlbnRTdGF0ZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAobW9kZSA9PT0gJ1N0YXJ0JyAmJiBjdXJyZW50U3RhdGUgPT09ICdydW5uaW5nJykgfHwgKG1vZGUgPT09ICdTdG9wJyAmJiBjdXJyZW50U3RhdGUgPT09ICdzdG9wcGVkJyk7XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5zdGFuY2UgaXMgaW4gYSBrbm93biB0cmFuc2l0aW9uYWwgc3RhdGUgZm9yIHRoZSBzY2hlZHVsZXIgbW9kZS5cbiAqXG4gKiBAcGFyYW0gbW9kZSAtIGBTdGFydGAgb3IgYFN0b3BgLlxuICogQHBhcmFtIGN1cnJlbnRTdGF0ZSAtIEluc3RhbmNlIHN0YXRlIGZyb20gYERlc2NyaWJlSW5zdGFuY2VzYC5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBtb3ZpbmcgdG93YXJkIHRoZSBnb2FsIHN0YXRlIGZvciBgbW9kZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1RyYW5zaXRpb25pbmdTdGF0ZSA9IChtb2RlOiBSdW5uaW5nU2NoZWR1bGVyTW9kZSwgY3VycmVudFN0YXRlOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIChtb2RlID09PSAnU3RhcnQnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3BlbmRpbmcnKSB8fFxuICAobW9kZSA9PT0gJ1N0b3AnICYmIChjdXJyZW50U3RhdGUgPT09ICdzdG9wcGluZycgfHwgY3VycmVudFN0YXRlID09PSAnc2h1dHRpbmctZG93bicpKTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgd2FpdCBhYm9ydCByZWFzb24gd2hlbiBsb29wIGNvdW50IG9yIGVsYXBzZWQgdGltZSBleGNlZWRzIGNvbmZpZ3VyZWQgbGltaXRzLlxuICpcbiAqIEBwYXJhbSBsb29wQ291bnQgLSBaZXJvLWJhc2VkIGl0ZXJhdGlvbiBjb3VudCBmb3IgdGhlIGN1cnJlbnQgd2FpdCBsb29wLlxuICogQHBhcmFtIHN0YXJ0ZWRBdE1zIC0gRXBvY2ggbWlsbGlzZWNvbmRzIHJlY29yZGVkIGF0IHRoZSBzdGFydCBvZiB3YWl0aW5nIChkdXJhYmxlIHN0ZXApLlxuICogQHBhcmFtIG5vd01zIC0gQ3VycmVudCBlcG9jaCBtaWxsaXNlY29uZHMgKGZyb20gYSBkdXJhYmxlIHN0ZXAgd2hlbiByZXBsYXkgbWF0dGVycykuXG4gKiBAcGFyYW0gbGltaXRzIC0gQ29uZmlndXJlZCB7QGxpbmsgUmVzb3VyY2VXYWl0TGltaXRzfS5cbiAqIEByZXR1cm5zIEFib3J0IHJlYXNvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiB3YWl0aW5nIG1heSBjb250aW51ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFdhaXRBYm9ydFJlYXNvbiA9IChcbiAgbG9vcENvdW50OiBudW1iZXIsXG4gIHN0YXJ0ZWRBdE1zOiBudW1iZXIsXG4gIG5vd01zOiBudW1iZXIsXG4gIGxpbWl0czogUmVzb3VyY2VXYWl0TGltaXRzLFxuKTogJ01heExvb3BDb3VudEV4Y2VlZGVkJyB8ICdNYXhFbGFwc2VkVGltZUV4Y2VlZGVkJyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChsb29wQ291bnQgPj0gbGltaXRzLm1heExvb3BDb3VudCkge1xuICAgIHJldHVybiAnTWF4TG9vcENvdW50RXhjZWVkZWQnO1xuICB9XG4gIGNvbnN0IGVsYXBzZWRTZWNvbmRzID0gKG5vd01zIC0gc3RhcnRlZEF0TXMpIC8gMTAwMDtcbiAgaWYgKGVsYXBzZWRTZWNvbmRzID49IGxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kcykge1xuICAgIHJldHVybiAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCc7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBJbnB1dHMgZm9yIHtAbGluayBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VXYWl0RmFpbHVyZUNvbnRleHQge1xuICAvKiogRUMyIGluc3RhbmNlIGlkIHBhcnNlZCBmcm9tIHRoZSB0YXJnZXQgQVJOLiAqL1xuICByZWFkb25seSBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKiBTY2hlZHVsZXIgbW9kZSBmcm9tIHRoZSBpbnZvY2F0aW9uIHBheWxvYWQuICovXG4gIHJlYWRvbmx5IG1vZGU6IFJ1bm5pbmdTY2hlZHVsZXJNb2RlO1xuICAvKiogTGFzdCBvYnNlcnZlZCBpbnN0YW5jZSBzdGF0ZSBmcm9tIGBEZXNjcmliZUluc3RhbmNlc2AuICovXG4gIHJlYWRvbmx5IGN1cnJlbnRTdGF0ZTogc3RyaW5nO1xuICAvKiogWmVyby1iYXNlZCB3YWl0IGxvb3AgaXRlcmF0aW9uIHdoZW4gdGhlIGZhaWx1cmUgb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IGxvb3BDb3VudDogbnVtYmVyO1xuICAvKiogQWN0aXZlIHdhaXQgbGltaXRzIGZvciBsaW1pdC1yZWxhdGVkIGZhaWx1cmUgbWVzc2FnZXMuICovXG4gIHJlYWRvbmx5IGxpbWl0czogUmVzb3VyY2VXYWl0TGltaXRzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWJsZSwgZ3JlcC1mcmllbmRseSBlcnJvciBtZXNzYWdlIGZvciB3YWl0IGZhaWx1cmVzLlxuICpcbiAqIEBwYXJhbSByZWFzb24gLSBGYWlsdXJlIGNhdGVnb3J5LlxuICogQHBhcmFtIGNvbnRleHQgLSBJbnN0YW5jZSBpZCwgbW9kZSwgc3RhdGUsIGxvb3AgY291bnQsIGFuZCBsaW1pdHMuXG4gKiBAcmV0dXJucyBNZXNzYWdlIHByZWZpeGVkIHdpdGggYFJlc291cmNlV2FpdEZhaWxlZDpgIChlLmcuIGBSZXNvdXJjZVdhaXRGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6IC4uLmApLlxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZSA9IChcbiAgcmVhc29uOiBSZXNvdXJjZVdhaXRGYWlsdXJlUmVhc29uLFxuICBjb250ZXh0OiBSZXNvdXJjZVdhaXRGYWlsdXJlQ29udGV4dCxcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNvbW1vbiA9XG4gICAgYGlkZW50aWZpZXI9JHtjb250ZXh0LmlkZW50aWZpZXJ9IG1vZGU9JHtjb250ZXh0Lm1vZGV9IGN1cnJlbnRTdGF0ZT0ke2NvbnRleHQuY3VycmVudFN0YXRlfSBsb29wQ291bnQ9JHtjb250ZXh0Lmxvb3BDb3VudH1gO1xuICBpZiAocmVhc29uID09PSAnTWF4TG9vcENvdW50RXhjZWVkZWQnKSB7XG4gICAgcmV0dXJuIGBSZXNvdXJjZVdhaXRGYWlsZWQ6TWF4TG9vcENvdW50RXhjZWVkZWQ6ICR7Y29tbW9ufSBtYXhMb29wQ291bnQ9JHtjb250ZXh0LmxpbWl0cy5tYXhMb29wQ291bnR9YDtcbiAgfVxuICBpZiAocmVhc29uID09PSAnTWF4RWxhcHNlZFRpbWVFeGNlZWRlZCcpIHtcbiAgICByZXR1cm4gYFJlc291cmNlV2FpdEZhaWxlZDpNYXhFbGFwc2VkVGltZUV4Y2VlZGVkOiAke2NvbW1vbn0gbWF4RWxhcHNlZFNlY29uZHM9JHtjb250ZXh0LmxpbWl0cy5tYXhFbGFwc2VkU2Vjb25kc31gO1xuICB9XG4gIHJldHVybiBgUmVzb3VyY2VXYWl0RmFpbGVkOlVuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlOiAke2NvbW1vbn1gO1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Environment variable names for
|
|
2
|
+
* Environment variable names for running scheduler handler configuration.
|
|
3
3
|
*
|
|
4
4
|
* Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
|
|
5
5
|
*/
|
|
@@ -15,3 +15,15 @@ export declare const PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = "PROCESS_RESOURCE_MAX
|
|
|
15
15
|
* @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
|
|
16
16
|
*/
|
|
17
17
|
export declare const PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = "PROCESS_RESOURCE_MAX_ELAPSED_SECONDS";
|
|
18
|
+
/**
|
|
19
|
+
* Lambda environment variable name for seconds between describe/wait iterations.
|
|
20
|
+
*
|
|
21
|
+
* @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
|
|
22
|
+
*/
|
|
23
|
+
export declare const PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = "PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS";
|
|
24
|
+
/**
|
|
25
|
+
* Lambda environment variable name for durable `map` bounded concurrency.
|
|
26
|
+
*
|
|
27
|
+
* @see {@link parseMaxConcurrencyFromEnv} in `running-scheduler-wait-env.ts`
|
|
28
|
+
*/
|
|
29
|
+
export declare const PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = "PROCESS_RESOURCES_MAX_CONCURRENCY";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Environment variable names for
|
|
3
|
+
* Environment variable names for running scheduler handler configuration.
|
|
4
4
|
*
|
|
5
5
|
* Values are set by {@link EC2InstanceRunningScheduler} and read at handler cold start.
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = void 0;
|
|
8
|
+
exports.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = exports.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = void 0;
|
|
9
9
|
/**
|
|
10
10
|
* Lambda environment variable name for max wait loop count.
|
|
11
11
|
*
|
|
@@ -18,4 +18,16 @@ exports.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV = 'PROCESS_RESOURCE_MAX_LOOP_COUNT';
|
|
|
18
18
|
* @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
|
|
19
19
|
*/
|
|
20
20
|
exports.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV = 'PROCESS_RESOURCE_MAX_ELAPSED_SECONDS';
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Lambda environment variable name for seconds between describe/wait iterations.
|
|
23
|
+
*
|
|
24
|
+
* @see {@link parseResourceWaitLimitsFromEnv} in `running-scheduler-wait-env.ts`
|
|
25
|
+
*/
|
|
26
|
+
exports.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV = 'PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS';
|
|
27
|
+
/**
|
|
28
|
+
* Lambda environment variable name for durable `map` bounded concurrency.
|
|
29
|
+
*
|
|
30
|
+
* @see {@link parseMaxConcurrencyFromEnv} in `running-scheduler-wait-env.ts`
|
|
31
|
+
*/
|
|
32
|
+
exports.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV = 'PROCESS_RESOURCES_MAX_CONCURRENCY';
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVIOzs7O0dBSUc7QUFDVSxRQUFBLG1DQUFtQyxHQUFHLGlDQUFpQyxDQUFDO0FBRXJGOzs7O0dBSUc7QUFDVSxRQUFBLHdDQUF3QyxHQUFHLHNDQUFzQyxDQUFDO0FBRS9GOzs7O0dBSUc7QUFDVSxRQUFBLCtDQUErQyxHQUFHLDZDQUE2QyxDQUFDO0FBRTdHOzs7O0dBSUc7QUFDVSxRQUFBLHFDQUFxQyxHQUFHLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcyBmb3IgcnVubmluZyBzY2hlZHVsZXIgaGFuZGxlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIFZhbHVlcyBhcmUgc2V0IGJ5IHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJ9IGFuZCByZWFkIGF0IGhhbmRsZXIgY29sZCBzdGFydC5cbiAqL1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBtYXggd2FpdCBsb29wIGNvdW50LlxuICpcbiAqIEBzZWUge0BsaW5rIHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudn0gaW4gYHJ1bm5pbmctc2NoZWR1bGVyLXdhaXQtZW52LnRzYFxuICovXG5leHBvcnQgY29uc3QgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVCc7XG5cbi8qKlxuICogTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUgZm9yIG1heCB3YWl0IGVsYXBzZWQgc2Vjb25kcy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTJztcblxuLyoqXG4gKiBMYW1iZGEgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSBmb3Igc2Vjb25kcyBiZXR3ZWVuIGRlc2NyaWJlL3dhaXQgaXRlcmF0aW9ucy5cbiAqXG4gKiBAc2VlIHtAbGluayBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VfU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFNfRU5WID0gJ1BST0NFU1NfUkVTT1VSQ0VfU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMnO1xuXG4vKipcbiAqIExhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIGZvciBkdXJhYmxlIGBtYXBgIGJvdW5kZWQgY29uY3VycmVuY3kuXG4gKlxuICogQHNlZSB7QGxpbmsgcGFyc2VNYXhDb25jdXJyZW5jeUZyb21FbnZ9IGluIGBydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudi50c2BcbiAqL1xuZXhwb3J0IGNvbnN0IFBST0NFU1NfUkVTT1VSQ0VTX01BWF9DT05DVVJSRU5DWV9FTlYgPSAnUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZJztcbiJdfQ==
|
|
@@ -3,7 +3,13 @@ import { type ResourceWaitLimits } from './running-scheduler-predicates';
|
|
|
3
3
|
* Reads per-instance wait limits from Lambda environment variables set by the CDK construct.
|
|
4
4
|
*
|
|
5
5
|
* @returns Parsed limits, using {@link DEFAULT_RESOURCE_WAIT_LIMITS} when variables are unset.
|
|
6
|
-
* @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a
|
|
7
|
-
* @throws {Error} When a set variable is zero or negative.
|
|
6
|
+
* @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
|
|
8
7
|
*/
|
|
9
8
|
export declare const parseResourceWaitLimitsFromEnv: () => ResourceWaitLimits;
|
|
9
|
+
/**
|
|
10
|
+
* Reads durable `map` bounded concurrency from the Lambda environment.
|
|
11
|
+
*
|
|
12
|
+
* @returns Parsed concurrency, using {@link DEFAULT_MAX_CONCURRENCY} when unset.
|
|
13
|
+
* @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
|
|
14
|
+
*/
|
|
15
|
+
export declare const parseMaxConcurrencyFromEnv: () => number;
|