@cdklabs/multi-az-observability 0.0.1-alpha.6 → 0.0.1-alpha.60
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 +2826 -1008
- package/.jsii.tabl.json +1 -0
- package/API.md +5406 -1585
- package/README.md +176 -152
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +18 -14
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +98 -60
- package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.d.ts +3 -3
- package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +2 -2
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +6 -15
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +2 -10
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +11 -3
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +29 -13
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +0 -8
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +26 -23
- package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +19 -15
- package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +21 -18
- package/lib/alarmsandrules/OperationAlarmsAndRules.js +60 -72
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +5 -5
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +2 -3
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +21 -13
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +48 -29
- package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +19 -15
- package/lib/alarmsandrules/ServiceAlarmsAndRules.js +34 -136
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +4 -3
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +1 -1
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +6 -44
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +1 -1
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +39 -7
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
- package/lib/azmapper/AvailabilityZoneMapper.js +8 -9
- package/lib/basic_observability/BasicServiceDashboard.d.ts +0 -3
- package/lib/basic_observability/BasicServiceDashboard.js +24 -112
- package/lib/basic_observability/BasicServiceMultiAZObservability.d.ts +8 -9
- package/lib/basic_observability/BasicServiceMultiAZObservability.js +97 -349
- package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.d.ts +66 -0
- package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.js +3 -0
- package/lib/basic_observability/props/BasicServiceDashboardProps.d.ts +27 -13
- package/lib/basic_observability/props/BasicServiceDashboardProps.js +1 -1
- package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.d.ts +10 -44
- package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.js +1 -1
- package/lib/basic_observability/props/NatGatewayDetectionProps.d.ts +31 -0
- package/lib/basic_observability/props/NatGatewayDetectionProps.js +3 -0
- package/lib/canaries/CanaryFunction.js +14 -13
- package/lib/canaries/CanaryTest.js +4 -4
- package/lib/canaries/src/canary.zip +0 -0
- package/lib/dashboards/ContributorInsightsWidget.d.ts +1 -1
- package/lib/dashboards/ContributorInsightsWidget.js +13 -17
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +2 -6
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +436 -510
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +2 -10
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +420 -416
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +3 -66
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +1 -1
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +7 -2
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +1 -1
- package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +7 -2
- package/lib/dashboards/props/OperationLatencyWidgetProps.js +1 -1
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +8 -8
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +1 -1
- package/lib/index.d.ts +56 -25
- package/lib/index.js +37 -19
- package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +79 -2
- package/lib/metrics/ApplicationLoadBalancerMetrics.js +883 -26
- package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +23 -0
- package/lib/metrics/AvailabilityAndLatencyMetrics.js +125 -31
- package/lib/metrics/NatGatewayMetrics.d.ts +113 -0
- package/lib/metrics/NatGatewayMetrics.js +357 -0
- package/lib/metrics/RegionalAvailabilityMetrics.js +9 -10
- package/lib/metrics/RegionalLatencyMetrics.d.ts +1 -1
- package/lib/metrics/RegionalLatencyMetrics.js +27 -20
- package/lib/metrics/ZonalAvailabilityMetrics.d.ts +2 -8
- package/lib/metrics/ZonalAvailabilityMetrics.js +13 -28
- package/lib/metrics/ZonalLatencyMetrics.d.ts +2 -1
- package/lib/metrics/ZonalLatencyMetrics.js +33 -23
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +4 -0
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +1 -1
- package/lib/metrics/props/LatencyMetricProps.d.ts +6 -0
- package/lib/metrics/props/LatencyMetricProps.js +1 -1
- package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +4 -0
- package/lib/metrics/props/ZonalAvailabilityMetricProps.js +1 -1
- package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +4 -0
- package/lib/metrics/props/ZonalLatencyMetricProps.js +1 -1
- package/lib/monitoring/src/monitoring-layer.zip +0 -0
- package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.d.ts +10 -0
- package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.js +15 -0
- package/lib/{basic_observability/props/ApplicationLoadBalancerLatencyOutlierCalculation.d.ts → outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.d.ts} +1 -1
- package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.js +23 -0
- package/lib/outlier-detection/LatencyOutlierMetricAggregation.d.ts +22 -0
- package/lib/outlier-detection/LatencyOutlierMetricAggregation.js +27 -0
- package/lib/outlier-detection/OutlierDetectionFunction.js +7 -6
- package/lib/outlier-detection/PacketLossOutlierAlgorithm.d.ts +10 -0
- package/lib/outlier-detection/PacketLossOutlierAlgorithm.js +15 -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.d.ts +4 -3
- package/lib/services/CanaryMetrics.js +3 -4
- package/lib/services/CanaryTestAvailabilityMetricsOverride.d.ts +21 -0
- package/lib/services/CanaryTestAvailabilityMetricsOverride.js +23 -0
- package/lib/services/CanaryTestLatencyMetricsOverride.d.ts +15 -0
- package/lib/services/CanaryTestLatencyMetricsOverride.js +20 -0
- package/lib/services/CanaryTestMetricsOverride.d.ts +1 -13
- package/lib/services/CanaryTestMetricsOverride.js +2 -4
- package/lib/services/ContributorInsightRuleDetails.js +1 -1
- package/lib/services/ICanaryMetrics.d.ts +4 -3
- package/lib/services/ICanaryMetrics.js +1 -1
- package/lib/services/ICanaryTestAvailabilityMetricsOverride.d.ts +23 -0
- package/lib/services/ICanaryTestAvailabilityMetricsOverride.js +3 -0
- package/lib/services/ICanaryTestLatencyMetricsOverride.d.ts +13 -0
- package/lib/services/ICanaryTestLatencyMetricsOverride.js +3 -0
- package/lib/services/ICanaryTestMetricsOverride.d.ts +0 -12
- package/lib/services/ICanaryTestMetricsOverride.js +1 -1
- package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +13 -3
- package/lib/services/IInstrumentedServiceMultiAZObservability.js +1 -1
- package/lib/services/IOperation.d.ts +8 -6
- package/lib/services/IOperation.js +1 -1
- package/lib/services/IOperationAvailabilityMetricDetails.d.ts +18 -0
- package/lib/services/IOperationAvailabilityMetricDetails.js +3 -0
- package/lib/services/IOperationLatencyMetricDetails.d.ts +12 -0
- package/lib/services/IOperationLatencyMetricDetails.js +3 -0
- package/lib/services/IOperationMetricDetails.d.ts +0 -12
- package/lib/services/IOperationMetricDetails.js +1 -1
- package/lib/services/IService.d.ts +18 -4
- package/lib/services/IService.js +1 -1
- package/lib/services/IServiceAvailabilityMetricDetails.d.ts +18 -0
- package/lib/services/IServiceAvailabilityMetricDetails.js +3 -0
- package/lib/services/IServiceLatencyMetricDetails.d.ts +12 -0
- package/lib/services/IServiceLatencyMetricDetails.js +3 -0
- package/lib/services/IServiceMetricDetails.d.ts +0 -12
- package/lib/services/IServiceMetricDetails.js +1 -1
- package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +15 -3
- package/lib/services/InstrumentedServiceMultiAZObservability.js +252 -228
- package/lib/services/Operation.d.ts +8 -6
- package/lib/services/Operation.js +4 -3
- package/lib/services/OperationAvailabilityMetricDetails.d.ts +22 -0
- package/lib/services/OperationAvailabilityMetricDetails.js +24 -0
- package/lib/services/OperationLatencyMetricDetails.d.ts +16 -0
- package/lib/services/OperationLatencyMetricDetails.js +21 -0
- package/lib/services/OperationMetricDetails.d.ts +1 -13
- package/lib/services/OperationMetricDetails.js +2 -8
- package/lib/services/Service.d.ts +18 -4
- package/lib/services/Service.js +4 -2
- package/lib/services/ServiceAvailabilityMetricDetails.d.ts +21 -0
- package/lib/services/ServiceAvailabilityMetricDetails.js +20 -0
- package/lib/services/ServiceLatencyMetricDetails.d.ts +15 -0
- package/lib/services/ServiceLatencyMetricDetails.js +19 -0
- package/lib/services/ServiceMetricDetails.d.ts +1 -13
- package/lib/services/ServiceMetricDetails.js +2 -4
- package/lib/services/props/CanaryMetricProps.d.ts +4 -3
- package/lib/services/props/CanaryMetricProps.js +1 -1
- package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.d.ts +22 -0
- package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.js +3 -0
- package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.d.ts +14 -0
- package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.js +3 -0
- package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +0 -16
- package/lib/services/props/CanaryTestMetricsOverrideProps.js +1 -1
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +50 -5
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +1 -1
- package/lib/services/props/MetricDimensions.js +1 -1
- package/lib/services/props/OperationAvailabilityMetricDetailsProps.d.ts +22 -0
- package/lib/services/props/OperationAvailabilityMetricDetailsProps.js +3 -0
- package/lib/services/props/OperationLatencyMetricDetailsProps.d.ts +14 -0
- package/lib/services/props/OperationLatencyMetricDetailsProps.js +3 -0
- package/lib/services/props/OperationMetricDetailsProps.d.ts +0 -16
- package/lib/services/props/OperationMetricDetailsProps.js +1 -1
- package/lib/services/props/OperationProps.d.ts +4 -3
- package/lib/services/props/OperationProps.js +1 -1
- package/lib/services/props/ServiceAvailabilityMetricDetailsProps.d.ts +18 -0
- package/lib/services/props/ServiceAvailabilityMetricDetailsProps.js +3 -0
- package/lib/services/props/ServiceLatencyMetricDetailsProps.d.ts +12 -0
- package/lib/services/props/ServiceLatencyMetricDetailsProps.js +3 -0
- package/lib/services/props/ServiceMetricDetailsProps.d.ts +0 -12
- package/lib/services/props/ServiceMetricDetailsProps.js +1 -1
- package/lib/services/props/ServiceProps.d.ts +18 -4
- package/lib/services/props/ServiceProps.js +1 -1
- package/lib/utilities/MetricsHelper.d.ts +17 -9
- package/lib/utilities/MetricsHelper.js +34 -10
- package/lib/utilities/MinimumUnhealthyTargets.d.ts +25 -0
- package/lib/utilities/MinimumUnhealthyTargets.js +3 -0
- package/package.json +14 -14
- package/rosetta/default.ts-fixture +72 -0
- package/rosetta/service.ts-fixture +144 -0
- package/lib/basic_observability/props/ApplicationLoadBalancerLatencyOutlierCalculation.js +0 -23
- package/lib/services/IBasicServiceMultiAZObservability.d.ts +0 -45
- package/lib/services/IBasicServiceMultiAZObservability.js +0 -3
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
|
|
2
2
|
import { AvailabilityMetricProps } from './props/AvailabilityMetricProps';
|
|
3
3
|
import { LatencyMetricProps } from './props/LatencyMetricProps';
|
|
4
|
+
import { ZonalAvailabilityMetricProps } from './props/ZonalAvailabilityMetricProps';
|
|
5
|
+
import { ZonalLatencyMetricProps } from './props/ZonalLatencyMetricProps';
|
|
4
6
|
/**
|
|
5
7
|
* Class for creating availability and latency metrics that can be used in alarms and graphs
|
|
6
8
|
*/
|
|
@@ -14,6 +16,15 @@ export declare class AvailabilityAndLatencyMetrics {
|
|
|
14
16
|
static createAvailabilityMetric(props: AvailabilityMetricProps, dimensions: {
|
|
15
17
|
[key: string]: string;
|
|
16
18
|
}): IMetric;
|
|
19
|
+
/**
|
|
20
|
+
* Creates availability metrics for a specific AZ
|
|
21
|
+
* @param props
|
|
22
|
+
* @param dimensions
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
25
|
+
static createZonalAvailabilityMetric(props: ZonalAvailabilityMetricProps, dimensions: {
|
|
26
|
+
[key: string]: string;
|
|
27
|
+
}): IMetric;
|
|
17
28
|
/**
|
|
18
29
|
* General purpose method to create latency metrics, the reason this creates an array of metrics while the
|
|
19
30
|
* equivalent availability metric method doesn't is because in availability, we can just sum the count of different
|
|
@@ -28,6 +39,15 @@ export declare class AvailabilityAndLatencyMetrics {
|
|
|
28
39
|
static createLatencyMetrics(props: LatencyMetricProps, dimensions: {
|
|
29
40
|
[key: string]: string;
|
|
30
41
|
}): IMetric[];
|
|
42
|
+
/**
|
|
43
|
+
* Creates a latency metric with the provided name
|
|
44
|
+
* @param props
|
|
45
|
+
* @param dimensions
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
static createLatencyMetric(props: LatencyMetricProps, dimensions: {
|
|
49
|
+
[key: string]: string;
|
|
50
|
+
}): IMetric;
|
|
31
51
|
/**
|
|
32
52
|
* Takes all of the success or failure latency metric names and creates an average of those
|
|
33
53
|
* names, if there's only 1 name, it just returns that metric
|
|
@@ -47,4 +67,7 @@ export declare class AvailabilityAndLatencyMetrics {
|
|
|
47
67
|
static createLatencyCountMetric(props: LatencyMetricProps, dimensions: {
|
|
48
68
|
[key: string]: string;
|
|
49
69
|
}): IMetric;
|
|
70
|
+
static createZonalLatencyCountMetric(props: ZonalLatencyMetricProps, dimensions: {
|
|
71
|
+
[key: string]: string;
|
|
72
|
+
}): IMetric;
|
|
50
73
|
}
|
|
@@ -17,21 +17,13 @@ class AvailabilityAndLatencyMetrics {
|
|
|
17
17
|
* @returns
|
|
18
18
|
*/
|
|
19
19
|
static createAvailabilityMetric(props, dimensions) {
|
|
20
|
-
let counter = 0;
|
|
21
|
-
let key = '';
|
|
22
20
|
let usingMetrics = {};
|
|
23
21
|
let successKeys = [];
|
|
24
22
|
let faultKeys = [];
|
|
25
23
|
if (props.metricDetails.successMetricNames !== undefined &&
|
|
26
24
|
props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT) {
|
|
27
25
|
props.metricDetails.successMetricNames.forEach((successMetric) => {
|
|
28
|
-
let
|
|
29
|
-
? ''
|
|
30
|
-
: props.keyPrefix.toLowerCase() + '_') +
|
|
31
|
-
props.metricDetails.operationName.toLowerCase() +
|
|
32
|
-
'_' +
|
|
33
|
-
successMetric.toLowerCase();
|
|
34
|
-
key = keyPrefix + '_' + counter++;
|
|
26
|
+
let key = `${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${successMetric.toLowerCase()}`;
|
|
35
27
|
successKeys.push(key);
|
|
36
28
|
usingMetrics[key] = new aws_cloudwatch_1.Metric({
|
|
37
29
|
namespace: props.metricDetails.metricNamespace,
|
|
@@ -47,13 +39,7 @@ class AvailabilityAndLatencyMetrics {
|
|
|
47
39
|
if (props.metricDetails.faultMetricNames !== undefined &&
|
|
48
40
|
props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT) {
|
|
49
41
|
props.metricDetails.faultMetricNames.forEach((faultMetric) => {
|
|
50
|
-
let
|
|
51
|
-
? ''
|
|
52
|
-
: props.keyPrefix.toLowerCase() + '_') +
|
|
53
|
-
props.metricDetails.operationName.toLowerCase() +
|
|
54
|
-
'_' +
|
|
55
|
-
faultMetric.toLowerCase();
|
|
56
|
-
key = keyPrefix + '_' + counter++;
|
|
42
|
+
let key = `${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${faultMetric.toLowerCase()}`;
|
|
57
43
|
faultKeys.push(key);
|
|
58
44
|
usingMetrics[key] = new aws_cloudwatch_1.Metric({
|
|
59
45
|
namespace: props.metricDetails.metricNamespace,
|
|
@@ -69,19 +55,19 @@ class AvailabilityAndLatencyMetrics {
|
|
|
69
55
|
let expression = '';
|
|
70
56
|
switch (props.metricType) {
|
|
71
57
|
case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_RATE:
|
|
72
|
-
expression = `((${successKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100`;
|
|
58
|
+
expression = `((${successKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100 + TIME_SERIES(0)`;
|
|
73
59
|
break;
|
|
74
60
|
case AvailabilityMetricType_1.AvailabilityMetricType.REQUEST_COUNT:
|
|
75
|
-
expression = `${successKeys.join('+')}+${faultKeys.join('+')}`;
|
|
61
|
+
expression = `${successKeys.join('+')}+${faultKeys.join('+')} + TIME_SERIES(0)`;
|
|
76
62
|
break;
|
|
77
63
|
case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT:
|
|
78
|
-
expression = `(${faultKeys.join('+')})`;
|
|
64
|
+
expression = `(${faultKeys.join('+')}) + TIME_SERIES(0)`;
|
|
79
65
|
break;
|
|
80
66
|
case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_RATE:
|
|
81
|
-
expression = `((${faultKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100`;
|
|
67
|
+
expression = `((${faultKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100 + TIME_SERIES(0)`;
|
|
82
68
|
break;
|
|
83
69
|
case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT:
|
|
84
|
-
expression = `(${successKeys.join('+')})`;
|
|
70
|
+
expression = `(${successKeys.join('+')}) + TIME_SERIES(0)`;
|
|
85
71
|
break;
|
|
86
72
|
}
|
|
87
73
|
return new aws_cloudwatch_1.MathExpression({
|
|
@@ -89,6 +75,75 @@ class AvailabilityAndLatencyMetrics {
|
|
|
89
75
|
label: props.label,
|
|
90
76
|
period: props.metricDetails.period,
|
|
91
77
|
usingMetrics: usingMetrics,
|
|
78
|
+
color: props.color
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Creates availability metrics for a specific AZ
|
|
83
|
+
* @param props
|
|
84
|
+
* @param dimensions
|
|
85
|
+
* @returns
|
|
86
|
+
*/
|
|
87
|
+
static createZonalAvailabilityMetric(props, dimensions) {
|
|
88
|
+
let usingMetrics = {};
|
|
89
|
+
let successKeys = [];
|
|
90
|
+
let faultKeys = [];
|
|
91
|
+
if (props.metricDetails.successMetricNames !== undefined &&
|
|
92
|
+
props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT) {
|
|
93
|
+
props.metricDetails.successMetricNames.forEach((successMetric) => {
|
|
94
|
+
let key = `${props.availabilityZone.substring(props.availabilityZone.length - 1)}_${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${successMetric.toLowerCase()}`;
|
|
95
|
+
successKeys.push(key);
|
|
96
|
+
usingMetrics[key] = new aws_cloudwatch_1.Metric({
|
|
97
|
+
namespace: props.metricDetails.metricNamespace,
|
|
98
|
+
metricName: successMetric,
|
|
99
|
+
unit: props.metricDetails.unit,
|
|
100
|
+
period: props.metricDetails.period,
|
|
101
|
+
statistic: props.metricDetails.alarmStatistic,
|
|
102
|
+
dimensionsMap: dimensions,
|
|
103
|
+
label: successMetric,
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (props.metricDetails.faultMetricNames !== undefined &&
|
|
108
|
+
props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT) {
|
|
109
|
+
props.metricDetails.faultMetricNames.forEach((faultMetric) => {
|
|
110
|
+
let key = `${props.availabilityZone.substring(props.availabilityZone.length - 1)}_${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${faultMetric.toLowerCase()}`;
|
|
111
|
+
faultKeys.push(key);
|
|
112
|
+
usingMetrics[key] = new aws_cloudwatch_1.Metric({
|
|
113
|
+
namespace: props.metricDetails.metricNamespace,
|
|
114
|
+
metricName: faultMetric,
|
|
115
|
+
unit: props.metricDetails.unit,
|
|
116
|
+
period: props.metricDetails.period,
|
|
117
|
+
statistic: props.metricDetails.alarmStatistic,
|
|
118
|
+
dimensionsMap: dimensions,
|
|
119
|
+
label: faultMetric,
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
let expression = '';
|
|
124
|
+
switch (props.metricType) {
|
|
125
|
+
case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_RATE:
|
|
126
|
+
expression = `((${successKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100 + TIME_SERIES(0)`;
|
|
127
|
+
break;
|
|
128
|
+
case AvailabilityMetricType_1.AvailabilityMetricType.REQUEST_COUNT:
|
|
129
|
+
expression = `${successKeys.join('+')}+${faultKeys.join('+')} + TIME_SERIES(0)`;
|
|
130
|
+
break;
|
|
131
|
+
case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT:
|
|
132
|
+
expression = `(${faultKeys.join('+')}) + TIME_SERIES(0)`;
|
|
133
|
+
break;
|
|
134
|
+
case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_RATE:
|
|
135
|
+
expression = `((${faultKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100 + TIME_SERIES(0)`;
|
|
136
|
+
break;
|
|
137
|
+
case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT:
|
|
138
|
+
expression = `(${successKeys.join('+')}) + TIME_SERIES(0)`;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
return new aws_cloudwatch_1.MathExpression({
|
|
142
|
+
expression: expression,
|
|
143
|
+
label: props.label,
|
|
144
|
+
period: props.metricDetails.period,
|
|
145
|
+
usingMetrics: usingMetrics,
|
|
146
|
+
color: props.color
|
|
92
147
|
});
|
|
93
148
|
}
|
|
94
149
|
/**
|
|
@@ -113,16 +168,38 @@ class AvailabilityAndLatencyMetrics {
|
|
|
113
168
|
names = props.metricDetails.faultMetricNames;
|
|
114
169
|
break;
|
|
115
170
|
}
|
|
116
|
-
return names.map((
|
|
117
|
-
metricName:
|
|
171
|
+
return names.map((metricName) => new aws_cloudwatch_1.Metric({
|
|
172
|
+
metricName: metricName,
|
|
118
173
|
namespace: props.metricDetails.metricNamespace,
|
|
119
174
|
unit: props.metricDetails.unit,
|
|
120
175
|
period: props.metricDetails.period,
|
|
121
176
|
statistic: props.statistic,
|
|
122
177
|
dimensionsMap: dimensions,
|
|
123
178
|
label: props.label,
|
|
179
|
+
color: props.color
|
|
124
180
|
}));
|
|
125
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Creates a latency metric with the provided name
|
|
184
|
+
* @param props
|
|
185
|
+
* @param dimensions
|
|
186
|
+
* @returns
|
|
187
|
+
*/
|
|
188
|
+
static createLatencyMetric(props, dimensions) {
|
|
189
|
+
if (!(props.metricName)) {
|
|
190
|
+
throw new Error("You must provide a metric name.");
|
|
191
|
+
}
|
|
192
|
+
return new aws_cloudwatch_1.Metric({
|
|
193
|
+
metricName: props.metricName,
|
|
194
|
+
namespace: props.metricDetails.metricNamespace,
|
|
195
|
+
unit: props.metricDetails.unit,
|
|
196
|
+
period: props.metricDetails.period,
|
|
197
|
+
statistic: props.statistic,
|
|
198
|
+
dimensionsMap: dimensions,
|
|
199
|
+
label: props.label,
|
|
200
|
+
color: props.color
|
|
201
|
+
});
|
|
202
|
+
}
|
|
126
203
|
/**
|
|
127
204
|
* Takes all of the success or failure latency metric names and creates an average of those
|
|
128
205
|
* names, if there's only 1 name, it just returns that metric
|
|
@@ -150,6 +227,7 @@ class AvailabilityAndLatencyMetrics {
|
|
|
150
227
|
label: props.label,
|
|
151
228
|
period: props.metricDetails.period,
|
|
152
229
|
usingMetrics: usingMetrics,
|
|
230
|
+
color: props.color
|
|
153
231
|
});
|
|
154
232
|
}
|
|
155
233
|
}
|
|
@@ -168,22 +246,38 @@ class AvailabilityAndLatencyMetrics {
|
|
|
168
246
|
else {
|
|
169
247
|
let usingMetrics = {};
|
|
170
248
|
latencyMetrics.forEach((metric, index) => {
|
|
171
|
-
let
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
249
|
+
let key = `${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${index}`;
|
|
250
|
+
usingMetrics[key] = metric;
|
|
251
|
+
});
|
|
252
|
+
return new aws_cloudwatch_1.MathExpression({
|
|
253
|
+
expression: Object.keys(usingMetrics).join('+'),
|
|
254
|
+
label: props.label,
|
|
255
|
+
period: props.metricDetails.period,
|
|
256
|
+
usingMetrics: usingMetrics,
|
|
257
|
+
color: props.color
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
static createZonalLatencyCountMetric(props, dimensions) {
|
|
262
|
+
let latencyMetrics = AvailabilityAndLatencyMetrics.createLatencyMetrics(props, dimensions);
|
|
263
|
+
if (latencyMetrics.length == 1) {
|
|
264
|
+
return latencyMetrics[0];
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
let usingMetrics = {};
|
|
268
|
+
latencyMetrics.forEach((metric, index) => {
|
|
269
|
+
let key = `${props.availabilityZone.substring(props.availabilityZone.length - 1)}_${props.metricDetails.operationName.toLowerCase()}_${props.metricType.toString().toLowerCase()}_${index}`;
|
|
270
|
+
usingMetrics[key] = metric;
|
|
178
271
|
});
|
|
179
272
|
return new aws_cloudwatch_1.MathExpression({
|
|
180
273
|
expression: Object.keys(usingMetrics).join('+'),
|
|
181
274
|
label: props.label,
|
|
182
275
|
period: props.metricDetails.period,
|
|
183
276
|
usingMetrics: usingMetrics,
|
|
277
|
+
color: props.color
|
|
184
278
|
});
|
|
185
279
|
}
|
|
186
280
|
}
|
|
187
281
|
}
|
|
188
282
|
exports.AvailabilityAndLatencyMetrics = AvailabilityAndLatencyMetrics;
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0cmljcy9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLCtEQUE2RTtBQUc3RSxnRkFBNkU7QUFDN0Usc0VBQW1FO0FBRW5FOztHQUVHO0FBQ0gsTUFBYSw2QkFBNkI7SUFFeEM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQThCLEVBQzlCLFVBQXFDO1FBRXJDLElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQUcsR0FBVyxFQUFFLENBQUM7UUFFckIsSUFBSSxZQUFZLEdBQStCLEVBQUUsQ0FBQztRQUVsRCxJQUFJLFdBQVcsR0FBYSxFQUFFLENBQUM7UUFDL0IsSUFBSSxTQUFTLEdBQWEsRUFBRSxDQUFDO1FBRTdCLElBQ0UsS0FBSyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO1lBQ3BELEtBQUssQ0FBQyxVQUFVLElBQUksK0NBQXNCLENBQUMsV0FBVyxFQUN0RCxDQUFDO1lBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQzVDLENBQUMsYUFBcUIsRUFBRSxFQUFFO2dCQUN4QixJQUFJLFNBQVMsR0FDWCxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDckQsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUN4QyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7b0JBQy9DLEdBQUc7b0JBQ0gsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dC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eEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDL0MsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2dCQUNsQyxZQUFZLEVBQUUsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBak9ELHNFQWlPQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElNZXRyaWMsIE1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9MYXRlbmN5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gJy4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlJztcbmltcG9ydCB7IExhdGVuY3lNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0xhdGVuY3lNZXRyaWNUeXBlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgY3JlYXRpbmcgYXZhaWxhYmlsaXR5IGFuZCBsYXRlbmN5IG1ldHJpY3MgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbGFybXMgYW5kIGdyYXBoc1xuICovXG5leHBvcnQgY2xhc3MgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3Mge1xuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHB1cnBvc2UgbWV0aG9kIHRvIGNyZWF0ZSBhdmFpbGFiaWxpdHkgbWV0cmljc1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVBdmFpbGFiaWxpdHlNZXRyaWMoXG4gICAgcHJvcHM6IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWMge1xuICAgIGxldCBjb3VudGVyOiBudW1iZXIgPSAwO1xuICAgIGxldCBrZXk6IHN0cmluZyA9ICcnO1xuXG4gICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcblxuICAgIGxldCBzdWNjZXNzS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZmF1bHRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMubWV0cmljVHlwZSAhPSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UXG4gICAgKSB7XG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLnN1Y2Nlc3NNZXRyaWNOYW1lcy5mb3JFYWNoKFxuICAgICAgICAoc3VjY2Vzc01ldHJpYzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGtleVByZWZpeCA9XG4gICAgICAgICAgICAocHJvcHMua2V5UHJlZml4ID09PSB1bmRlZmluZWQgfHwgcHJvcHMua2V5UHJlZml4ID09ICcnXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiBwcm9wcy5rZXlQcmVmaXgudG9Mb3dlckNhc2UoKSArICdfJykgK1xuICAgICAgICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICAgJ18nICtcbiAgICAgICAgICAgIHN1Y2Nlc3NNZXRyaWMudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGtleSA9IGtleVByZWZpeCArICdfJyArIGNvdW50ZXIrKztcbiAgICAgICAgICBzdWNjZXNzS2V5cy5wdXNoKGtleSk7XG5cbiAgICAgICAgICB1c2luZ01ldHJpY3Nba2V5XSA9IG5ldyBNZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZSxcbiAgICAgICAgICAgIG1ldHJpY05hbWU6IHN1Y2Nlc3NNZXRyaWMsXG4gICAgICAgICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5tZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljLFxuICAgICAgICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgICAgICAgIGxhYmVsOiBzdWNjZXNzTWV0cmljLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMubWV0cmljVHlwZSAhPSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfQ09VTlRcbiAgICApIHtcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMuZmF1bHRNZXRyaWNOYW1lcy5mb3JFYWNoKChmYXVsdE1ldHJpYykgPT4ge1xuICAgICAgICBsZXQga2V5UHJlZml4ID1cbiAgICAgICAgICAocHJvcHMua2V5UHJlZml4ID09PSB1bmRlZmluZWQgfHwgcHJvcHMua2V5UHJlZml4ID09ICcnXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHByb3BzLmtleVByZWZpeC50b0xvd2VyQ2FzZSgpICsgJ18nKSArXG4gICAgICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICdfJyArXG4gICAgICAgICAgZmF1bHRNZXRyaWMudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBrZXkgPSBrZXlQcmVmaXggKyAnXycgKyBjb3VudGVyKys7XG4gICAgICAgIGZhdWx0S2V5cy5wdXNoKGtleSk7XG5cbiAgICAgICAgdXNpbmdNZXRyaWNzW2tleV0gPSBuZXcgTWV0cmljKHtcbiAgICAgICAgICBuYW1lc3BhY2U6IHByb3BzLm1ldHJpY0RldGFpbHMubWV0cmljTmFtZXNwYWNlLFxuICAgICAgICAgIG1ldHJpY05hbWU6IGZhdWx0TWV0cmljLFxuICAgICAgICAgIHVuaXQ6IHByb3BzLm1ldHJpY0RldGFpbHMudW5pdCxcbiAgICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgIHN0YXRpc3RpYzogcHJvcHMubWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyxcbiAgICAgICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgICAgIGxhYmVsOiBmYXVsdE1ldHJpYyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gJyc7XG5cbiAgICBzd2l0Y2ggKHByb3BzLm1ldHJpY1R5cGUpIHtcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEU6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCgke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0pIC8gKCR7c3VjY2Vzc0tleXMuam9pbignKycpfSske2ZhdWx0S2V5cy5qb2luKCcrJyl9KSkgKiAxMDBgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5SRVFVRVNUX0NPVU5UOlxuICAgICAgICBleHByZXNzaW9uID0gYCR7c3VjY2Vzc0tleXMuam9pbignKycpfSske2ZhdWx0S2V5cy5qb2luKCcrJyl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfUkFURTpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoKCR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pIC8gKCR7c3VjY2Vzc0tleXMuam9pbignKycpfSske2ZhdWx0S2V5cy5qb2luKCcrJyl9KSkgKiAxMDBgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UOlxuICAgICAgICBleHByZXNzaW9uID0gYCgke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0pYDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYWwgcHVycG9zZSBtZXRob2QgdG8gY3JlYXRlIGxhdGVuY3kgbWV0cmljcywgdGhlIHJlYXNvbiB0aGlzIGNyZWF0ZXMgYW4gYXJyYXkgb2YgbWV0cmljcyB3aGlsZSB0aGVcbiAgICogZXF1aXZhbGVudCBhdmFpbGFiaWxpdHkgbWV0cmljIG1ldGhvZCBkb2Vzbid0IGlzIGJlY2F1c2UgaW4gYXZhaWxhYmlsaXR5LCB3ZSBjYW4ganVzdCBzdW0gdGhlIGNvdW50IG9mIGRpZmZlcmVudFxuICAgKiBtZXRyaWMgbmFtZXMgd2hpbGUgZm9yIGxhdGVuY3kgd2UgY2FuJ3Qgc3VtIHRoZSBjb3VudCBiZWNhdXNlIHRoYXQncyBub3Qgd2hhdCdzIGJlaW5nIG1lYXN1cmVkLiBJdCBhbGxvd3MgdGhlXG4gICAqIGNhbGxlciB0byBkZWNpZGUgaWYgdGhleSBvbmx5IHdhbnQgdG8gdGFrZSB0aGUgZmlyc3QgbmFtZSwgb3IgYXZlcmFnZSBhbGwgb2YgdGhlIG5hbWVzXG4gICAqIChsaWtlIFN1Y2Nlc3NMYXRlbmN5IGFuZCBCaWdJdGVtU3VjY2Vzc0xhdGVuY3kpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVMYXRlbmN5TWV0cmljcyhcbiAgICBwcm9wczogTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWNbXSB7XG4gICAgbGV0IG5hbWVzOiBzdHJpbmdbXTtcblxuICAgIHN3aXRjaCAocHJvcHMubWV0cmljVHlwZSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgTGF0ZW5jeU1ldHJpY1R5cGUuU1VDQ0VTU19MQVRFTkNZOlxuICAgICAgICBuYW1lcyA9IHByb3BzLm1ldHJpY0RldGFpbHMuc3VjY2Vzc01ldHJpY05hbWVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTGF0ZW5jeU1ldHJpY1R5cGUuRkFVTFRfTEFURU5DWTpcbiAgICAgICAgbmFtZXMgPSBwcm9wcy5tZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXM7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lcy5tYXAoXG4gICAgICAoeCkgPT5cbiAgICAgICAgbmV3IE1ldHJpYyh7XG4gICAgICAgICAgbWV0cmljTmFtZTogeCxcbiAgICAgICAgICBuYW1lc3BhY2U6IHByb3BzLm1ldHJpY0RldGFpbHMubWV0cmljTmFtZXNwYWNlLFxuICAgICAgICAgIHVuaXQ6IHByb3BzLm1ldHJpY0RldGFpbHMudW5pdCxcbiAgICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgIHN0YXRpc3RpYzogcHJvcHMuc3RhdGlzdGljLFxuICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFsbCBvZiB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIGxhdGVuY3kgbWV0cmljIG5hbWVzIGFuZCBjcmVhdGVzIGFuIGF2ZXJhZ2Ugb2YgdGhvc2VcbiAgICogbmFtZXMsIGlmIHRoZXJlJ3Mgb25seSAxIG5hbWUsIGl0IGp1c3QgcmV0dXJucyB0aGF0IG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVBdmVyYWdlTGF0ZW5jeU1ldHJpYyhcbiAgICBwcm9wczogTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWMge1xuICAgIGxldCBsYXRlbmN5TWV0cmljczogSU1ldHJpY1tdID1cbiAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUxhdGVuY3lNZXRyaWNzKHByb3BzLCBkaW1lbnNpb25zKTtcblxuICAgIGlmIChsYXRlbmN5TWV0cmljcy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxhdGVuY3lNZXRyaWNzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgICBsYXRlbmN5TWV0cmljcy5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGtleVByZWZpeDogc3RyaW5nID1cbiAgICAgICAgICAocHJvcHMua2V5UHJlZml4ID09PSB1bmRlZmluZWQgfHwgcHJvcHMua2V5UHJlZml4ID09ICcnXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHByb3BzLmtleVByZWZpeC50b0xvd2VyQ2FzZSgpICsgJ18nKSArXG4gICAgICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICdfJyArXG4gICAgICAgICAgcHJvcHMubWV0cmljVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgdXNpbmdNZXRyaWNzW2tleVByZWZpeCArIGluZGV4XSA9IG1ldHJpYztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogYCgke09iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpfSkvJHtPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmxlbmd0aH1gLFxuICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb3VudCBvZiBoaWdoIGxhdGVuY3kgbWV0cmljcyBmb3IgZWl0aGVyIFN1Y2Nlc3NMYXRlbmN5IG9yIEZhdWx0TGF0ZW5jeSwgd2lsbCB0b3RhbFxuICAgKiB0aGUgY291bnQgb2YgcmVxdWVzdHMgdGhhdCBleGNlZWQgYSB0aHJlc2hvbGQgeW91IGRlZmluZSBpbiB5b3VyIHN0YXRpc3RpYywgbGlrZSBUQygyMDA6KSBhY3Jvc3NcbiAgICogYWxsIG1ldHJpYyBuYW1lcyB0aGF0IGFyZSBwYXJ0IG9mIGVpdGhlciBTdWNjZXNzIG9yIEZhdWx0IGxhdGVuY3kuXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUxhdGVuY3lDb3VudE1ldHJpYyhcbiAgICBwcm9wczogTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWMge1xuICAgIGxldCBsYXRlbmN5TWV0cmljczogSU1ldHJpY1tdID1cbiAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUxhdGVuY3lNZXRyaWNzKHByb3BzLCBkaW1lbnNpb25zKTtcblxuICAgIGlmIChsYXRlbmN5TWV0cmljcy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxhdGVuY3lNZXRyaWNzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgICBsYXRlbmN5TWV0cmljcy5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGtleVByZWZpeDogc3RyaW5nID1cbiAgICAgICAgICAocHJvcHMua2V5UHJlZml4ID09PSB1bmRlZmluZWQgfHwgcHJvcHMua2V5UHJlZml4ID09ICcnXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHByb3BzLmtleVByZWZpeC50b0xvd2VyQ2FzZSgpICsgJ18nKSArXG4gICAgICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICdfJyArXG4gICAgICAgICAgcHJvcHMubWV0cmljVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgdXNpbmdNZXRyaWNzW2tleVByZWZpeCArIGluZGV4XSA9IG1ldHJpYztcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyksXG4gICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0cmljcy9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLCtEQUE2RTtBQUc3RSxnRkFBNkU7QUFDN0Usc0VBQW1FO0FBSW5FOztHQUVHO0FBQ0gsTUFBYSw2QkFBNkI7SUFFeEM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQThCLEVBQzlCLFVBQXFDO1FBRXJDLElBQUksWUFBWSxHQUErQixFQUFFLENBQUM7UUFFbEQsSUFBSSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBQy9CLElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQztRQUU3QixJQUNFLEtBQUssQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEtBQUssU0FBUztZQUNwRCxLQUFLLENBQUMsVUFBVSxJQUFJLCtDQUFzQixDQUFDLFdBQVcsRUFDdEQsQ0FBQztZQUNELEtBQUssQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBcUIsRUFBRSxFQUFFO2dCQUNyRSxJQUFJLEdBQUcsR0FBVyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBRW5KLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXRCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLHVCQUFNLENBQUM7b0JBQzdCLFNBQVMsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWU7b0JBQzlDLFVBQVUsRUFBRSxhQUFhO29CQUN6QixJQUFJLEVB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SSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQy9DLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDbEMsWUFBWSxFQUFFLFlBQVk7Z0JBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeFZELHNFQXdWQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElNZXRyaWMsIE1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9MYXRlbmN5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gJy4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlJztcbmltcG9ydCB7IExhdGVuY3lNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0xhdGVuY3lNZXRyaWNUeXBlJztcbmltcG9ydCB7IFpvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1pvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgWm9uYWxMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1pvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgY3JlYXRpbmcgYXZhaWxhYmlsaXR5IGFuZCBsYXRlbmN5IG1ldHJpY3MgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbGFybXMgYW5kIGdyYXBoc1xuICovXG5leHBvcnQgY2xhc3MgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3Mge1xuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHB1cnBvc2UgbWV0aG9kIHRvIGNyZWF0ZSBhdmFpbGFiaWxpdHkgbWV0cmljc1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHBhcmFtIGRpbWVuc2lvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVBdmFpbGFiaWxpdHlNZXRyaWMoXG4gICAgcHJvcHM6IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWMge1xuICAgIGxldCB1c2luZ01ldHJpY3M6IHsgW2tleTogc3RyaW5nXTogSU1ldHJpYyB9ID0ge307XG5cbiAgICBsZXQgc3VjY2Vzc0tleXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGZhdWx0S2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMuc3VjY2Vzc01ldHJpY05hbWVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1ldHJpY1R5cGUgIT0gQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVFxuICAgICkge1xuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXMuZm9yRWFjaCgoc3VjY2Vzc01ldHJpYzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgbGV0IGtleTogc3RyaW5nID0gYCR7cHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9XyR7cHJvcHMubWV0cmljVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCl9XyR7c3VjY2Vzc01ldHJpYy50b0xvd2VyQ2FzZSgpfWA7XG5cbiAgICAgICAgICBzdWNjZXNzS2V5cy5wdXNoKGtleSk7XG5cbiAgICAgICAgICB1c2luZ01ldHJpY3Nba2V5XSA9IG5ldyBNZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZSxcbiAgICAgICAgICAgIG1ldHJpY05hbWU6IHN1Y2Nlc3NNZXRyaWMsXG4gICAgICAgICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5tZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljLFxuICAgICAgICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgICAgICAgIGxhYmVsOiBzdWNjZXNzTWV0cmljLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMubWV0cmljVHlwZSAhPSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfQ09VTlRcbiAgICApIHtcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMuZmF1bHRNZXRyaWNOYW1lcy5mb3JFYWNoKChmYXVsdE1ldHJpYykgPT4ge1xuICAgICAgICBsZXQga2V5OiBzdHJpbmcgPSBgJHtwcm9wcy5tZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX1fJHtwcm9wcy5tZXRyaWNUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1fJHtmYXVsdE1ldHJpYy50b0xvd2VyQ2FzZSgpfWA7XG5cbiAgICAgICAgZmF1bHRLZXlzLnB1c2goa2V5KTtcblxuICAgICAgICB1c2luZ01ldHJpY3Nba2V5XSA9IG5ldyBNZXRyaWMoe1xuICAgICAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgICAgbWV0cmljTmFtZTogZmF1bHRNZXRyaWMsXG4gICAgICAgICAgdW5pdDogcHJvcHMubWV0cmljRGV0YWlscy51bml0LFxuICAgICAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5tZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljLFxuICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICAgICAgbGFiZWw6IGZhdWx0TWV0cmljLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBleHByZXNzaW9uOiBzdHJpbmcgPSAnJztcblxuICAgIHN3aXRjaCAocHJvcHMubWV0cmljVHlwZSkge1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfUkFURTpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoKCR7c3VjY2Vzc0tleXMuam9pbignKycpfSkgLyAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KyR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pKSAqIDEwMCArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuUkVRVUVTVF9DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0rJHtmYXVsdEtleXMuam9pbignKycpfSArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pICsgVElNRV9TRVJJRVMoMClgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9SQVRFOlxuICAgICAgICBleHByZXNzaW9uID0gYCgoJHtmYXVsdEtleXMuam9pbignKycpfSkgLyAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KyR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pKSAqIDEwMCArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KSArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIENyZWF0ZXMgYXZhaWxhYmlsaXR5IG1ldHJpY3MgZm9yIGEgc3BlY2lmaWMgQVpcbiAgICogQHBhcmFtIHByb3BzIFxuICAgKiBAcGFyYW0gZGltZW5zaW9ucyBcbiAgICogQHJldHVybnMgXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWMoXG4gICAgcHJvcHM6IFpvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMsXG4gICAgZGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogSU1ldHJpYyB7XG4gICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcblxuICAgIGxldCBzdWNjZXNzS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZmF1bHRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMubWV0cmljVHlwZSAhPSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UXG4gICAgKSB7XG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLnN1Y2Nlc3NNZXRyaWNOYW1lcy5mb3JFYWNoKChzdWNjZXNzTWV0cmljOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBsZXQga2V5OiBzdHJpbmcgPSBgJHtwcm9wcy5hdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhwcm9wcy5hdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpfV8ke3Byb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfV8ke3Byb3BzLm1ldHJpY1R5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfV8ke3N1Y2Nlc3NNZXRyaWMudG9Mb3dlckNhc2UoKX1gO1xuXG4gICAgICAgICAgc3VjY2Vzc0tleXMucHVzaChrZXkpO1xuXG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2tleV0gPSBuZXcgTWV0cmljKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiBzdWNjZXNzTWV0cmljLFxuICAgICAgICAgICAgdW5pdDogcHJvcHMubWV0cmljRGV0YWlscy51bml0LFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogcHJvcHMubWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyxcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICAgICAgICBsYWJlbDogc3VjY2Vzc01ldHJpYyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5mYXVsdE1ldHJpY05hbWVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1ldHJpY1R5cGUgIT0gQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UXG4gICAgKSB7XG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXMuZm9yRWFjaCgoZmF1bHRNZXRyaWMpID0+IHtcbiAgICAgICAgbGV0IGtleTogc3RyaW5nID0gYCR7cHJvcHMuYXZhaWxhYmlsaXR5Wm9uZS5zdWJzdHJpbmcocHJvcHMuYXZhaWxhYmlsaXR5Wm9uZS5sZW5ndGggLSAxKX1fJHtwcm9wcy5tZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX1fJHtwcm9wcy5tZXRyaWNUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1fJHtmYXVsdE1ldHJpYy50b0xvd2VyQ2FzZSgpfWA7XG5cbiAgICAgICAgZmF1bHRLZXlzLnB1c2goa2V5KTtcblxuICAgICAgICB1c2luZ01ldHJpY3Nba2V5XSA9IG5ldyBNZXRyaWMoe1xuICAgICAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgICAgbWV0cmljTmFtZTogZmF1bHRNZXRyaWMsXG4gICAgICAgICAgdW5pdDogcHJvcHMubWV0cmljRGV0YWlscy51bml0LFxuICAgICAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgICAgc3RhdGlzdGljOiBwcm9wcy5tZXRyaWNEZXRhaWxzLmFsYXJtU3RhdGlzdGljLFxuICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICAgICAgbGFiZWw6IGZhdWx0TWV0cmljLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBleHByZXNzaW9uOiBzdHJpbmcgPSAnJztcblxuICAgIHN3aXRjaCAocHJvcHMubWV0cmljVHlwZSkge1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfUkFURTpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoKCR7c3VjY2Vzc0tleXMuam9pbignKycpfSkgLyAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KyR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pKSAqIDEwMCArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuUkVRVUVTVF9DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0rJHtmYXVsdEtleXMuam9pbignKycpfSArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pICsgVElNRV9TRVJJRVMoMClgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9SQVRFOlxuICAgICAgICBleHByZXNzaW9uID0gYCgoJHtmYXVsdEtleXMuam9pbignKycpfSkgLyAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KyR7ZmF1bHRLZXlzLmpvaW4oJysnKX0pKSAqIDEwMCArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KSArIFRJTUVfU0VSSUVTKDApYDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBwdXJwb3NlIG1ldGhvZCB0byBjcmVhdGUgbGF0ZW5jeSBtZXRyaWNzLCB0aGUgcmVhc29uIHRoaXMgY3JlYXRlcyBhbiBhcnJheSBvZiBtZXRyaWNzIHdoaWxlIHRoZVxuICAgKiBlcXVpdmFsZW50IGF2YWlsYWJpbGl0eSBtZXRyaWMgbWV0aG9kIGRvZXNuJ3QgaXMgYmVjYXVzZSBpbiBhdmFpbGFiaWxpdHksIHdlIGNhbiBqdXN0IHN1bSB0aGUgY291bnQgb2YgZGlmZmVyZW50XG4gICAqIG1ldHJpYyBuYW1lcyB3aGlsZSBmb3IgbGF0ZW5jeSB3ZSBjYW4ndCBzdW0gdGhlIGNvdW50IGJlY2F1c2UgdGhhdCdzIG5vdCB3aGF0J3MgYmVpbmcgbWVhc3VyZWQuIEl0IGFsbG93cyB0aGVcbiAgICogY2FsbGVyIHRvIGRlY2lkZSBpZiB0aGV5IG9ubHkgd2FudCB0byB0YWtlIHRoZSBmaXJzdCBuYW1lLCBvciBhdmVyYWdlIGFsbCBvZiB0aGUgbmFtZXNcbiAgICogKGxpa2UgU3VjY2Vzc0xhdGVuY3kgYW5kIEJpZ0l0ZW1TdWNjZXNzTGF0ZW5jeSkuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcGFyYW0gZGltZW5zaW9uc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUxhdGVuY3lNZXRyaWNzKFxuICAgIHByb3BzOiBMYXRlbmN5TWV0cmljUHJvcHMsXG4gICAgZGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogSU1ldHJpY1tdIHtcbiAgICBsZXQgbmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgc3dpdGNoIChwcm9wcy5tZXRyaWNUeXBlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSBMYXRlbmN5TWV0cmljVHlwZS5TVUNDRVNTX0xBVEVOQ1k6XG4gICAgICAgIG5hbWVzID0gcHJvcHMubWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMYXRlbmN5TWV0cmljVHlwZS5GQVVMVF9MQVRFTkNZOlxuICAgICAgICBuYW1lcyA9IHByb3BzLm1ldHJpY0RldGFpbHMuZmF1bHRNZXRyaWNOYW1lcztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVzLm1hcChcbiAgICAgIChtZXRyaWNOYW1lOiBzdHJpbmcpID0+XG4gICAgICAgIG5ldyBNZXRyaWMoe1xuICAgICAgICAgIG1ldHJpY05hbWU6IG1ldHJpY05hbWUsXG4gICAgICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZSxcbiAgICAgICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBzdGF0aXN0aWM6IHByb3BzLnN0YXRpc3RpYyxcbiAgICAgICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgICBjb2xvcjogcHJvcHMuY29sb3JcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGF0ZW5jeSBtZXRyaWMgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZVxuICAgKiBAcGFyYW0gcHJvcHMgXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zIFxuICAgKiBAcmV0dXJucyBcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVMYXRlbmN5TWV0cmljKFxuICAgIHByb3BzOiBMYXRlbmN5TWV0cmljUHJvcHMsXG4gICAgZGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfVxuICApOiBJTWV0cmljIHtcbiAgICBpZiAoIShwcm9wcy5tZXRyaWNOYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcHJvdmlkZSBhIG1ldHJpYyBuYW1lLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBwcm9wcy5tZXRyaWNOYW1lISxcbiAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgc3RhdGlzdGljOiBwcm9wcy5zdGF0aXN0aWMsXG4gICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgY29sb3I6IHByb3BzLmNvbG9yXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYWxsIG9mIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgbGF0ZW5jeSBtZXRyaWMgbmFtZXMgYW5kIGNyZWF0ZXMgYW4gYXZlcmFnZSBvZiB0aG9zZVxuICAgKiBuYW1lcywgaWYgdGhlcmUncyBvbmx5IDEgbmFtZSwgaXQganVzdCByZXR1cm5zIHRoYXQgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcGFyYW0gZGltZW5zaW9uc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUF2ZXJhZ2VMYXRlbmN5TWV0cmljKFxuICAgIHByb3BzOiBMYXRlbmN5TWV0cmljUHJvcHMsXG4gICAgZGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogSU1ldHJpYyB7XG4gICAgbGV0IGxhdGVuY3lNZXRyaWNzOiBJTWV0cmljW10gPVxuICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlTGF0ZW5jeU1ldHJpY3MocHJvcHMsIGRpbWVuc2lvbnMpO1xuXG4gICAgaWYgKGxhdGVuY3lNZXRyaWNzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gbGF0ZW5jeU1ldHJpY3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB1c2luZ01ldHJpY3M6IHsgW2tleTogc3RyaW5nXTogSU1ldHJpYyB9ID0ge307XG5cbiAgICAgIGxhdGVuY3lNZXRyaWNzLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQga2V5UHJlZml4OiBzdHJpbmcgPVxuICAgICAgICAgIChwcm9wcy5rZXlQcmVmaXggPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5rZXlQcmVmaXggPT0gJydcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogcHJvcHMua2V5UHJlZml4LnRvTG93ZXJDYXNlKCkgKyAnXycpICtcbiAgICAgICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJ18nICtcbiAgICAgICAgICBwcm9wcy5tZXRyaWNUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICB1c2luZ01ldHJpY3Nba2V5UHJlZml4ICsgaW5kZXhdID0gbWV0cmljO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiBgKCR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyl9KS8ke09iamVjdC5rZXlzKHVzaW5nTWV0cmljcykubGVuZ3RofWAsXG4gICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgdXNpbmdNZXRyaWNzOiB1c2luZ01ldHJpY3MsXG4gICAgICAgIGNvbG9yOiBwcm9wcy5jb2xvclxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb3VudCBvZiBoaWdoIGxhdGVuY3kgbWV0cmljcyBmb3IgZWl0aGVyIFN1Y2Nlc3NMYXRlbmN5IG9yIEZhdWx0TGF0ZW5jeSwgd2lsbCB0b3RhbFxuICAgKiB0aGUgY291bnQgb2YgcmVxdWVzdHMgdGhhdCBleGNlZWQgYSB0aHJlc2hvbGQgeW91IGRlZmluZSBpbiB5b3VyIHN0YXRpc3RpYywgbGlrZSBUQygyMDA6KSBhY3Jvc3NcbiAgICogYWxsIG1ldHJpYyBuYW1lcyB0aGF0IGFyZSBwYXJ0IG9mIGVpdGhlciBTdWNjZXNzIG9yIEZhdWx0IGxhdGVuY3kuXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUxhdGVuY3lDb3VudE1ldHJpYyhcbiAgICBwcm9wczogTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICAgIGRpbWVuc2lvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICk6IElNZXRyaWMge1xuICAgIGxldCBsYXRlbmN5TWV0cmljczogSU1ldHJpY1tdID1cbiAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUxhdGVuY3lNZXRyaWNzKHByb3BzLCBkaW1lbnNpb25zKTtcblxuICAgIGlmIChsYXRlbmN5TWV0cmljcy5sZW5ndGggPT0gMSkge1xuICAgICAgcmV0dXJuIGxhdGVuY3lNZXRyaWNzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgICBsYXRlbmN5TWV0cmljcy5mb3JFYWNoKChtZXRyaWM6IElNZXRyaWMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGtleTogc3RyaW5nID0gYCR7cHJvcHMubWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCl9XyR7cHJvcHMubWV0cmljVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCl9XyR7aW5kZXh9YDtcbiAgICAgICAgdXNpbmdNZXRyaWNzW2tleV0gPSBtZXRyaWM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpLFxuICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICBjb2xvcjogcHJvcHMuY29sb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVab25hbExhdGVuY3lDb3VudE1ldHJpYyhcbiAgICBwcm9wczogWm9uYWxMYXRlbmN5TWV0cmljUHJvcHMsXG4gICAgZGltZW5zaW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgKTogSU1ldHJpYyB7XG4gICAgbGV0IGxhdGVuY3lNZXRyaWNzOiBJTWV0cmljW10gPVxuICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlTGF0ZW5jeU1ldHJpY3MocHJvcHMsIGRpbWVuc2lvbnMpO1xuXG4gICAgaWYgKGxhdGVuY3lNZXRyaWNzLmxlbmd0aCA9PSAxKSB7XG4gICAgICByZXR1cm4gbGF0ZW5jeU1ldHJpY3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB1c2luZ01ldHJpY3M6IHsgW2tleTogc3RyaW5nXTogSU1ldHJpYyB9ID0ge307XG5cbiAgICAgIGxhdGVuY3lNZXRyaWNzLmZvckVhY2goKG1ldHJpYzogSU1ldHJpYywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQga2V5OiBzdHJpbmcgPSBgJHtwcm9wcy5hdmFpbGFiaWxpdHlab25lLnN1YnN0cmluZyhwcm9wcy5hdmFpbGFiaWxpdHlab25lLmxlbmd0aCAtIDEpfV8ke3Byb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpfV8ke3Byb3BzLm1ldHJpY1R5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfV8ke2luZGV4fWA7XG4gICAgICAgIHVzaW5nTWV0cmljc1trZXldID0gbWV0cmljO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKSxcbiAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgY29sb3I6IHByb3BzLmNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { CfnNatGateway } from "aws-cdk-lib/aws-ec2";
|
|
2
|
+
import { IAlarm, IMetric, IWidget } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
|
+
import { Duration } from "aws-cdk-lib";
|
|
4
|
+
import { IConstruct } from "constructs";
|
|
5
|
+
import { IAvailabilityZoneMapper } from "../azmapper/IAvailabilityZoneMapper";
|
|
6
|
+
import { PacketLossOutlierAlgorithm } from "../outlier-detection/PacketLossOutlierAlgorithm";
|
|
7
|
+
/**
|
|
8
|
+
* Provides functions for getting CloudWatch metrics and alarms for NAT Gateways.
|
|
9
|
+
*/
|
|
10
|
+
export declare class NatGatewayMetrics {
|
|
11
|
+
/**
|
|
12
|
+
* Gets the count of packet drops for all NAT Gateways that belong to the provided AZ
|
|
13
|
+
* @param natgws
|
|
14
|
+
* @param availabilityZoneId
|
|
15
|
+
* @param period
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
static getDroppedPacketCountMetricForAZ(natgws: CfnNatGateway[], availabilityZoneId: string, period: Duration, prefix?: string, color?: string): IMetric;
|
|
19
|
+
/**
|
|
20
|
+
* Get the packet drop rate for all NAT Gateways that belong to the provided AZ
|
|
21
|
+
* @param natgws
|
|
22
|
+
* @param availabilityZoneId
|
|
23
|
+
* @param period
|
|
24
|
+
* @returns Percent of packet drops like 52%
|
|
25
|
+
*/
|
|
26
|
+
static getDroppedPacketRateMetricForAZ(natgws: CfnNatGateway[], availabilityZoneId: string, period: Duration, prefix?: string, color?: string): IMetric;
|
|
27
|
+
/**
|
|
28
|
+
* Get the packet count for all NAT Gateways that belong to the provided AZ
|
|
29
|
+
* @param natgws
|
|
30
|
+
* @param availabilityZoneId
|
|
31
|
+
* @param period
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
static getTotalPacketCountMetricForAZ(natgws: CfnNatGateway[], availabilityZoneId: string, period: Duration, prefix?: string, color?: string): IMetric;
|
|
35
|
+
/**
|
|
36
|
+
* Returns an alarm indicating if the quantity of packet drops in a single AZ across all NAT Gateways in that
|
|
37
|
+
* AZ exceeds a threshold compared to all packet loss across all AZs.
|
|
38
|
+
*
|
|
39
|
+
* For example:
|
|
40
|
+
*
|
|
41
|
+
* A = 150 packets
|
|
42
|
+
* B = 175 packets
|
|
43
|
+
* C = 160 packets
|
|
44
|
+
*
|
|
45
|
+
* And the selected AZ is "A", then the calculation is 150 / (150 + 175 + 160).
|
|
46
|
+
*
|
|
47
|
+
* @param scope
|
|
48
|
+
* @param natgws
|
|
49
|
+
* @param availabilityZoneId
|
|
50
|
+
* @param availabilityZone
|
|
51
|
+
* @param threshold
|
|
52
|
+
* @param period
|
|
53
|
+
* @param evaluationPeriods
|
|
54
|
+
* @param datapointsToAlarm
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
static isAZAnOutlierForPacketLossNATGW(scope: IConstruct, natgws: {
|
|
58
|
+
[key: string]: CfnNatGateway[];
|
|
59
|
+
}, algorithm: PacketLossOutlierAlgorithm, availabilityZone: string, azMapper: IAvailabilityZoneMapper, threshold: number, period: Duration, evaluationPeriods: number, datapointsToAlarm: number): IAlarm;
|
|
60
|
+
/**
|
|
61
|
+
* Creates an alarm to determine is the packet loss rate in a single AZ across all NAT Gateways provided
|
|
62
|
+
* for that AZ exceed the provided threshold.
|
|
63
|
+
* @param scope
|
|
64
|
+
* @param natgws
|
|
65
|
+
* @param availabilityZoneId
|
|
66
|
+
* @param availabilityZone
|
|
67
|
+
* @param threshold
|
|
68
|
+
* @param period
|
|
69
|
+
* @param evaluationPeriods
|
|
70
|
+
* @param datapointsToAlarm
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
static isThereAnAZPacketLossImpactNATGW(scope: IConstruct, natgws: CfnNatGateway[], availabilityZoneId: string, availabilityZone: string, threshold: number, period: Duration, evaluationPeriods: number, datapointsToAlarm: number): IAlarm;
|
|
74
|
+
/**
|
|
75
|
+
* Gets the count of all packets from all NAT Gateways in each provided Availability Zone.
|
|
76
|
+
* @param natgws
|
|
77
|
+
* @param azMapper
|
|
78
|
+
* @param period
|
|
79
|
+
* @returns
|
|
80
|
+
*/
|
|
81
|
+
static getTotalPacketCountForEveryAZ(natgws: {
|
|
82
|
+
[key: string]: CfnNatGateway[];
|
|
83
|
+
}, azMapper: IAvailabilityZoneMapper, period: Duration): {
|
|
84
|
+
[key: string]: IMetric;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Gets the count of packet drops from all NAT Gateways in each provided Availability Zone.
|
|
88
|
+
* @param natgws
|
|
89
|
+
* @param azMapper
|
|
90
|
+
* @param period
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
static getTotalPacketDropsForEveryAZ(natgws: {
|
|
94
|
+
[key: string]: CfnNatGateway[];
|
|
95
|
+
}, azMapper: IAvailabilityZoneMapper, period: Duration): {
|
|
96
|
+
[key: string]: IMetric;
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Gets the packet drop rate from all NAT Gateways in each provided Availability Zone.
|
|
100
|
+
* @param natgws
|
|
101
|
+
* @param azMapper
|
|
102
|
+
* @param period
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
static getTotalPacketDropRateForEveryAZ(natgws: {
|
|
106
|
+
[key: string]: CfnNatGateway[];
|
|
107
|
+
}, azMapper: IAvailabilityZoneMapper, period: Duration): {
|
|
108
|
+
[key: string]: IMetric;
|
|
109
|
+
};
|
|
110
|
+
static generateNatGatewayWidgets(natgws: {
|
|
111
|
+
[key: string]: CfnNatGateway[];
|
|
112
|
+
}, azMapper: IAvailabilityZoneMapper, period: Duration, packetDropRateThreshold: number): IWidget[];
|
|
113
|
+
}
|