@cdklabs/multi-az-observability 0.0.1-alpha.33 → 0.0.1-alpha.35
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 +42 -27
- package/API.md +44 -28
- package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +6 -5
- package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +21 -9
- package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +5 -4
- package/lib/alarmsandrules/OperationAlarmsAndRules.js +11 -11
- package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +19 -13
- package/lib/alarmsandrules/ServiceAlarmsAndRules.js +30 -154
- package/lib/azmapper/AvailabilityZoneMapper.js +1 -1
- package/lib/basic_observability/BasicServiceMultiAZObservability.js +1 -1
- package/lib/canaries/src/canary.zip +0 -0
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +10 -10
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +1 -0
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +251 -22
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +4 -8
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +1 -1
- package/lib/monitoring/src/monitoring-layer.zip +0 -0
- package/lib/outlier-detection/src/outlier-detection.zip +0 -0
- package/lib/outlier-detection/src/scipy-layer.zip +0 -0
- package/lib/services/CanaryMetrics.js +1 -1
- package/lib/services/CanaryTestMetricsOverride.js +1 -1
- package/lib/services/ContributorInsightRuleDetails.js +1 -1
- package/lib/services/InstrumentedServiceMultiAZObservability.js +4 -5
- package/lib/services/Operation.js +1 -1
- package/lib/services/OperationMetricDetails.js +1 -1
- package/lib/services/Service.js +1 -1
- package/lib/services/ServiceMetricDetails.js +1 -1
- package/lib/services/props/MetricDimensions.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -7342,13 +7342,28 @@
|
|
|
7342
7342
|
"abstract": true,
|
|
7343
7343
|
"docs": {
|
|
7344
7344
|
"stability": "experimental",
|
|
7345
|
-
"summary": "An alarm
|
|
7345
|
+
"summary": "An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side and/or canary (if present)."
|
|
7346
7346
|
},
|
|
7347
7347
|
"locationInModule": {
|
|
7348
7348
|
"filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
|
|
7349
|
-
"line":
|
|
7349
|
+
"line": 40
|
|
7350
|
+
},
|
|
7351
|
+
"name": "regionalImpactAlarm",
|
|
7352
|
+
"type": {
|
|
7353
|
+
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7354
|
+
}
|
|
7355
|
+
},
|
|
7356
|
+
{
|
|
7357
|
+
"abstract": true,
|
|
7358
|
+
"docs": {
|
|
7359
|
+
"stability": "experimental",
|
|
7360
|
+
"summary": "An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side."
|
|
7361
|
+
},
|
|
7362
|
+
"locationInModule": {
|
|
7363
|
+
"filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
|
|
7364
|
+
"line": 46
|
|
7350
7365
|
},
|
|
7351
|
-
"name": "
|
|
7366
|
+
"name": "regionalServerSideImpactAlarm",
|
|
7352
7367
|
"type": {
|
|
7353
7368
|
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7354
7369
|
}
|
|
@@ -7368,6 +7383,22 @@
|
|
|
7368
7383
|
"fqn": "@cdklabs/multi-az-observability.IService"
|
|
7369
7384
|
}
|
|
7370
7385
|
},
|
|
7386
|
+
{
|
|
7387
|
+
"abstract": true,
|
|
7388
|
+
"docs": {
|
|
7389
|
+
"remarks": "It triggers\non any impact to a critical operation either zonally scoped or regionally scoped.",
|
|
7390
|
+
"stability": "experimental",
|
|
7391
|
+
"summary": "This is the top level alarm you should tie notifications/paging/alerting to."
|
|
7392
|
+
},
|
|
7393
|
+
"locationInModule": {
|
|
7394
|
+
"filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
|
|
7395
|
+
"line": 52
|
|
7396
|
+
},
|
|
7397
|
+
"name": "serviceImpactAlarm",
|
|
7398
|
+
"type": {
|
|
7399
|
+
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7400
|
+
}
|
|
7401
|
+
},
|
|
7371
7402
|
{
|
|
7372
7403
|
"abstract": true,
|
|
7373
7404
|
"docs": {
|
|
@@ -7385,14 +7416,14 @@
|
|
|
7385
7416
|
"elementtype": {
|
|
7386
7417
|
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7387
7418
|
},
|
|
7388
|
-
"kind": "
|
|
7419
|
+
"kind": "map"
|
|
7389
7420
|
}
|
|
7390
7421
|
}
|
|
7391
7422
|
},
|
|
7392
7423
|
{
|
|
7393
7424
|
"abstract": true,
|
|
7394
7425
|
"docs": {
|
|
7395
|
-
"remarks": "There is 1 alarm per AZ that triggers\non availability or
|
|
7426
|
+
"remarks": "There is 1 alarm per AZ that triggers\non availability or latency impact to any critical operation in that AZ. These are useful\nfor deployment monitoring to not inadvertently fail when a canary can't contact an AZ\nduring a deployment.",
|
|
7396
7427
|
"stability": "experimental",
|
|
7397
7428
|
"summary": "The zonal server-side isolated impact alarms."
|
|
7398
7429
|
},
|
|
@@ -7406,7 +7437,7 @@
|
|
|
7406
7437
|
"elementtype": {
|
|
7407
7438
|
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7408
7439
|
},
|
|
7409
|
-
"kind": "
|
|
7440
|
+
"kind": "map"
|
|
7410
7441
|
}
|
|
7411
7442
|
}
|
|
7412
7443
|
},
|
|
@@ -7414,29 +7445,13 @@
|
|
|
7414
7445
|
"abstract": true,
|
|
7415
7446
|
"docs": {
|
|
7416
7447
|
"stability": "experimental",
|
|
7417
|
-
"summary": "An alarm
|
|
7448
|
+
"summary": "An alarm indicating the canary has discovered an availability or latency impact on a critical operation while testing the regional endpoint."
|
|
7418
7449
|
},
|
|
7419
7450
|
"locationInModule": {
|
|
7420
7451
|
"filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
|
|
7421
|
-
"line":
|
|
7422
|
-
},
|
|
7423
|
-
"name": "regionalAvailabilityCanaryAlarm",
|
|
7424
|
-
"optional": true,
|
|
7425
|
-
"type": {
|
|
7426
|
-
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
7427
|
-
}
|
|
7428
|
-
},
|
|
7429
|
-
{
|
|
7430
|
-
"abstract": true,
|
|
7431
|
-
"docs": {
|
|
7432
|
-
"stability": "experimental",
|
|
7433
|
-
"summary": "An alarm for regional availability or latency impact of any critical operation as measured by the canary."
|
|
7434
|
-
},
|
|
7435
|
-
"locationInModule": {
|
|
7436
|
-
"filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
|
|
7437
|
-
"line": 33
|
|
7452
|
+
"line": 34
|
|
7438
7453
|
},
|
|
7439
|
-
"name": "
|
|
7454
|
+
"name": "regionalCanaryAlarm",
|
|
7440
7455
|
"optional": true,
|
|
7441
7456
|
"type": {
|
|
7442
7457
|
"fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
|
|
@@ -10387,6 +10402,6 @@
|
|
|
10387
10402
|
"symbolId": "src/services/props/ServiceProps:ServiceProps"
|
|
10388
10403
|
}
|
|
10389
10404
|
},
|
|
10390
|
-
"version": "0.0.1-alpha.
|
|
10391
|
-
"fingerprint": "
|
|
10405
|
+
"version": "0.0.1-alpha.35",
|
|
10406
|
+
"fingerprint": "NQhLG+gPYcxMxShj535/ECq/3Ovu+VAXeaTMUZaJSZI="
|
|
10392
10407
|
}
|
package/API.md
CHANGED
|
@@ -4893,24 +4893,37 @@ Service level alarms and rules using critical operations.
|
|
|
4893
4893
|
|
|
4894
4894
|
| **Name** | **Type** | **Description** |
|
|
4895
4895
|
| --- | --- | --- |
|
|
4896
|
-
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.
|
|
4896
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalImpactAlarm">regionalImpactAlarm</a></code> | <code>aws-cdk-lib.aws_cloudwatch.IAlarm</code> | An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side and/or canary (if present). |
|
|
4897
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalServerSideImpactAlarm">regionalServerSideImpactAlarm</a></code> | <code>aws-cdk-lib.aws_cloudwatch.IAlarm</code> | An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side. |
|
|
4897
4898
|
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.service">service</a></code> | <code><a href="#@cdklabs/multi-az-observability.IService">IService</a></code> | The service these alarms and rules are for. |
|
|
4898
|
-
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.
|
|
4899
|
-
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.
|
|
4900
|
-
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.
|
|
4901
|
-
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.
|
|
4899
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.serviceImpactAlarm">serviceImpactAlarm</a></code> | <code>aws-cdk-lib.aws_cloudwatch.IAlarm</code> | This is the top level alarm you should tie notifications/paging/alerting to. |
|
|
4900
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.zonalAggregateIsolatedImpactAlarms">zonalAggregateIsolatedImpactAlarms</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_cloudwatch.IAlarm}</code> | The zonal aggregate isolated impact alarms. |
|
|
4901
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.zonalServerSideIsolatedImpactAlarms">zonalServerSideIsolatedImpactAlarms</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_cloudwatch.IAlarm}</code> | The zonal server-side isolated impact alarms. |
|
|
4902
|
+
| <code><a href="#@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalCanaryAlarm">regionalCanaryAlarm</a></code> | <code>aws-cdk-lib.aws_cloudwatch.IAlarm</code> | An alarm indicating the canary has discovered an availability or latency impact on a critical operation while testing the regional endpoint. |
|
|
4902
4903
|
|
|
4903
4904
|
---
|
|
4904
4905
|
|
|
4905
|
-
##### `
|
|
4906
|
+
##### `regionalImpactAlarm`<sup>Required</sup> <a name="regionalImpactAlarm" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalImpactAlarm"></a>
|
|
4906
4907
|
|
|
4907
4908
|
```typescript
|
|
4908
|
-
public readonly
|
|
4909
|
+
public readonly regionalImpactAlarm: IAlarm;
|
|
4909
4910
|
```
|
|
4910
4911
|
|
|
4911
4912
|
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4912
4913
|
|
|
4913
|
-
An alarm
|
|
4914
|
+
An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side and/or canary (if present).
|
|
4915
|
+
|
|
4916
|
+
---
|
|
4917
|
+
|
|
4918
|
+
##### `regionalServerSideImpactAlarm`<sup>Required</sup> <a name="regionalServerSideImpactAlarm" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalServerSideImpactAlarm"></a>
|
|
4919
|
+
|
|
4920
|
+
```typescript
|
|
4921
|
+
public readonly regionalServerSideImpactAlarm: IAlarm;
|
|
4922
|
+
```
|
|
4923
|
+
|
|
4924
|
+
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4925
|
+
|
|
4926
|
+
An alarm indicating there is availability or latency impact on a critical operation that is not scoped to a single availability zone as measured by the server-side.
|
|
4914
4927
|
|
|
4915
4928
|
---
|
|
4916
4929
|
|
|
@@ -4926,13 +4939,28 @@ The service these alarms and rules are for.
|
|
|
4926
4939
|
|
|
4927
4940
|
---
|
|
4928
4941
|
|
|
4942
|
+
##### `serviceImpactAlarm`<sup>Required</sup> <a name="serviceImpactAlarm" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.serviceImpactAlarm"></a>
|
|
4943
|
+
|
|
4944
|
+
```typescript
|
|
4945
|
+
public readonly serviceImpactAlarm: IAlarm;
|
|
4946
|
+
```
|
|
4947
|
+
|
|
4948
|
+
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4949
|
+
|
|
4950
|
+
This is the top level alarm you should tie notifications/paging/alerting to.
|
|
4951
|
+
|
|
4952
|
+
It triggers
|
|
4953
|
+
on any impact to a critical operation either zonally scoped or regionally scoped.
|
|
4954
|
+
|
|
4955
|
+
---
|
|
4956
|
+
|
|
4929
4957
|
##### `zonalAggregateIsolatedImpactAlarms`<sup>Required</sup> <a name="zonalAggregateIsolatedImpactAlarms" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.zonalAggregateIsolatedImpactAlarms"></a>
|
|
4930
4958
|
|
|
4931
4959
|
```typescript
|
|
4932
|
-
public readonly zonalAggregateIsolatedImpactAlarms:
|
|
4960
|
+
public readonly zonalAggregateIsolatedImpactAlarms: {[ key: string ]: IAlarm};
|
|
4933
4961
|
```
|
|
4934
4962
|
|
|
4935
|
-
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4963
|
+
- *Type:* {[ key: string ]: aws-cdk-lib.aws_cloudwatch.IAlarm}
|
|
4936
4964
|
|
|
4937
4965
|
The zonal aggregate isolated impact alarms.
|
|
4938
4966
|
|
|
@@ -4945,41 +4973,29 @@ that indicates it has isolated impact as measured by canaries or server-side.
|
|
|
4945
4973
|
##### `zonalServerSideIsolatedImpactAlarms`<sup>Required</sup> <a name="zonalServerSideIsolatedImpactAlarms" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.zonalServerSideIsolatedImpactAlarms"></a>
|
|
4946
4974
|
|
|
4947
4975
|
```typescript
|
|
4948
|
-
public readonly zonalServerSideIsolatedImpactAlarms:
|
|
4976
|
+
public readonly zonalServerSideIsolatedImpactAlarms: {[ key: string ]: IAlarm};
|
|
4949
4977
|
```
|
|
4950
4978
|
|
|
4951
|
-
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4979
|
+
- *Type:* {[ key: string ]: aws-cdk-lib.aws_cloudwatch.IAlarm}
|
|
4952
4980
|
|
|
4953
4981
|
The zonal server-side isolated impact alarms.
|
|
4954
4982
|
|
|
4955
4983
|
There is 1 alarm per AZ that triggers
|
|
4956
|
-
on availability or
|
|
4984
|
+
on availability or latency impact to any critical operation in that AZ. These are useful
|
|
4957
4985
|
for deployment monitoring to not inadvertently fail when a canary can't contact an AZ
|
|
4958
4986
|
during a deployment.
|
|
4959
4987
|
|
|
4960
4988
|
---
|
|
4961
4989
|
|
|
4962
|
-
##### `
|
|
4963
|
-
|
|
4964
|
-
```typescript
|
|
4965
|
-
public readonly regionalAvailabilityCanaryAlarm: IAlarm;
|
|
4966
|
-
```
|
|
4967
|
-
|
|
4968
|
-
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4969
|
-
|
|
4970
|
-
An alarm for regional availability impact of any critical operation as measured by the canary.
|
|
4971
|
-
|
|
4972
|
-
---
|
|
4973
|
-
|
|
4974
|
-
##### `regionalAvailabilityOrLatencyCanaryAlarm`<sup>Optional</sup> <a name="regionalAvailabilityOrLatencyCanaryAlarm" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalAvailabilityOrLatencyCanaryAlarm"></a>
|
|
4990
|
+
##### `regionalCanaryAlarm`<sup>Optional</sup> <a name="regionalCanaryAlarm" id="@cdklabs/multi-az-observability.IServiceAlarmsAndRules.property.regionalCanaryAlarm"></a>
|
|
4975
4991
|
|
|
4976
4992
|
```typescript
|
|
4977
|
-
public readonly
|
|
4993
|
+
public readonly regionalCanaryAlarm: IAlarm;
|
|
4978
4994
|
```
|
|
4979
4995
|
|
|
4980
4996
|
- *Type:* aws-cdk-lib.aws_cloudwatch.IAlarm
|
|
4981
4997
|
|
|
4982
|
-
An alarm
|
|
4998
|
+
An alarm indicating the canary has discovered an availability or latency impact on a critical operation while testing the regional endpoint.
|
|
4983
4999
|
|
|
4984
5000
|
---
|
|
4985
5001
|
|
|
@@ -13,7 +13,8 @@ export interface IOperationAlarmsAndRules {
|
|
|
13
13
|
*/
|
|
14
14
|
readonly operation: IOperation;
|
|
15
15
|
/**
|
|
16
|
-
* An alarm indicating
|
|
16
|
+
* An alarm indicating availability or latency impact has been detected by the server-side
|
|
17
|
+
* and/or canary (if present) and the impact is regionally scoped, not zonal
|
|
17
18
|
*/
|
|
18
19
|
readonly regionalImpactAlarm: IAlarm;
|
|
19
20
|
/**
|
|
@@ -25,15 +26,15 @@ export interface IOperationAlarmsAndRules {
|
|
|
25
26
|
*/
|
|
26
27
|
readonly canaryRegionalAlarmsAndRules?: ICanaryOperationRegionalAlarmsAndRules;
|
|
27
28
|
/**
|
|
28
|
-
* The aggregate zonal alarm indexed by Availability Zone name.
|
|
29
|
+
* The aggregate, server-side and canary combined, zonal alarm indexed by Availability Zone name.
|
|
29
30
|
*/
|
|
30
|
-
readonly
|
|
31
|
+
readonly aggregateZonalAlarms: {
|
|
31
32
|
[key: string]: IAlarm;
|
|
32
33
|
};
|
|
33
34
|
/**
|
|
34
35
|
* The server side zonal alarms and rules, indexed by Availability Zone name.
|
|
35
36
|
*/
|
|
36
|
-
readonly
|
|
37
|
+
readonly serverSideZonalAlarmsAndRules: {
|
|
37
38
|
[key: string]: IServerSideOperationZonalAlarmsAndRules;
|
|
38
39
|
};
|
|
39
40
|
/**
|
|
@@ -41,7 +42,7 @@ export interface IOperationAlarmsAndRules {
|
|
|
41
42
|
*
|
|
42
43
|
* @default - This is an empty dictionary if canary metric details are not provided
|
|
43
44
|
*/
|
|
44
|
-
readonly
|
|
45
|
+
readonly canaryZonalAlarmsAndRules?: {
|
|
45
46
|
[key: string]: ICanaryOperationZonalAlarmsAndRules;
|
|
46
47
|
};
|
|
47
48
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL0lPcGVyYXRpb25BbGFybXNBbmRSdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgSUFsYXJtIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhbGFybXMgYW5kIHJ1bGVzIGZvciBhbiBvcGVyYXRpb24gZm9yIGJvdGggcmVnaW9uYWwgYW5kIHpvbmFsIG1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMge1xuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbiB0aGUgYWxhcm1zIGFuZCBydWxlcyBhcmUgY3JlYXRlZCBmb3JcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbjogSU9wZXJhdGlvbjtcblxuICAvKipcbiAgICogQW4gYWxhcm0gaW5kaWNhdGluZyBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeSBpbXBhY3QgaGFzIGJlZW4gZGV0ZWN0ZWQgYnkgdGhlIHNlcnZlci1zaWRlIFxuICAgKiBhbmQvb3IgY2FuYXJ5IChpZiBwcmVzZW50KSBhbmQgdGhlIGltcGFjdCBpcyByZWdpb25hbGx5IHNjb3BlZCwgbm90IHpvbmFsXG4gICAqL1xuICByZWFkb25seSByZWdpb25hbEltcGFjdEFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgc2lkZSByZWdpb25hbCBhbGFybXMgYW5kIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlczogSVNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FuYXJ5IHJlZ2lvbmFsIGFsYXJtcyBhbmQgcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM/OiBJQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcztcblxuICAvKipcbiAgICogVGhlIGFnZ3JlZ2F0ZSwgc2VydmVyLXNpZGUgYW5kIGNhbmFyeSBjb21iaW5lZCwgem9uYWwgYWxhcm0gaW5kZXhlZCBieSBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgYWdncmVnYXRlWm9uYWxBbGFybXM6IHtba2V5OiBzdHJpbmddOiBJQWxhcm19O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIHNpZGUgem9uYWwgYWxhcm1zIGFuZCBydWxlcywgaW5kZXhlZCBieSBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXM6IHtba2V5OiBzdHJpbmddOiBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXN9O1xuXG4gIC8qKlxuICAgKiBUaGUgY2FuYXJ5IHpvbmFsIGFsYXJtcyBhbmQgcnVsZXMsIGluZGV4ZWQgYnkgQXZhaWxhYmlsaXR5IFpvbmUgbmFtZS5cbiAgICogXG4gICAqIEBkZWZhdWx0IC0gVGhpcyBpcyBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlmIGNhbmFyeSBtZXRyaWMgZGV0YWlscyBhcmUgbm90IHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzPzoge1trZXk6IHN0cmluZ106IElDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzfTtcbn1cbiJdfQ==
|
|
@@ -13,24 +13,36 @@ export interface IServiceAlarmsAndRules {
|
|
|
13
13
|
* triggers for availability or latency impact to any critical operation in that AZ
|
|
14
14
|
* that indicates it has isolated impact as measured by canaries or server-side.
|
|
15
15
|
*/
|
|
16
|
-
zonalAggregateIsolatedImpactAlarms:
|
|
16
|
+
zonalAggregateIsolatedImpactAlarms: {
|
|
17
|
+
[key: string]: IAlarm;
|
|
18
|
+
};
|
|
17
19
|
/**
|
|
18
20
|
* The zonal server-side isolated impact alarms. There is 1 alarm per AZ that triggers
|
|
19
|
-
* on availability or
|
|
21
|
+
* on availability or latency impact to any critical operation in that AZ. These are useful
|
|
20
22
|
* for deployment monitoring to not inadvertently fail when a canary can't contact an AZ
|
|
21
23
|
* during a deployment.
|
|
22
24
|
*/
|
|
23
|
-
zonalServerSideIsolatedImpactAlarms:
|
|
25
|
+
zonalServerSideIsolatedImpactAlarms: {
|
|
26
|
+
[key: string]: IAlarm;
|
|
27
|
+
};
|
|
24
28
|
/**
|
|
25
|
-
* An alarm
|
|
29
|
+
* An alarm indicating the canary has discovered an availability or latency impact on a critical
|
|
30
|
+
* operation while testing the regional endpoint.
|
|
26
31
|
*/
|
|
27
|
-
|
|
32
|
+
regionalCanaryAlarm?: IAlarm;
|
|
28
33
|
/**
|
|
29
|
-
* An alarm
|
|
34
|
+
* An alarm indicating there is availability or latency impact on a critical operation
|
|
35
|
+
* that is not scoped to a single availability zone as measured by the server-side and/or canary (if present)
|
|
30
36
|
*/
|
|
31
|
-
|
|
37
|
+
regionalImpactAlarm: IAlarm;
|
|
32
38
|
/**
|
|
33
|
-
* An alarm
|
|
39
|
+
* An alarm indicating there is availability or latency impact on a critical operation
|
|
40
|
+
* that is not scoped to a single availability zone as measured by the server-side
|
|
34
41
|
*/
|
|
35
|
-
|
|
42
|
+
regionalServerSideImpactAlarm: IAlarm;
|
|
43
|
+
/**
|
|
44
|
+
* This is the top level alarm you should tie notifications/paging/alerting to. It triggers
|
|
45
|
+
* on any impact to a critical operation either zonally scoped or regionally scoped.
|
|
46
|
+
*/
|
|
47
|
+
serviceImpactAlarm: IAlarm;
|
|
36
48
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVNlcnZpY2VBbGFybXNBbmRSdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9JU2VydmljZUFsYXJtc0FuZFJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJQWxhcm0gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL0lTZXJ2aWNlJztcblxuLyoqXG4gKiBTZXJ2aWNlIGxldmVsIGFsYXJtcyBhbmQgcnVsZXMgdXNpbmcgY3JpdGljYWwgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElTZXJ2aWNlQWxhcm1zQW5kUnVsZXMge1xuICAvKipcbiAgICogVGhlIHNlcnZpY2UgdGhlc2UgYWxhcm1zIGFuZCBydWxlcyBhcmUgZm9yXG4gICAqL1xuICBzZXJ2aWNlOiBJU2VydmljZTtcblxuICAvKipcbiAgICogVGhlIHpvbmFsIGFnZ3JlZ2F0ZSBpc29sYXRlZCBpbXBhY3QgYWxhcm1zLiBUaGVyZSBpcyAxIGFsYXJtIHBlciBBWiB0aGF0XG4gICAqIHRyaWdnZXJzIGZvciBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeSBpbXBhY3QgdG8gYW55IGNyaXRpY2FsIG9wZXJhdGlvbiBpbiB0aGF0IEFaXG4gICAqIHRoYXQgaW5kaWNhdGVzIGl0IGhhcyBpc29sYXRlZCBpbXBhY3QgYXMgbWVhc3VyZWQgYnkgY2FuYXJpZXMgb3Igc2VydmVyLXNpZGUuXG4gICAqL1xuICB6b25hbEFnZ3JlZ2F0ZUlzb2xhdGVkSW1wYWN0QWxhcm1zOiB7W2tleTogc3RyaW5nXTogSUFsYXJtfTtcblxuICAvKipcbiAgICogVGhlIHpvbmFsIHNlcnZlci1zaWRlIGlzb2xhdGVkIGltcGFjdCBhbGFybXMuIFRoZXJlIGlzIDEgYWxhcm0gcGVyIEFaIHRoYXQgdHJpZ2dlcnNcbiAgICogb24gYXZhaWxhYmlsaXR5IG9yIGxhdGVuY3kgaW1wYWN0IHRvIGFueSBjcml0aWNhbCBvcGVyYXRpb24gaW4gdGhhdCBBWi4gVGhlc2UgYXJlIHVzZWZ1bFxuICAgKiBmb3IgZGVwbG95bWVudCBtb25pdG9yaW5nIHRvIG5vdCBpbmFkdmVydGVudGx5IGZhaWwgd2hlbiBhIGNhbmFyeSBjYW4ndCBjb250YWN0IGFuIEFaXG4gICAqIGR1cmluZyBhIGRlcGxveW1lbnQuXG4gICAqL1xuICB6b25hbFNlcnZlclNpZGVJc29sYXRlZEltcGFjdEFsYXJtczoge1trZXk6IHN0cmluZ106IElBbGFybX07XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIGluZGljYXRpbmcgdGhlIGNhbmFyeSBoYXMgZGlzY292ZXJlZCBhbiBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeSBpbXBhY3Qgb24gYSBjcml0aWNhbFxuICAgKiBvcGVyYXRpb24gd2hpbGUgdGVzdGluZyB0aGUgcmVnaW9uYWwgZW5kcG9pbnQuXG4gICAqL1xuICByZWdpb25hbENhbmFyeUFsYXJtPzogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBBbiBhbGFybSBpbmRpY2F0aW5nIHRoZXJlIGlzIGF2YWlsYWJpbGl0eSBvciBsYXRlbmN5IGltcGFjdCBvbiBhIGNyaXRpY2FsIG9wZXJhdGlvblxuICAgKiB0aGF0IGlzIG5vdCBzY29wZWQgdG8gYSBzaW5nbGUgYXZhaWxhYmlsaXR5IHpvbmUgYXMgbWVhc3VyZWQgYnkgdGhlIHNlcnZlci1zaWRlIGFuZC9vciBjYW5hcnkgKGlmIHByZXNlbnQpXG4gICAqL1xuICByZWdpb25hbEltcGFjdEFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIGluZGljYXRpbmcgdGhlcmUgaXMgYXZhaWxhYmlsaXR5IG9yIGxhdGVuY3kgaW1wYWN0IG9uIGEgY3JpdGljYWwgb3BlcmF0aW9uXG4gICAqIHRoYXQgaXMgbm90IHNjb3BlZCB0byBhIHNpbmdsZSBhdmFpbGFiaWxpdHkgem9uZSBhcyBtZWFzdXJlZCBieSB0aGUgc2VydmVyLXNpZGVcbiAgICovXG4gIHJlZ2lvbmFsU2VydmVyU2lkZUltcGFjdEFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBhbGFybSB5b3Ugc2hvdWxkIHRpZSBub3RpZmljYXRpb25zL3BhZ2luZy9hbGVydGluZyB0by4gSXQgdHJpZ2dlcnNcbiAgICogb24gYW55IGltcGFjdCB0byBhIGNyaXRpY2FsIG9wZXJhdGlvbiBlaXRoZXIgem9uYWxseSBzY29wZWQgb3IgcmVnaW9uYWxseSBzY29wZWQuXG4gICAqL1xuICBzZXJ2aWNlSW1wYWN0QWxhcm06IElBbGFybTtcbn1cbiJdfQ==
|
|
@@ -26,17 +26,18 @@ export declare class OperationAlarmsAndRules extends Construct implements IOpera
|
|
|
26
26
|
/**
|
|
27
27
|
* The aggregate zonal alarm indexed by Availability Zone Id.
|
|
28
28
|
*/
|
|
29
|
-
readonly
|
|
29
|
+
readonly aggregateZonalAlarms: {
|
|
30
30
|
[key: string]: IAlarm;
|
|
31
31
|
};
|
|
32
32
|
/**
|
|
33
|
-
* An alarm indicating
|
|
33
|
+
* An alarm indicating availability or latency impact has been detected by the server-side
|
|
34
|
+
* and/or canary (if present) and the impact is regionally scoped, not zonal
|
|
34
35
|
*/
|
|
35
36
|
readonly regionalImpactAlarm: IAlarm;
|
|
36
37
|
/**
|
|
37
38
|
* The server side zonal alarms and rules, indexed by Availability Zone name.
|
|
38
39
|
*/
|
|
39
|
-
readonly
|
|
40
|
+
readonly serverSideZonalAlarmsAndRules: {
|
|
40
41
|
[key: string]: IServerSideOperationZonalAlarmsAndRules;
|
|
41
42
|
};
|
|
42
43
|
/**
|
|
@@ -44,7 +45,7 @@ export declare class OperationAlarmsAndRules extends Construct implements IOpera
|
|
|
44
45
|
*
|
|
45
46
|
* @default - This is an empty dictionary if canary metric details are not provided
|
|
46
47
|
*/
|
|
47
|
-
readonly
|
|
48
|
+
readonly canaryZonalAlarmsAndRules?: {
|
|
48
49
|
[key: string]: ICanaryOperationZonalAlarmsAndRules;
|
|
49
50
|
};
|
|
50
51
|
constructor(scope: Construct, id: string, props: OperationAlarmsAndRulesProps);
|
|
@@ -16,9 +16,9 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
16
16
|
constructor(scope, id, props) {
|
|
17
17
|
super(scope, id);
|
|
18
18
|
this.operation = props.operation;
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
19
|
+
this.aggregateZonalAlarms = {};
|
|
20
|
+
this.serverSideZonalAlarmsAndRules = {};
|
|
21
|
+
this.canaryZonalAlarmsAndRules = {};
|
|
22
22
|
let loadBalancerArn = '';
|
|
23
23
|
if (props.loadBalancer) {
|
|
24
24
|
loadBalancerArn = props.loadBalancer
|
|
@@ -60,7 +60,7 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
60
60
|
counter: index,
|
|
61
61
|
nameSuffix: '-server'
|
|
62
62
|
});
|
|
63
|
-
this.
|
|
63
|
+
this.serverSideZonalAlarmsAndRules[availabilityZone] = serverSideZonalAlarmsAndRules;
|
|
64
64
|
if (props.operation.canaryMetricDetails) {
|
|
65
65
|
let canaryZonalAlarmsAndRules = new CanaryOperationZonalAlarmsAndRules_1.CanaryOperationZonalAlarmsAndRules(this, props.operation.operationName +
|
|
66
66
|
'AZ' +
|
|
@@ -71,7 +71,7 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
71
71
|
counter: index,
|
|
72
72
|
nameSuffix: '-canary'
|
|
73
73
|
});
|
|
74
|
-
this.
|
|
74
|
+
this.canaryZonalAlarmsAndRules[availabilityZone] = canaryZonalAlarmsAndRules;
|
|
75
75
|
let aggAlarm = new aws_cloudwatch_1.CompositeAlarm(this, props.operation.operationName +
|
|
76
76
|
'AZ' +
|
|
77
77
|
index +
|
|
@@ -80,7 +80,7 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
80
80
|
'-' +
|
|
81
81
|
props.operation.operationName.toLowerCase() +
|
|
82
82
|
'-aggregate-isolated-az-impact',
|
|
83
|
-
alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(this.
|
|
83
|
+
alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(this.canaryZonalAlarmsAndRules[availabilityZone].isolatedImpactAlarm, this.serverSideZonalAlarmsAndRules[availabilityZone].isolatedImpactAlarm),
|
|
84
84
|
actionsEnabled: false,
|
|
85
85
|
alarmDescription: '{"loadBalancer":"' +
|
|
86
86
|
loadBalancerArn +
|
|
@@ -88,10 +88,10 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
88
88
|
availabilityZoneId +
|
|
89
89
|
'"}',
|
|
90
90
|
});
|
|
91
|
-
this.
|
|
91
|
+
this.aggregateZonalAlarms[availabilityZone] = aggAlarm;
|
|
92
92
|
}
|
|
93
93
|
else {
|
|
94
|
-
this.
|
|
94
|
+
this.aggregateZonalAlarms[availabilityZone] = this.serverSideZonalAlarmsAndRules[availabilityZone].isolatedImpactAlarm;
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
97
|
// Create a regional impact alarm that is triggered if regional
|
|
@@ -100,16 +100,16 @@ class OperationAlarmsAndRules extends constructs_1.Construct {
|
|
|
100
100
|
if (props.operation.canaryMetricDetails) {
|
|
101
101
|
this.regionalImpactAlarm = new aws_cloudwatch_1.CompositeAlarm(this, props.operation.operationName + "-regional-impact-alarm", {
|
|
102
102
|
compositeAlarmName: `${props.operation.service.serviceName.toLowerCase()}-${props.operation.operationName.toLowerCase()}-regional-impact`,
|
|
103
|
-
alarmRule: aws_cloudwatch_1.AlarmRule.allOf(aws_cloudwatch_1.AlarmRule.anyOf(this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm, this.canaryRegionalAlarmsAndRules.availabilityOrLatencyAlarm), aws_cloudwatch_1.AlarmRule.not(aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(this.
|
|
103
|
+
alarmRule: aws_cloudwatch_1.AlarmRule.allOf(aws_cloudwatch_1.AlarmRule.anyOf(this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm, this.canaryRegionalAlarmsAndRules.availabilityOrLatencyAlarm), aws_cloudwatch_1.AlarmRule.not(aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(this.aggregateZonalAlarms))))
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
else {
|
|
107
107
|
this.regionalImpactAlarm = new aws_cloudwatch_1.CompositeAlarm(this, props.operation.operationName + "-regional-impact-alarm", {
|
|
108
108
|
compositeAlarmName: `${props.operation.service.serviceName.toLowerCase()}-${props.operation.operationName.toLowerCase()}-regional-impact`,
|
|
109
|
-
alarmRule: aws_cloudwatch_1.AlarmRule.allOf(this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm, aws_cloudwatch_1.AlarmRule.not(aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(this.
|
|
109
|
+
alarmRule: aws_cloudwatch_1.AlarmRule.allOf(this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm, aws_cloudwatch_1.AlarmRule.not(aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(this.aggregateZonalAlarms))))
|
|
110
110
|
});
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
exports.OperationAlarmsAndRules = OperationAlarmsAndRules;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QywrREFBK0U7QUFFL0UsMkNBQXVDO0FBQ3ZDLG1HQUFnRztBQUNoRyw2RkFBMEY7QUFPMUYsMkdBQXdHO0FBQ3hHLHFHQUFrRztBQUdsRzs7R0FFRztBQUNILE1BQWEsdUJBQ1gsU0FBUSxzQkFBUztJQXVDakIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUM7UUFFdkMsSUFBSSxlQUFlLEdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLGVBQWUsR0FBSSxLQUFLLENBQUMsWUFBaUM7aUJBQ3ZELGVBQWUsQ0FBQztRQUNyQixDQUFDO1FBRUQsbUVBQW1FO1FBQ25FLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsZ0NBQWdDO1lBQ25DLElBQUkscUZBQXlDLENBQzNDLElBQUksRUFDSixLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRywwQkFBMEIsRUFDMUQ7Z0JBQ0UseUJBQXlCLEVBQ3ZCLEtBQUssQ0FBQyxTQUFTLENBQUMsbUNBQW1DO2dCQUNyRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLDhCQUE4QjtnQkFDcEUsNkJBQTZCLEVB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QUFDLGFBQWEsR0FBRyx3QkFBd0IsRUFBRTtnQkFDNUcsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGtCQUFrQjtnQkFDekksU0FBUyxFQUFFLDBCQUFTLENBQUMsS0FBSyxDQUN4QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsMEJBQTBCLEVBQ2hFLDBCQUFTLENBQUMsR0FBRyxDQUNYLDBCQUFTLENBQUMsS0FBSyxDQUNiLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FDL0MsQ0FDRixDQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXRNRCwwREFzTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBBbGFybVJ1bGUsIENvbXBvc2l0ZUFsYXJtLCBJQWxhcm0gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBCYXNlTG9hZEJhbGFuY2VyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9DYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IENhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0NhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lPcGVyYXRpb25BbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9PcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzJztcbmltcG9ydCB7IFNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9TZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL0lPcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYWxhcm1zIGFuZCBydWxlcyBmb3IgYW4gb3BlcmF0aW9uIGZvciBib3RoIHJlZ2lvbmFsIGFuZCB6b25hbCBtZXRyaWNzXG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25BbGFybXNBbmRSdWxlc1xuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElPcGVyYXRpb25BbGFybXNBbmRSdWxlcyB7XG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW9uIHRoZSBhbGFybXMgYW5kIHJ1bGVzIGFyZSBjcmVhdGVkIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uOiBJT3BlcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIHNpZGUgcmVnaW9uYWwgYWxhcm1zIGFuZCBydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM6IElTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcztcblxuICAvKipcbiAgICogVGhlIGNhbmFyeSByZWdpb25hbCBhbGFybXMgYW5kIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBjYW5hcnlSZWdpb25hbEFsYXJtc0FuZFJ1bGVzPzogSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhZ2dyZWdhdGUgem9uYWwgYWxhcm0gaW5kZXhlZCBieSBBdmFpbGFiaWxpdHkgWm9uZSBJZC5cbiAgICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0ZVpvbmFsQWxhcm1zTWFwOiB7IFtrZXk6IHN0cmluZ106IElBbGFybSB9O1xuXG4gIC8qKlxuICAgKiBBbiBhbGFybSBpbmRpY2F0aW5nIHJlZ2lvbmFsbHkgc2NvcGVkIGltcGFjdCwgbm90IHpvbmFsXG4gICAqL1xuICByZWFkb25seSByZWdpb25hbEltcGFjdEFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgc2lkZSB6b25hbCBhbGFybXMgYW5kIHJ1bGVzLCBpbmRleGVkIGJ5IEF2YWlsYWJpbGl0eSBab25lIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJTaWRlWm9uYWxBbGFybXNBbmRSdWxlc01hcDoge1trZXk6IHN0cmluZ106IElTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc307XG5cbiAgLyoqXG4gICAqIFRoZSBjYW5hcnkgem9uYWwgYWxhcm1zIGFuZCBydWxlcywgaW5kZXhlZCBieSBBdmFpbGFiaWxpdHkgWm9uZSBuYW1lLlxuICAgKiBcbiAgICogQGRlZmF1bHQgLSBUaGlzIGlzIGFuIGVtcHR5IGRpY3Rpb25hcnkgaWYgY2FuYXJ5IG1ldHJpYyBkZXRhaWxzIGFyZSBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXNNYXA/OiB7W2tleTogc3RyaW5nXTogSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXN9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMub3BlcmF0aW9uID0gcHJvcHMub3BlcmF0aW9uO1xuICAgIHRoaXMuYWdncmVnYXRlWm9uYWxBbGFybXNNYXAgPSB7fTtcbiAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzTWFwID0ge307XG4gICAgdGhpcy5jYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzTWFwID0ge307XG5cbiAgICBsZXQgbG9hZEJhbGFuY2VyQXJuOiBzdHJpbmcgPSAnJztcblxuICAgIGlmIChwcm9wcy5sb2FkQmFsYW5jZXIpIHtcbiAgICAgIGxvYWRCYWxhbmNlckFybiA9IChwcm9wcy5sb2FkQmFsYW5jZXIgYXMgQmFzZUxvYWRCYWxhbmNlcilcbiAgICAgICAgLmxvYWRCYWxhbmNlckFybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIHRoZSByZWdpb25hbCBpbXBhY3QgYWxhcm1zIGFuZCBjb250cmlidXRvciBpbnNpZ2h0IHJ1bGVzXG4gICAgLy8gZm9yIGNvbnRyaWJ1dG9ycyB0byByZWdpb25hbCBmYXVsdHMgYW5kIGxhdGVuY3lcbiAgICB0aGlzLnNlcnZlclNpZGVSZWdpb25hbEFsYXJtc0FuZFJ1bGVzID1cbiAgICAgIG5ldyBTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgKyAnU2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zJyxcbiAgICAgICAge1xuICAgICAgICAgIGF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHM6XG4gICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24uc2VydmVyU2lkZUF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgbGF0ZW5jeU1ldHJpY0RldGFpbHM6IHByb3BzLm9wZXJhdGlvbi5zZXJ2ZXJTaWRlTGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgY29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHM6IHByb3BzLm9wZXJhdGlvblxuICAgICAgICAgICAgLnNlcnZlclNpZGVDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlsc1xuICAgICAgICAgICAgPyBwcm9wcy5vcGVyYXRpb24uc2VydmVyU2lkZUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzXG4gICAgICAgICAgICA6IHByb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLmRlZmF1bHRDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgICAgICAgICBuYW1lU3VmZml4OiAnLXNlcnZlcicsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgLy8gSWYgY2FuYXJ5IG1ldHJpY3MgYXJlIGRlZmluZWQsIGNyZWF0ZSB0aGUgcmVnaW9uYWwgaW1wYWN0XG4gICAgLy8gYWxhcm1zIFxuICAgIGlmIChwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscykge1xuICAgICAgdGhpcy5jYW5hcnlSZWdpb25hbEFsYXJtc0FuZFJ1bGVzID1cbiAgICAgICAgbmV3IENhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArICdDYW5hcnlSZWdpb25hbEFsYXJtcycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlsczpcbiAgICAgICAgICAgICAgcHJvcHMub3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHNcbiAgICAgICAgICAgICAgICAuY2FuYXJ5QXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICAgIGxhdGVuY3lNZXRyaWNEZXRhaWxzOlxuICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscy5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICAgIG5hbWVTdWZmaXg6ICctY2FuYXJ5JyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgem9uYWwgaXNvbGF0ZWQgaW1wYWN0IGFsYXJtc1xuICAgIHByb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLmF2YWlsYWJpbGl0eVpvbmVOYW1lcy5mb3JFYWNoKChhdmFpbGFiaWxpdHlab25lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBhekxldHRlcjogc3RyaW5nID0gYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcoYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKTtcbiAgICAgIGxldCBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZyA9IHByb3BzLmF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKGF6TGV0dGVyKTtcblxuICAgICAgbGV0IHNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzOiBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgPSBuZXcgU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAnQVonICtcbiAgICAgICAgICBpbmRleCArXG4gICAgICAgICAgJ1NlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzJyxcbiAgICAgICAge1xuICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgb3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wczogcHJvcHMsXG4gICAgICAgICAgY291bnRlcjogaW5kZXgsXG4gICAgICAgICAgbmFtZVN1ZmZpeDogJy1zZXJ2ZXInXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzTWFwW2F2YWlsYWJpbGl0eVpvbmVdID0gc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXM7XG5cbiAgICAgIGlmIChwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscykge1xuICAgICAgICBsZXQgY2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlczogSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgPSBuZXcgQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAgICdBWicgK1xuICAgICAgICAgICAgaW5kZXggK1xuICAgICAgICAgICAgJ0NhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICAgICAgICBvcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzOiBwcm9wcyxcbiAgICAgICAgICAgIGNvdW50ZXI6IGluZGV4LFxuICAgICAgICAgICAgbmFtZVN1ZmZpeDogJy1jYW5hcnknXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXNNYXAhW2F2YWlsYWJpbGl0eVpvbmVdID0gY2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlcztcblxuICAgICAgICBsZXQgYWdnQWxhcm06IElBbGFybSA9IG5ldyBDb21wb3NpdGVBbGFybShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAgICdBWicgK1xuICAgICAgICAgICAgaW5kZXggK1xuICAgICAgICAgICAgJ0FnZ3JlZ2F0ZVpvbmFsSXNvbGF0ZWRJbXBhY3RBbGFybScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOlxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICAgJy1hZ2dyZWdhdGUtaXNvbGF0ZWQtYXotaW1wYWN0JyxcbiAgICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgICB0aGlzLmNhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXNNYXAhW2F2YWlsYWJpbGl0eVpvbmVdLmlzb2xhdGVkSW1wYWN0QWxhcm0sXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXNNYXBbYXZhaWxhYmlsaXR5Wm9uZV0uaXNvbGF0ZWRJbXBhY3RBbGFybVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICd7XCJsb2FkQmFsYW5jZXJcIjpcIicgK1xuICAgICAgICAgICAgICBsb2FkQmFsYW5jZXJBcm4gK1xuICAgICAgICAgICAgICAnXCIsXCJhei1pZFwiOlwiJyArXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgICAgICdcIn0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZVpvbmFsQWxhcm1zTWFwW2F2YWlsYWJpbGl0eVpvbmVdID0gYWdnQWxhcm07XG4gICAgICB9IGVsc2UgeyAgICAgICBcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtc01hcFthdmFpbGFiaWxpdHlab25lXSA9IHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXNNYXBbYXZhaWxhYmlsaXR5Wm9uZV0uaXNvbGF0ZWRJbXBhY3RBbGFybSAgICBcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIHJlZ2lvbmFsIGltcGFjdCBhbGFybSB0aGF0IGlzIHRyaWdnZXJlZCBpZiByZWdpb25hbFxuICAgIC8vIG1ldHJpY3MgZm9yIGF2YWlsYWJpbGl0eSBvciBsYXRlbmN5IGRyb3AgYW5kIHRoZXJlIGlzbid0IGEgc2luZ2xlXG4gICAgLy8gQVogaW1wYWN0IGFsYXJtIFxuICAgIGlmIChwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscykge1xuICAgICAgdGhpcy5yZWdpb25hbEltcGFjdEFsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKHRoaXMsIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICsgXCItcmVnaW9uYWwtaW1wYWN0LWFsYXJtXCIsIHtcbiAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOiBgJHtwcm9wcy5vcGVyYXRpb24uc2VydmljZS5zZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpfS0ke3Byb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9LXJlZ2lvbmFsLWltcGFjdGAsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgIEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICAgIHRoaXMuc2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMuYXZhaWxhYmlsaXR5T3JMYXRlbmN5QWxhcm0sXG4gICAgICAgICAgICB0aGlzLmNhbmFyeVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMhLmF2YWlsYWJpbGl0eU9yTGF0ZW5jeUFsYXJtXG4gICAgICAgICAgKSxcbiAgICAgICAgICBBbGFybVJ1bGUubm90KFxuICAgICAgICAgICAgQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKHRoaXMuYWdncmVnYXRlWm9uYWxBbGFybXNNYXApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnJlZ2lvbmFsSW1wYWN0QWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0odGhpcywgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgKyBcIi1yZWdpb25hbC1pbXBhY3QtYWxhcm1cIiwge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6IGAke3Byb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLnNlcnZpY2VOYW1lLnRvTG93ZXJDYXNlKCl9LSR7cHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tcmVnaW9uYWwtaW1wYWN0YCxcbiAgICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYWxsT2YoXG4gICAgICAgICAgdGhpcy5zZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlcy5hdmFpbGFiaWxpdHlPckxhdGVuY3lBbGFybSwgICAgIFxuICAgICAgICAgIEFsYXJtUnVsZS5ub3QoXG4gICAgICAgICAgICBBbGFybVJ1bGUuYW55T2YoXG4gICAgICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXModGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtc01hcClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QywrREFBK0U7QUFFL0UsMkNBQXVDO0FBQ3ZDLG1HQUFnRztBQUNoRyw2RkFBMEY7QUFPMUYsMkdBQXdHO0FBQ3hHLHFHQUFrRztBQUdsRzs7R0FFRztBQUNILE1BQWEsdUJBQ1gsU0FBUSxzQkFBUztJQXdDakIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7UUFFcEMsSUFBSSxlQUFlLEdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLGVBQWUsR0FBSSxLQUFLLENBQUMsWUFBaUM7aUJBQ3ZELGVBQWUsQ0FBQztRQUNyQixDQUFDO1FBRUQsbUVBQW1FO1FBQ25FLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsZ0NBQWdDO1lBQ25DLElBQUkscUZBQXlDLENBQzNDLElBQUksRUFDSixLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRywwQkFBMEIsRUFDMUQ7Z0JBQ0UseUJBQXlCLEVBQ3ZCLEtBQUssQ0FBQyxTQUFTLENBQUMsbUNBQW1DO2dCQUNyRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLDhCQUE4QjtnQkFDcEUsNkJBQTZCLEVB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QUFDLGFBQWEsR0FBRyx3QkFBd0IsRUFBRTtnQkFDNUcsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLGtCQUFrQjtnQkFDekksU0FBUyxFQUFFLDBCQUFTLENBQUMsS0FBSyxDQUN4QixJQUFJLENBQUMsZ0NBQWdDLENBQUMsMEJBQTBCLEVBQ2hFLDBCQUFTLENBQUMsR0FBRyxDQUNYLDBCQUFTLENBQUMsS0FBSyxDQUNiLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FDNUMsQ0FDRixDQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZNRCwwREF1TUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBBbGFybVJ1bGUsIENvbXBvc2l0ZUFsYXJtLCBJQWxhcm0gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBCYXNlTG9hZEJhbGFuY2VyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9DYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IENhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0NhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lPcGVyYXRpb25BbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9PcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzJztcbmltcG9ydCB7IFNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9TZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL0lPcGVyYXRpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYWxhcm1zIGFuZCBydWxlcyBmb3IgYW4gb3BlcmF0aW9uIGZvciBib3RoIHJlZ2lvbmFsIGFuZCB6b25hbCBtZXRyaWNzXG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25BbGFybXNBbmRSdWxlc1xuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElPcGVyYXRpb25BbGFybXNBbmRSdWxlcyB7XG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW9uIHRoZSBhbGFybXMgYW5kIHJ1bGVzIGFyZSBjcmVhdGVkIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uOiBJT3BlcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmVyIHNpZGUgcmVnaW9uYWwgYWxhcm1zIGFuZCBydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM6IElTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcztcblxuICAvKipcbiAgICogVGhlIGNhbmFyeSByZWdpb25hbCBhbGFybXMgYW5kIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBjYW5hcnlSZWdpb25hbEFsYXJtc0FuZFJ1bGVzPzogSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhZ2dyZWdhdGUgem9uYWwgYWxhcm0gaW5kZXhlZCBieSBBdmFpbGFiaWxpdHkgWm9uZSBJZC5cbiAgICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0ZVpvbmFsQWxhcm1zOiB7IFtrZXk6IHN0cmluZ106IElBbGFybSB9O1xuXG4gIC8qKlxuICAgKiBBbiBhbGFybSBpbmRpY2F0aW5nIGF2YWlsYWJpbGl0eSBvciBsYXRlbmN5IGltcGFjdCBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUgc2VydmVyLXNpZGUgXG4gICAqIGFuZC9vciBjYW5hcnkgKGlmIHByZXNlbnQpIGFuZCB0aGUgaW1wYWN0IGlzIHJlZ2lvbmFsbHkgc2NvcGVkLCBub3Qgem9uYWxcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbmFsSW1wYWN0QWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBzaWRlIHpvbmFsIGFsYXJtcyBhbmQgcnVsZXMsIGluZGV4ZWQgYnkgQXZhaWxhYmlsaXR5IFpvbmUgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzOiB7W2tleTogc3RyaW5nXTogSVNlcnZlclNpZGVPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzfTtcblxuICAvKipcbiAgICogVGhlIGNhbmFyeSB6b25hbCBhbGFybXMgYW5kIHJ1bGVzLCBpbmRleGVkIGJ5IEF2YWlsYWJpbGl0eSBab25lIG5hbWUuXG4gICAqIFxuICAgKiBAZGVmYXVsdCAtIFRoaXMgaXMgYW4gZW1wdHkgZGljdGlvbmFyeSBpZiBjYW5hcnkgbWV0cmljIGRldGFpbHMgYXJlIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlcz86IHtba2V5OiBzdHJpbmddOiBJQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBPcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5vcGVyYXRpb24gPSBwcm9wcy5vcGVyYXRpb247XG4gICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtcyA9IHt9O1xuICAgIHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXMgPSB7fTtcbiAgICB0aGlzLmNhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXMgPSB7fTtcblxuICAgIGxldCBsb2FkQmFsYW5jZXJBcm46IHN0cmluZyA9ICcnO1xuXG4gICAgaWYgKHByb3BzLmxvYWRCYWxhbmNlcikge1xuICAgICAgbG9hZEJhbGFuY2VyQXJuID0gKHByb3BzLmxvYWRCYWxhbmNlciBhcyBCYXNlTG9hZEJhbGFuY2VyKVxuICAgICAgICAubG9hZEJhbGFuY2VyQXJuO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZXMgdGhlIHJlZ2lvbmFsIGltcGFjdCBhbGFybXMgYW5kIGNvbnRyaWJ1dG9yIGluc2lnaHQgcnVsZXNcbiAgICAvLyBmb3IgY29udHJpYnV0b3JzIHRvIHJlZ2lvbmFsIGZhdWx0cyBhbmQgbGF0ZW5jeVxuICAgIHRoaXMuc2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgPVxuICAgICAgbmV3IFNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArICdTZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXMnLFxuICAgICAgICB7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlsczpcbiAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5zZXJ2ZXJTaWRlQXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBsYXRlbmN5TWV0cmljRGV0YWlsczogcHJvcHMub3BlcmF0aW9uLnNlcnZlclNpZGVMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBjb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlsczogcHJvcHMub3BlcmF0aW9uXG4gICAgICAgICAgICAuc2VydmVyU2lkZUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzXG4gICAgICAgICAgICA/IHByb3BzLm9wZXJhdGlvbi5zZXJ2ZXJTaWRlQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHNcbiAgICAgICAgICAgIDogcHJvcHMub3BlcmF0aW9uLnNlcnZpY2UuZGVmYXVsdENvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgICAgICAgIG5hbWVTdWZmaXg6ICctc2VydmVyJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAvLyBJZiBjYW5hcnkgbWV0cmljcyBhcmUgZGVmaW5lZCwgY3JlYXRlIHRoZSByZWdpb25hbCBpbXBhY3RcbiAgICAvLyBhbGFybXMgXG4gICAgaWYgKHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzKSB7XG4gICAgICB0aGlzLmNhbmFyeVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgPVxuICAgICAgICBuZXcgQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICsgJ0NhbmFyeVJlZ2lvbmFsQWxhcm1zJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzOlxuICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlsc1xuICAgICAgICAgICAgICAgIC5jYW5hcnlBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgICAgbGF0ZW5jeU1ldHJpY0RldGFpbHM6XG4gICAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzLmNhbmFyeUxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgICAgbmFtZVN1ZmZpeDogJy1jYW5hcnknLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSB6b25hbCBpc29sYXRlZCBpbXBhY3QgYWxhcm1zXG4gICAgcHJvcHMub3BlcmF0aW9uLnNlcnZpY2UuYXZhaWxhYmlsaXR5Wm9uZU5hbWVzLmZvckVhY2goKGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IGF6TGV0dGVyOiBzdHJpbmcgPSBhdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhhdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpO1xuICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nID0gcHJvcHMuYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoYXpMZXR0ZXIpO1xuXG4gICAgICBsZXQgc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXM6IElTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyA9IG5ldyBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICdBWicgK1xuICAgICAgICAgIGluZGV4ICtcbiAgICAgICAgICAnU2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXMnLFxuICAgICAgICB7XG4gICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICBvcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzOiBwcm9wcyxcbiAgICAgICAgICBjb3VudGVyOiBpbmRleCxcbiAgICAgICAgICBuYW1lU3VmZml4OiAnLXNlcnZlcidcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXNbYXZhaWxhYmlsaXR5Wm9uZV0gPSBzZXJ2ZXJTaWRlWm9uYWxBbGFybXNBbmRSdWxlcztcblxuICAgICAgaWYgKHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzKSB7XG4gICAgICAgIGxldCBjYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzOiBJQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyA9IG5ldyBDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgJ0FaJyArXG4gICAgICAgICAgICBpbmRleCArXG4gICAgICAgICAgICAnQ2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlcycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgIG9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgY291bnRlcjogaW5kZXgsXG4gICAgICAgICAgICBuYW1lU3VmZml4OiAnLWNhbmFyeSdcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlcyFbYXZhaWxhYmlsaXR5Wm9uZV0gPSBjYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzO1xuXG4gICAgICAgIGxldCBhZ2dBbGFybTogSUFsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgJ0FaJyArXG4gICAgICAgICAgICBpbmRleCArXG4gICAgICAgICAgICAnQWdncmVnYXRlWm9uYWxJc29sYXRlZEltcGFjdEFsYXJtJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAnLWFnZ3JlZ2F0ZS1pc29sYXRlZC1hei1pbXBhY3QnLFxuICAgICAgICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYW55T2YoXG4gICAgICAgICAgICAgIHRoaXMuY2FuYXJ5Wm9uYWxBbGFybXNBbmRSdWxlcyFbYXZhaWxhYmlsaXR5Wm9uZV0uaXNvbGF0ZWRJbXBhY3RBbGFybSxcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJTaWRlWm9uYWxBbGFybXNBbmRSdWxlc1thdmFpbGFiaWxpdHlab25lXS5pc29sYXRlZEltcGFjdEFsYXJtXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYWN0aW9uc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgJ3tcImxvYWRCYWxhbmNlclwiOlwiJyArXG4gICAgICAgICAgICAgIGxvYWRCYWxhbmNlckFybiArXG4gICAgICAgICAgICAgICdcIixcImF6LWlkXCI6XCInICtcbiAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkICtcbiAgICAgICAgICAgICAgJ1wifScsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYWdncmVnYXRlWm9uYWxBbGFybXNbYXZhaWxhYmlsaXR5Wm9uZV0gPSBhZ2dBbGFybTtcbiAgICAgIH0gZWxzZSB7ICAgICAgIFxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZVpvbmFsQWxhcm1zW2F2YWlsYWJpbGl0eVpvbmVdID0gdGhpcy5zZXJ2ZXJTaWRlWm9uYWxBbGFybXNBbmRSdWxlc1thdmFpbGFiaWxpdHlab25lXS5pc29sYXRlZEltcGFjdEFsYXJtICAgIFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVnaW9uYWwgaW1wYWN0IGFsYXJtIHRoYXQgaXMgdHJpZ2dlcmVkIGlmIHJlZ2lvbmFsXG4gICAgLy8gbWV0cmljcyBmb3IgYXZhaWxhYmlsaXR5IG9yIGxhdGVuY3kgZHJvcCBhbmQgdGhlcmUgaXNuJ3QgYSBzaW5nbGVcbiAgICAvLyBBWiBpbXBhY3QgYWxhcm0gXG4gICAgaWYgKHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzKSB7XG4gICAgICB0aGlzLnJlZ2lvbmFsSW1wYWN0QWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0odGhpcywgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgKyBcIi1yZWdpb25hbC1pbXBhY3QtYWxhcm1cIiwge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6IGAke3Byb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLnNlcnZpY2VOYW1lLnRvTG93ZXJDYXNlKCl9LSR7cHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0tcmVnaW9uYWwtaW1wYWN0YCxcbiAgICAgICAgYWxhcm1SdWxlOiBBbGFybVJ1bGUuYWxsT2YoXG4gICAgICAgICAgQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlcy5hdmFpbGFiaWxpdHlPckxhdGVuY3lBbGFybSxcbiAgICAgICAgICAgIHRoaXMuY2FuYXJ5UmVnaW9uYWxBbGFybXNBbmRSdWxlcyEuYXZhaWxhYmlsaXR5T3JMYXRlbmN5QWxhcm1cbiAgICAgICAgICApLFxuICAgICAgICAgIEFsYXJtUnVsZS5ub3QoXG4gICAgICAgICAgICBBbGFybVJ1bGUuYW55T2YoXG4gICAgICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXModGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtcylcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVnaW9uYWxJbXBhY3RBbGFybSA9IG5ldyBDb21wb3NpdGVBbGFybSh0aGlzLCBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArIFwiLXJlZ2lvbmFsLWltcGFjdC1hbGFybVwiLCB7XG4gICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTogYCR7cHJvcHMub3BlcmF0aW9uLnNlcnZpY2Uuc2VydmljZU5hbWUudG9Mb3dlckNhc2UoKX0tJHtwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfS1yZWdpb25hbC1pbXBhY3RgLFxuICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbGxPZihcbiAgICAgICAgICB0aGlzLnNlcnZlclNpZGVSZWdpb25hbEFsYXJtc0FuZFJ1bGVzLmF2YWlsYWJpbGl0eU9yTGF0ZW5jeUFsYXJtLCAgICAgXG4gICAgICAgICAgQWxhcm1SdWxlLm5vdChcbiAgICAgICAgICAgIEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmFnZ3JlZ2F0ZVpvbmFsQWxhcm1zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59Il19
|
|
@@ -16,31 +16,37 @@ export declare class ServiceAlarmsAndRules extends Construct implements IService
|
|
|
16
16
|
* triggers for availability or latency impact to any critical operation in that AZ
|
|
17
17
|
* that indicates it has isolated impact as measured by canaries or server-side.
|
|
18
18
|
*/
|
|
19
|
-
zonalAggregateIsolatedImpactAlarms:
|
|
19
|
+
zonalAggregateIsolatedImpactAlarms: {
|
|
20
|
+
[key: string]: IAlarm;
|
|
21
|
+
};
|
|
20
22
|
/**
|
|
21
23
|
* The zonal server-side isolated impact alarms. There is 1 alarm per AZ that triggers
|
|
22
|
-
* on availability or
|
|
24
|
+
* on availability or latency impact to any critical operation in that AZ. These are useful
|
|
23
25
|
* for deployment monitoring to not inadvertently fail when a canary can't contact an AZ
|
|
24
26
|
* during a deployment.
|
|
25
27
|
*/
|
|
26
|
-
zonalServerSideIsolatedImpactAlarms:
|
|
28
|
+
zonalServerSideIsolatedImpactAlarms: {
|
|
29
|
+
[key: string]: IAlarm;
|
|
30
|
+
};
|
|
27
31
|
/**
|
|
28
|
-
* An alarm
|
|
32
|
+
* An alarm indicating the canary has discovered an availability or latency impact on a critical
|
|
33
|
+
* operation while testing the regional endpoint.
|
|
29
34
|
*/
|
|
30
|
-
|
|
35
|
+
regionalCanaryAlarm?: IAlarm;
|
|
31
36
|
/**
|
|
32
|
-
* An alarm
|
|
37
|
+
* An alarm indicating there is availability or latency impact on a critical operation
|
|
38
|
+
* that is not scoped to a single availability zone as measured by the server-side and/or canary (if present)
|
|
33
39
|
*/
|
|
34
|
-
|
|
40
|
+
regionalImpactAlarm: IAlarm;
|
|
35
41
|
/**
|
|
36
|
-
* An alarm
|
|
42
|
+
* An alarm indicating there is availability or latency impact on a critical operation
|
|
43
|
+
* that is not scoped to a single availability zone as measured by the server-side
|
|
37
44
|
*/
|
|
45
|
+
regionalServerSideImpactAlarm: IAlarm;
|
|
38
46
|
/**
|
|
39
|
-
*
|
|
47
|
+
* This is the top level alarm you should tie notifications/paging/alerting to. It triggers
|
|
48
|
+
* on any impact to a critical operation either zonally scoped or regionally scoped.
|
|
40
49
|
*/
|
|
41
|
-
|
|
42
|
-
* An alarm for fault count exceeding a regional threshold for all critical operations.
|
|
43
|
-
*/
|
|
44
|
-
regionalFaultCountServerSideAlarm: IAlarm;
|
|
50
|
+
serviceImpactAlarm: IAlarm;
|
|
45
51
|
constructor(scope: Construct, id: string, props: ServiceAlarmsAndRulesProps);
|
|
46
52
|
}
|