@cdklabs/multi-az-observability 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/.jsii +10177 -0
  2. package/API.md +5119 -0
  3. package/LICENSE +202 -0
  4. package/README.md +175 -0
  5. package/cdk.json +68 -0
  6. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +214 -0
  7. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +763 -0
  8. package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.d.ts +22 -0
  9. package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +21 -0
  10. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +34 -0
  11. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +39 -0
  12. package/lib/alarmsandrules/CanaryOperationRegionalAlarmsAndRules.d.ts +7 -0
  13. package/lib/alarmsandrules/CanaryOperationRegionalAlarmsAndRules.js +11 -0
  14. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +16 -0
  15. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +17 -0
  16. package/lib/alarmsandrules/IBaseOperationRegionalAlarmsAndRules.d.ts +18 -0
  17. package/lib/alarmsandrules/IBaseOperationRegionalAlarmsAndRules.js +3 -0
  18. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +30 -0
  19. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +3 -0
  20. package/lib/alarmsandrules/ICanaryOperationRegionalAlarmsAndRules.d.ts +6 -0
  21. package/lib/alarmsandrules/ICanaryOperationRegionalAlarmsAndRules.js +3 -0
  22. package/lib/alarmsandrules/ICanaryOperationZonalAlarmsAndRules.d.ts +12 -0
  23. package/lib/alarmsandrules/ICanaryOperationZonalAlarmsAndRules.js +3 -0
  24. package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +55 -0
  25. package/lib/alarmsandrules/IOperationAlarmsAndRules.js +3 -0
  26. package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.d.ts +15 -0
  27. package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +3 -0
  28. package/lib/alarmsandrules/IServerSideOperationZonalAlarmsAndRules.d.ts +36 -0
  29. package/lib/alarmsandrules/IServerSideOperationZonalAlarmsAndRules.js +3 -0
  30. package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +44 -0
  31. package/lib/alarmsandrules/IServiceAlarmsAndRules.js +3 -0
  32. package/lib/alarmsandrules/InsightRuleBody.d.ts +67 -0
  33. package/lib/alarmsandrules/InsightRuleBody.js +46 -0
  34. package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +59 -0
  35. package/lib/alarmsandrules/OperationAlarmsAndRules.js +135 -0
  36. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +19 -0
  37. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +22 -0
  38. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +40 -0
  39. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +46 -0
  40. package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +48 -0
  41. package/lib/alarmsandrules/ServiceAlarmsAndRules.js +166 -0
  42. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +24 -0
  43. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +3 -0
  44. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +62 -0
  45. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +3 -0
  46. package/lib/alarmsandrules/props/CanaryOperationRegionalAlarmsAndRulesProps.d.ts +6 -0
  47. package/lib/alarmsandrules/props/CanaryOperationRegionalAlarmsAndRulesProps.js +3 -0
  48. package/lib/alarmsandrules/props/CanaryOperationZonalAlarmsAndRulesProps.d.ts +6 -0
  49. package/lib/alarmsandrules/props/CanaryOperationZonalAlarmsAndRulesProps.js +3 -0
  50. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +45 -0
  51. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +3 -0
  52. package/lib/alarmsandrules/props/ServerSideOperationRegionalAlarmsAndRulesProps.d.ts +6 -0
  53. package/lib/alarmsandrules/props/ServerSideOperationRegionalAlarmsAndRulesProps.js +3 -0
  54. package/lib/alarmsandrules/props/ServerSideOperationZonalAlarmsAndRulesProps.d.ts +6 -0
  55. package/lib/alarmsandrules/props/ServerSideOperationZonalAlarmsAndRulesProps.js +3 -0
  56. package/lib/alarmsandrules/props/ServiceAlarmsAndRulesProps.d.ts +13 -0
  57. package/lib/alarmsandrules/props/ServiceAlarmsAndRulesProps.js +3 -0
  58. package/lib/azmapper/AvailabilityZoneMapper.d.ts +86 -0
  59. package/lib/azmapper/AvailabilityZoneMapper.js +200 -0
  60. package/lib/azmapper/IAvailabilityZoneMapper.d.ts +86 -0
  61. package/lib/azmapper/IAvailabilityZoneMapper.js +3 -0
  62. package/lib/azmapper/props/AvailabilityZoneMapperProps.d.ts +13 -0
  63. package/lib/azmapper/props/AvailabilityZoneMapperProps.js +3 -0
  64. package/lib/azmapper/src/index.py +107 -0
  65. package/lib/canaries/CanaryFunction.d.ts +16 -0
  66. package/lib/canaries/CanaryFunction.js +152 -0
  67. package/lib/canaries/CanaryTest.d.ts +10 -0
  68. package/lib/canaries/CanaryTest.js +84 -0
  69. package/lib/canaries/ICanaryFunction.d.ts +6 -0
  70. package/lib/canaries/ICanaryFunction.js +3 -0
  71. package/lib/canaries/props/AddCanaryTestProps.d.ts +66 -0
  72. package/lib/canaries/props/AddCanaryTestProps.js +3 -0
  73. package/lib/canaries/props/CanaryFunctionProps.d.ts +29 -0
  74. package/lib/canaries/props/CanaryFunctionProps.js +3 -0
  75. package/lib/canaries/props/CanaryTestProps.d.ts +21 -0
  76. package/lib/canaries/props/CanaryTestProps.js +3 -0
  77. package/lib/canaries/props/NetworkConfigurationProps.d.ts +16 -0
  78. package/lib/canaries/props/NetworkConfigurationProps.js +3 -0
  79. package/lib/canaries/src/canary.zip +0 -0
  80. package/lib/dashboards/BasicServiceDashboard.d.ts +10 -0
  81. package/lib/dashboards/BasicServiceDashboard.js +130 -0
  82. package/lib/dashboards/ContributorInsightsWidget.d.ts +22 -0
  83. package/lib/dashboards/ContributorInsightsWidget.js +55 -0
  84. package/lib/dashboards/IOperationAvailabilityAndLatencyDashboard.d.ts +10 -0
  85. package/lib/dashboards/IOperationAvailabilityAndLatencyDashboard.js +3 -0
  86. package/lib/dashboards/IServiceAvailabilityAndLatencyDashboard.d.ts +10 -0
  87. package/lib/dashboards/IServiceAvailabilityAndLatencyDashboard.js +3 -0
  88. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +20 -0
  89. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +588 -0
  90. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +24 -0
  91. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +475 -0
  92. package/lib/dashboards/props/BasicServiceDashboardProps.d.ts +23 -0
  93. package/lib/dashboards/props/BasicServiceDashboardProps.js +3 -0
  94. package/lib/dashboards/props/ContributorInsightWidgetProps.d.ts +31 -0
  95. package/lib/dashboards/props/ContributorInsightWidgetProps.js +3 -0
  96. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +84 -0
  97. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +3 -0
  98. package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +37 -0
  99. package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +3 -0
  100. package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +37 -0
  101. package/lib/dashboards/props/OperationLatencyWidgetProps.js +3 -0
  102. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +30 -0
  103. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +3 -0
  104. package/lib/index.d.ts +35 -0
  105. package/lib/index.js +30 -0
  106. package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +36 -0
  107. package/lib/metrics/ApplicationLoadBalancerMetrics.js +150 -0
  108. package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +61 -0
  109. package/lib/metrics/AvailabilityAndLatencyMetrics.js +212 -0
  110. package/lib/metrics/NetworkLoadBalancerMetrics.d.ts +19 -0
  111. package/lib/metrics/NetworkLoadBalancerMetrics.js +48 -0
  112. package/lib/metrics/RegionalAvailabilityMetrics.d.ts +19 -0
  113. package/lib/metrics/RegionalAvailabilityMetrics.js +71 -0
  114. package/lib/metrics/RegionalLatencyMetrics.d.ts +33 -0
  115. package/lib/metrics/RegionalLatencyMetrics.js +69 -0
  116. package/lib/metrics/ZonalAvailabilityMetrics.d.ts +19 -0
  117. package/lib/metrics/ZonalAvailabilityMetrics.js +71 -0
  118. package/lib/metrics/ZonalLatencyMetrics.d.ts +29 -0
  119. package/lib/metrics/ZonalLatencyMetrics.js +65 -0
  120. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +23 -0
  121. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +3 -0
  122. package/lib/metrics/props/AvailabilityMetricProps.d.ts +11 -0
  123. package/lib/metrics/props/AvailabilityMetricProps.js +3 -0
  124. package/lib/metrics/props/LatencyMetricProps.d.ts +15 -0
  125. package/lib/metrics/props/LatencyMetricProps.js +3 -0
  126. package/lib/metrics/props/RegionalAvailabilityMetricProps.d.ts +6 -0
  127. package/lib/metrics/props/RegionalAvailabilityMetricProps.js +3 -0
  128. package/lib/metrics/props/RegionalLatencyMetricProps.d.ts +6 -0
  129. package/lib/metrics/props/RegionalLatencyMetricProps.js +3 -0
  130. package/lib/metrics/props/ServiceAvailabilityMetricProps.d.ts +23 -0
  131. package/lib/metrics/props/ServiceAvailabilityMetricProps.js +3 -0
  132. package/lib/metrics/props/ServiceLatencyMericProps.d.ts +23 -0
  133. package/lib/metrics/props/ServiceLatencyMericProps.js +3 -0
  134. package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +10 -0
  135. package/lib/metrics/props/ZonalAvailabilityMetricProps.js +3 -0
  136. package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +10 -0
  137. package/lib/metrics/props/ZonalLatencyMetricProps.js +3 -0
  138. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  139. package/lib/outlier-detection/IOutlierDetectionFunction.d.ts +12 -0
  140. package/lib/outlier-detection/IOutlierDetectionFunction.js +3 -0
  141. package/lib/outlier-detection/OutlierDetectionFunction.d.ts +16 -0
  142. package/lib/outlier-detection/OutlierDetectionFunction.js +126 -0
  143. package/lib/outlier-detection/props/OutlierDetectionFunctionProps.d.ts +12 -0
  144. package/lib/outlier-detection/props/OutlierDetectionFunctionProps.js +3 -0
  145. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  146. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  147. package/lib/services/BasicServiceMultiAZObservability.d.ts +64 -0
  148. package/lib/services/BasicServiceMultiAZObservability.js +504 -0
  149. package/lib/services/CanaryMetrics.d.ts +17 -0
  150. package/lib/services/CanaryMetrics.js +19 -0
  151. package/lib/services/CanaryTestMetricsOverride.d.ts +39 -0
  152. package/lib/services/CanaryTestMetricsOverride.js +23 -0
  153. package/lib/services/ContributorInsightRuleDetails.d.ts +42 -0
  154. package/lib/services/ContributorInsightRuleDetails.js +23 -0
  155. package/lib/services/IBasicServiceMultiAZObservability.d.ts +45 -0
  156. package/lib/services/IBasicServiceMultiAZObservability.js +3 -0
  157. package/lib/services/ICanaryMetrics.d.ts +14 -0
  158. package/lib/services/ICanaryMetrics.js +3 -0
  159. package/lib/services/ICanaryTestMetricsOverride.d.ts +36 -0
  160. package/lib/services/ICanaryTestMetricsOverride.js +3 -0
  161. package/lib/services/IContributorInsightRuleDetails.d.ts +38 -0
  162. package/lib/services/IContributorInsightRuleDetails.js +3 -0
  163. package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +39 -0
  164. package/lib/services/IInstrumentedServiceMultiAZObservability.js +3 -0
  165. package/lib/services/IOperation.d.ts +75 -0
  166. package/lib/services/IOperation.js +3 -0
  167. package/lib/services/IOperationMetricDetails.d.ts +78 -0
  168. package/lib/services/IOperationMetricDetails.js +3 -0
  169. package/lib/services/IService.d.ts +76 -0
  170. package/lib/services/IService.js +3 -0
  171. package/lib/services/IServiceMetricDetails.d.ts +68 -0
  172. package/lib/services/IServiceMetricDetails.js +3 -0
  173. package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +55 -0
  174. package/lib/services/InstrumentedServiceMultiAZObservability.js +310 -0
  175. package/lib/services/Operation.d.ts +78 -0
  176. package/lib/services/Operation.js +34 -0
  177. package/lib/services/OperationMetricDetails.d.ts +82 -0
  178. package/lib/services/OperationMetricDetails.js +50 -0
  179. package/lib/services/Service.d.ts +80 -0
  180. package/lib/services/Service.js +36 -0
  181. package/lib/services/ServiceMetricDetails.d.ts +71 -0
  182. package/lib/services/ServiceMetricDetails.js +28 -0
  183. package/lib/services/props/BasicServiceMultiAZObservabilityProps.d.ts +126 -0
  184. package/lib/services/props/BasicServiceMultiAZObservabilityProps.js +3 -0
  185. package/lib/services/props/CanaryMetricProps.d.ts +14 -0
  186. package/lib/services/props/CanaryMetricProps.js +3 -0
  187. package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +47 -0
  188. package/lib/services/props/CanaryTestMetricsOverrideProps.js +3 -0
  189. package/lib/services/props/ContributorInsightRuleDetailsProps.d.ts +38 -0
  190. package/lib/services/props/ContributorInsightRuleDetailsProps.js +3 -0
  191. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +88 -0
  192. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +3 -0
  193. package/lib/services/props/MetricDimensions.d.ts +61 -0
  194. package/lib/services/props/MetricDimensions.js +63 -0
  195. package/lib/services/props/OperationMetricDetailsProps.d.ts +97 -0
  196. package/lib/services/props/OperationMetricDetailsProps.js +3 -0
  197. package/lib/services/props/OperationProps.d.ts +93 -0
  198. package/lib/services/props/OperationProps.js +3 -0
  199. package/lib/services/props/ServiceMetricDetailsProps.d.ts +68 -0
  200. package/lib/services/props/ServiceMetricDetailsProps.js +3 -0
  201. package/lib/services/props/ServiceProps.d.ts +69 -0
  202. package/lib/services/props/ServiceProps.js +3 -0
  203. package/lib/utilities/AvailabilityMetricType.d.ts +26 -0
  204. package/lib/utilities/AvailabilityMetricType.js +33 -0
  205. package/lib/utilities/LatencyMetricType.d.ts +13 -0
  206. package/lib/utilities/LatencyMetricType.js +20 -0
  207. package/lib/utilities/OutlierDetectionAlgorithm.d.ts +42 -0
  208. package/lib/utilities/OutlierDetectionAlgorithm.js +49 -0
  209. package/lib/utilities/StackWithDynamicSource.d.ts +14 -0
  210. package/lib/utilities/StackWithDynamicSource.js +82 -0
  211. package/package.json +176 -0
  212. package/rosetta/default.ts-fixture +13 -0
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvailabilityAndLatencyMetrics = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
7
+ const AvailabilityMetricType_1 = require("../utilities/AvailabilityMetricType");
8
+ const LatencyMetricType_1 = require("../utilities/LatencyMetricType");
9
+ /**
10
+ * Class for creating availability and latency metrics that can be used in alarms and graphs
11
+ */
12
+ class AvailabilityAndLatencyMetrics {
13
+ /**
14
+ * Increments a str by one char, for example
15
+ * a -> b
16
+ * z -> aa
17
+ * ad -> ae
18
+ *
19
+ * This wraps at z and adds a new 'a'
20
+ * @param str
21
+ * @returns
22
+ */
23
+ static nextChar(str) {
24
+ if (str.length == 0) {
25
+ return 'a';
26
+ }
27
+ let charA = str.split('');
28
+ if (charA[charA.length - 1] === 'z') {
29
+ return (AvailabilityAndLatencyMetrics.nextChar(str.substring(0, charA.length - 1)) + 'a');
30
+ }
31
+ else {
32
+ return (str.substring(0, charA.length - 1) +
33
+ String.fromCharCode(charA[charA.length - 1].charCodeAt(0) + 1));
34
+ }
35
+ }
36
+ /**
37
+ * General purpose method to create availability metrics
38
+ * @param props
39
+ * @param dimensions
40
+ * @returns
41
+ */
42
+ static createAvailabilityMetric(props, dimensions) {
43
+ let counter = 0;
44
+ let key = '';
45
+ let usingMetrics = {};
46
+ let successKeys = [];
47
+ let faultKeys = [];
48
+ if (props.metricDetails.successMetricNames !== undefined &&
49
+ props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT) {
50
+ props.metricDetails.successMetricNames.forEach((successMetric) => {
51
+ let keyPrefix = (props.keyPrefix === undefined || props.keyPrefix == ''
52
+ ? ''
53
+ : props.keyPrefix.toLowerCase() + '_') +
54
+ props.metricDetails.operationName.toLowerCase() +
55
+ '_' +
56
+ successMetric.toLowerCase();
57
+ key = keyPrefix + '_' + counter++;
58
+ successKeys.push(key);
59
+ usingMetrics[key] = new aws_cloudwatch_1.Metric({
60
+ namespace: props.metricDetails.metricNamespace,
61
+ metricName: successMetric,
62
+ unit: props.metricDetails.unit,
63
+ period: props.metricDetails.period,
64
+ statistic: props.metricDetails.alarmStatistic,
65
+ dimensionsMap: dimensions,
66
+ label: successMetric,
67
+ });
68
+ });
69
+ }
70
+ if (props.metricDetails.faultMetricNames !== undefined &&
71
+ props.metricType != AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT) {
72
+ props.metricDetails.faultMetricNames.forEach((faultMetric) => {
73
+ let keyPrefix = (props.keyPrefix === undefined || props.keyPrefix == ''
74
+ ? ''
75
+ : props.keyPrefix.toLowerCase() + '_') +
76
+ props.metricDetails.operationName.toLowerCase() +
77
+ '_' +
78
+ faultMetric.toLowerCase();
79
+ key = keyPrefix + '_' + counter++;
80
+ faultKeys.push(key);
81
+ usingMetrics[key] = new aws_cloudwatch_1.Metric({
82
+ namespace: props.metricDetails.metricNamespace,
83
+ metricName: faultMetric,
84
+ unit: props.metricDetails.unit,
85
+ period: props.metricDetails.period,
86
+ statistic: props.metricDetails.alarmStatistic,
87
+ dimensionsMap: dimensions,
88
+ label: faultMetric,
89
+ });
90
+ });
91
+ }
92
+ let expression = '';
93
+ switch (props.metricType) {
94
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_RATE:
95
+ expression = `((${successKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100`;
96
+ break;
97
+ case AvailabilityMetricType_1.AvailabilityMetricType.REQUEST_COUNT:
98
+ expression = `${successKeys.join('+')}+${faultKeys.join('+')}`;
99
+ break;
100
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT:
101
+ expression = `(${faultKeys.join('+')})`;
102
+ break;
103
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_RATE:
104
+ expression = `((${faultKeys.join('+')}) / (${successKeys.join('+')}+${faultKeys.join('+')})) * 100`;
105
+ break;
106
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT:
107
+ expression = `(${successKeys.join('+')})`;
108
+ break;
109
+ }
110
+ return new aws_cloudwatch_1.MathExpression({
111
+ expression: expression,
112
+ label: props.label,
113
+ period: props.metricDetails.period,
114
+ usingMetrics: usingMetrics,
115
+ });
116
+ }
117
+ /**
118
+ * General purpose method to create latency metrics, the reason this creates an array of metrics while the
119
+ * equivalent availability metric method doesn't is because in availability, we can just sum the count of different
120
+ * metric names while for latency we can't sum the count because that's not what's being measured. It allows the
121
+ * caller to decide if they only want to take the first name, or average all of the names
122
+ * (like SuccessLatency and BigItemSuccessLatency).
123
+ *
124
+ * @param props
125
+ * @param dimensions
126
+ * @returns
127
+ */
128
+ static createLatencyMetrics(props, dimensions) {
129
+ let names;
130
+ switch (props.metricType) {
131
+ default:
132
+ case LatencyMetricType_1.LatencyMetricType.SUCCESS_LATENCY:
133
+ names = props.metricDetails.successMetricNames;
134
+ break;
135
+ case LatencyMetricType_1.LatencyMetricType.FAULT_LATENCY:
136
+ names = props.metricDetails.faultMetricNames;
137
+ break;
138
+ }
139
+ return names.map((x) => new aws_cloudwatch_1.Metric({
140
+ metricName: x,
141
+ namespace: props.metricDetails.metricNamespace,
142
+ unit: props.metricDetails.unit,
143
+ period: props.metricDetails.period,
144
+ statistic: props.statistic,
145
+ dimensionsMap: dimensions,
146
+ label: props.label,
147
+ }));
148
+ }
149
+ /**
150
+ * Takes all of the success or failure latency metric names and creates an average of those
151
+ * names, if there's only 1 name, it just returns that metric
152
+ * @param props
153
+ * @param dimensions
154
+ */
155
+ static createAverageLatencyMetric(props, dimensions) {
156
+ let latencyMetrics = AvailabilityAndLatencyMetrics.createLatencyMetrics(props, dimensions);
157
+ if (latencyMetrics.length == 1) {
158
+ return latencyMetrics[0];
159
+ }
160
+ else {
161
+ let usingMetrics = {};
162
+ latencyMetrics.forEach((metric, index) => {
163
+ let keyPrefix = (props.keyPrefix === undefined || props.keyPrefix == ''
164
+ ? ''
165
+ : props.keyPrefix.toLowerCase() + '_') +
166
+ props.metricDetails.operationName.toLowerCase() +
167
+ '_' +
168
+ props.metricType.toString().toLowerCase();
169
+ usingMetrics[keyPrefix + index] = metric;
170
+ });
171
+ return new aws_cloudwatch_1.MathExpression({
172
+ expression: `(${Object.keys(usingMetrics).join('+')})/${Object.keys(usingMetrics).length}`,
173
+ label: props.label,
174
+ period: props.metricDetails.period,
175
+ usingMetrics: usingMetrics,
176
+ });
177
+ }
178
+ }
179
+ /**
180
+ * Creates a count of high latency metrics for either SuccessLatency or FaultLatency, will total
181
+ * the count of requests that exceed a threshold you define in your statistic, like TC(200:) across
182
+ * all metric names that are part of either Success or Fault latency.
183
+ * @param props
184
+ * @returns
185
+ */
186
+ static createLatencyCountMetric(props, dimensions) {
187
+ let latencyMetrics = AvailabilityAndLatencyMetrics.createLatencyMetrics(props, dimensions);
188
+ if (latencyMetrics.length == 1) {
189
+ return latencyMetrics[0];
190
+ }
191
+ else {
192
+ let usingMetrics = {};
193
+ latencyMetrics.forEach((metric, index) => {
194
+ let keyPrefix = (props.keyPrefix === undefined || props.keyPrefix == ''
195
+ ? ''
196
+ : props.keyPrefix.toLowerCase() + '_') +
197
+ props.metricDetails.operationName.toLowerCase() +
198
+ '_' +
199
+ props.metricType.toString().toLowerCase();
200
+ usingMetrics[keyPrefix + index] = metric;
201
+ });
202
+ return new aws_cloudwatch_1.MathExpression({
203
+ expression: Object.keys(usingMetrics).join('+'),
204
+ label: props.label,
205
+ period: props.metricDetails.period,
206
+ usingMetrics: usingMetrics,
207
+ });
208
+ }
209
+ }
210
+ }
211
+ exports.AvailabilityAndLatencyMetrics = AvailabilityAndLatencyMetrics;
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0cmljcy9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLCtEQUE2RTtBQUc3RSxnRkFBNkU7QUFDN0Usc0VBQW1FO0FBRW5FOztHQUVHO0FBQ0gsTUFBYSw2QkFBNkI7SUFDeEM7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFXO1FBQ3pCLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLEtBQUssR0FBYSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDcEMsT0FBTyxDQUNMLDZCQUE2QixDQUFDLFFBQVEsQ0FDcEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDbkMsR0FBRyxHQUFHLENBQ1IsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDL0QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsd0JBQXdC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QkFBb0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFeEUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxZQUFZLEdBQStCLEVBQUUsQ0FBQztZQUVsRCxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLFNBQVMsR0FDWCxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRTtvQkFDckQsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDO29CQUN4QyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7b0JBQy9DLEdBQUc7b0JBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFFNUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksK0JBQWMsQ0FBQztnQkFDeEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDL0MsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2dCQUNsQyxZQUFZLEVBQUUsWUFBWTthQUMzQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOVBELHNFQThQQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElNZXRyaWMsIE1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9MYXRlbmN5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gJy4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlJztcbmltcG9ydCB7IExhdGVuY3lNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0xhdGVuY3lNZXRyaWNUeXBlJztcblxuLyoqXG4gKiBDbGFzcyBmb3IgY3JlYXRpbmcgYXZhaWxhYmlsaXR5IGFuZCBsYXRlbmN5IG1ldHJpY3MgdGhhdCBjYW4gYmUgdXNlZCBpbiBhbGFybXMgYW5kIGdyYXBoc1xuICovXG5leHBvcnQgY2xhc3MgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3Mge1xuICAvKipcbiAgICogSW5jcmVtZW50cyBhIHN0ciBieSBvbmUgY2hhciwgZm9yIGV4YW1wbGVcbiAgICogYSAtPiBiXG4gICAqIHogLT4gYWFcbiAgICogYWQgLT4gYWVcbiAgICpcbiAgICogVGhpcyB3cmFwcyBhdCB6IGFuZCBhZGRzIGEgbmV3ICdhJ1xuICAgKiBAcGFyYW0gc3RyXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgbmV4dENoYXIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzdHIubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiAnYSc7XG4gICAgfVxuICAgIGxldCBjaGFyQTogc3RyaW5nW10gPSBzdHIuc3BsaXQoJycpO1xuXG4gICAgaWYgKGNoYXJBW2NoYXJBLmxlbmd0aCAtIDFdID09PSAneicpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLm5leHRDaGFyKFxuICAgICAgICAgIHN0ci5zdWJzdHJpbmcoMCwgY2hhckEubGVuZ3RoIC0gMSksXG4gICAgICAgICkgKyAnYSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHN0ci5zdWJzdHJpbmcoMCwgY2hhckEubGVuZ3RoIC0gMSkgK1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJBW2NoYXJBLmxlbmd0aCAtIDFdLmNoYXJDb2RlQXQoMCkgKyAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBwdXJwb3NlIG1ldGhvZCB0byBjcmVhdGUgYXZhaWxhYmlsaXR5IG1ldHJpY3NcbiAgICogQHBhcmFtIHByb3BzXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQXZhaWxhYmlsaXR5TWV0cmljKFxuICAgIHByb3BzOiBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyxcbiAgICBkaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICApOiBJTWV0cmljIHtcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMDtcbiAgICBsZXQga2V5OiBzdHJpbmcgPSAnJztcblxuICAgIGxldCB1c2luZ01ldHJpY3M6IHsgW2tleTogc3RyaW5nXTogSU1ldHJpYyB9ID0ge307XG5cbiAgICBsZXQgc3VjY2Vzc0tleXM6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGZhdWx0S2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMuc3VjY2Vzc01ldHJpY05hbWVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1ldHJpY1R5cGUgIT0gQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVFxuICAgICkge1xuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5zdWNjZXNzTWV0cmljTmFtZXMuZm9yRWFjaChcbiAgICAgICAgKHN1Y2Nlc3NNZXRyaWM6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGxldCBrZXlQcmVmaXggPVxuICAgICAgICAgICAgKHByb3BzLmtleVByZWZpeCA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmtleVByZWZpeCA9PSAnJ1xuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogcHJvcHMua2V5UHJlZml4LnRvTG93ZXJDYXNlKCkgKyAnXycpICtcbiAgICAgICAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICdfJyArXG4gICAgICAgICAgICBzdWNjZXNzTWV0cmljLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBrZXkgPSBrZXlQcmVmaXggKyAnXycgKyBjb3VudGVyKys7XG4gICAgICAgICAgc3VjY2Vzc0tleXMucHVzaChrZXkpO1xuXG4gICAgICAgICAgdXNpbmdNZXRyaWNzW2tleV0gPSBuZXcgTWV0cmljKHtcbiAgICAgICAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiBzdWNjZXNzTWV0cmljLFxuICAgICAgICAgICAgdW5pdDogcHJvcHMubWV0cmljRGV0YWlscy51bml0LFxuICAgICAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICAgIHN0YXRpc3RpYzogcHJvcHMubWV0cmljRGV0YWlscy5hbGFybVN0YXRpc3RpYyxcbiAgICAgICAgICAgIGRpbWVuc2lvbnNNYXA6IGRpbWVuc2lvbnMsXG4gICAgICAgICAgICBsYWJlbDogc3VjY2Vzc01ldHJpYyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5mYXVsdE1ldHJpY05hbWVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm1ldHJpY1R5cGUgIT0gQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UXG4gICAgKSB7XG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLmZhdWx0TWV0cmljTmFtZXMuZm9yRWFjaCgoZmF1bHRNZXRyaWMpID0+IHtcbiAgICAgICAgbGV0IGtleVByZWZpeCA9XG4gICAgICAgICAgKHByb3BzLmtleVByZWZpeCA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmtleVByZWZpeCA9PSAnJ1xuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBwcm9wcy5rZXlQcmVmaXgudG9Mb3dlckNhc2UoKSArICdfJykgK1xuICAgICAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnXycgK1xuICAgICAgICAgIGZhdWx0TWV0cmljLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAga2V5ID0ga2V5UHJlZml4ICsgJ18nICsgY291bnRlcisrO1xuICAgICAgICBmYXVsdEtleXMucHVzaChrZXkpO1xuXG4gICAgICAgIHVzaW5nTWV0cmljc1trZXldID0gbmV3IE1ldHJpYyh7XG4gICAgICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZSxcbiAgICAgICAgICBtZXRyaWNOYW1lOiBmYXVsdE1ldHJpYyxcbiAgICAgICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBzdGF0aXN0aWM6IHByb3BzLm1ldHJpY0RldGFpbHMuYWxhcm1TdGF0aXN0aWMsXG4gICAgICAgICAgZGltZW5zaW9uc01hcDogZGltZW5zaW9ucyxcbiAgICAgICAgICBsYWJlbDogZmF1bHRNZXRyaWMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGV4cHJlc3Npb246IHN0cmluZyA9ICcnO1xuXG4gICAgc3dpdGNoIChwcm9wcy5tZXRyaWNUeXBlKSB7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19SQVRFOlxuICAgICAgICBleHByZXNzaW9uID0gYCgoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KSAvICgke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0rJHtmYXVsdEtleXMuam9pbignKycpfSkpICogMTAwYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuUkVRVUVTVF9DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0rJHtmYXVsdEtleXMuam9pbignKycpfWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5UOlxuICAgICAgICBleHByZXNzaW9uID0gYCgke2ZhdWx0S2V5cy5qb2luKCcrJyl9KWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX1JBVEU6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCgke2ZhdWx0S2V5cy5qb2luKCcrJyl9KSAvICgke3N1Y2Nlc3NLZXlzLmpvaW4oJysnKX0rJHtmYXVsdEtleXMuam9pbignKycpfSkpICogMTAwYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAoJHtzdWNjZXNzS2V5cy5qb2luKCcrJyl9KWA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcbiAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHB1cnBvc2UgbWV0aG9kIHRvIGNyZWF0ZSBsYXRlbmN5IG1ldHJpY3MsIHRoZSByZWFzb24gdGhpcyBjcmVhdGVzIGFuIGFycmF5IG9mIG1ldHJpY3Mgd2hpbGUgdGhlXG4gICAqIGVxdWl2YWxlbnQgYXZhaWxhYmlsaXR5IG1ldHJpYyBtZXRob2QgZG9lc24ndCBpcyBiZWNhdXNlIGluIGF2YWlsYWJpbGl0eSwgd2UgY2FuIGp1c3Qgc3VtIHRoZSBjb3VudCBvZiBkaWZmZXJlbnRcbiAgICogbWV0cmljIG5hbWVzIHdoaWxlIGZvciBsYXRlbmN5IHdlIGNhbid0IHN1bSB0aGUgY291bnQgYmVjYXVzZSB0aGF0J3Mgbm90IHdoYXQncyBiZWluZyBtZWFzdXJlZC4gSXQgYWxsb3dzIHRoZVxuICAgKiBjYWxsZXIgdG8gZGVjaWRlIGlmIHRoZXkgb25seSB3YW50IHRvIHRha2UgdGhlIGZpcnN0IG5hbWUsIG9yIGF2ZXJhZ2UgYWxsIG9mIHRoZSBuYW1lc1xuICAgKiAobGlrZSBTdWNjZXNzTGF0ZW5jeSBhbmQgQmlnSXRlbVN1Y2Nlc3NMYXRlbmN5KS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlTGF0ZW5jeU1ldHJpY3MoXG4gICAgcHJvcHM6IExhdGVuY3lNZXRyaWNQcm9wcyxcbiAgICBkaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICApOiBJTWV0cmljW10ge1xuICAgIGxldCBuYW1lczogc3RyaW5nW107XG5cbiAgICBzd2l0Y2ggKHByb3BzLm1ldHJpY1R5cGUpIHtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlIExhdGVuY3lNZXRyaWNUeXBlLlNVQ0NFU1NfTEFURU5DWTpcbiAgICAgICAgbmFtZXMgPSBwcm9wcy5tZXRyaWNEZXRhaWxzLnN1Y2Nlc3NNZXRyaWNOYW1lcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExhdGVuY3lNZXRyaWNUeXBlLkZBVUxUX0xBVEVOQ1k6XG4gICAgICAgIG5hbWVzID0gcHJvcHMubWV0cmljRGV0YWlscy5mYXVsdE1ldHJpY05hbWVzO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZXMubWFwKFxuICAgICAgKHgpID0+XG4gICAgICAgIG5ldyBNZXRyaWMoe1xuICAgICAgICAgIG1ldHJpY05hbWU6IHgsXG4gICAgICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY05hbWVzcGFjZSxcbiAgICAgICAgICB1bml0OiBwcm9wcy5tZXRyaWNEZXRhaWxzLnVuaXQsXG4gICAgICAgICAgcGVyaW9kOiBwcm9wcy5tZXRyaWNEZXRhaWxzLnBlcmlvZCxcbiAgICAgICAgICBzdGF0aXN0aWM6IHByb3BzLnN0YXRpc3RpYyxcbiAgICAgICAgICBkaW1lbnNpb25zTWFwOiBkaW1lbnNpb25zLFxuICAgICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbGwgb2YgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBsYXRlbmN5IG1ldHJpYyBuYW1lcyBhbmQgY3JlYXRlcyBhbiBhdmVyYWdlIG9mIHRob3NlXG4gICAqIG5hbWVzLCBpZiB0aGVyZSdzIG9ubHkgMSBuYW1lLCBpdCBqdXN0IHJldHVybnMgdGhhdCBtZXRyaWNcbiAgICogQHBhcmFtIHByb3BzXG4gICAqIEBwYXJhbSBkaW1lbnNpb25zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlQXZlcmFnZUxhdGVuY3lNZXRyaWMoXG4gICAgcHJvcHM6IExhdGVuY3lNZXRyaWNQcm9wcyxcbiAgICBkaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICApOiBJTWV0cmljIHtcbiAgICBsZXQgbGF0ZW5jeU1ldHJpY3M6IElNZXRyaWNbXSA9XG4gICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVMYXRlbmN5TWV0cmljcyhwcm9wcywgZGltZW5zaW9ucyk7XG5cbiAgICBpZiAobGF0ZW5jeU1ldHJpY3MubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBsYXRlbmN5TWV0cmljc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcblxuICAgICAgbGF0ZW5jeU1ldHJpY3MuZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBrZXlQcmVmaXg6IHN0cmluZyA9XG4gICAgICAgICAgKHByb3BzLmtleVByZWZpeCA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmtleVByZWZpeCA9PSAnJ1xuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBwcm9wcy5rZXlQcmVmaXgudG9Mb3dlckNhc2UoKSArICdfJykgK1xuICAgICAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnXycgK1xuICAgICAgICAgIHByb3BzLm1ldHJpY1R5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHVzaW5nTWV0cmljc1trZXlQcmVmaXggKyBpbmRleF0gPSBtZXRyaWM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IGAoJHtPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKX0pLyR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5sZW5ndGh9YCxcbiAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICBwZXJpb2Q6IHByb3BzLm1ldHJpY0RldGFpbHMucGVyaW9kLFxuICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY291bnQgb2YgaGlnaCBsYXRlbmN5IG1ldHJpY3MgZm9yIGVpdGhlciBTdWNjZXNzTGF0ZW5jeSBvciBGYXVsdExhdGVuY3ksIHdpbGwgdG90YWxcbiAgICogdGhlIGNvdW50IG9mIHJlcXVlc3RzIHRoYXQgZXhjZWVkIGEgdGhyZXNob2xkIHlvdSBkZWZpbmUgaW4geW91ciBzdGF0aXN0aWMsIGxpa2UgVEMoMjAwOikgYWNyb3NzXG4gICAqIGFsbCBtZXRyaWMgbmFtZXMgdGhhdCBhcmUgcGFydCBvZiBlaXRoZXIgU3VjY2VzcyBvciBGYXVsdCBsYXRlbmN5LlxuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVMYXRlbmN5Q291bnRNZXRyaWMoXG4gICAgcHJvcHM6IExhdGVuY3lNZXRyaWNQcm9wcyxcbiAgICBkaW1lbnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICApOiBJTWV0cmljIHtcbiAgICBsZXQgbGF0ZW5jeU1ldHJpY3M6IElNZXRyaWNbXSA9XG4gICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVMYXRlbmN5TWV0cmljcyhwcm9wcywgZGltZW5zaW9ucyk7XG5cbiAgICBpZiAobGF0ZW5jeU1ldHJpY3MubGVuZ3RoID09IDEpIHtcbiAgICAgIHJldHVybiBsYXRlbmN5TWV0cmljc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcblxuICAgICAgbGF0ZW5jeU1ldHJpY3MuZm9yRWFjaCgobWV0cmljOiBJTWV0cmljLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBrZXlQcmVmaXg6IHN0cmluZyA9XG4gICAgICAgICAgKHByb3BzLmtleVByZWZpeCA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmtleVByZWZpeCA9PSAnJ1xuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBwcm9wcy5rZXlQcmVmaXgudG9Mb3dlckNhc2UoKSArICdfJykgK1xuICAgICAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnXycgK1xuICAgICAgICAgIHByb3BzLm1ldHJpY1R5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHVzaW5nTWV0cmljc1trZXlQcmVmaXggKyBpbmRleF0gPSBtZXRyaWM7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpLFxuICAgICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICAgIHBlcmlvZDogcHJvcHMubWV0cmljRGV0YWlscy5wZXJpb2QsXG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { Duration } from 'aws-cdk-lib';
2
+ import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
3
+ export declare class NetworkLoadBalancerMetrics {
4
+ /**
5
+ * Creates a regional processed bytes metric for the specified load balancer
6
+ * @param loadBalancerFullName
7
+ * @param period
8
+ * @returns
9
+ */
10
+ static createRegionalNetworkLoadBalancerProcessedBytesMetric(loadBalancerFullName: string, period: Duration): IMetric;
11
+ /**
12
+ * Creates a zonal processed bytes metric for the specified load balancer
13
+ * @param loadBalancerFullName
14
+ * @param availabilityZoneName
15
+ * @param period
16
+ * @returns
17
+ */
18
+ static createZonalNetworkLoadBalancerProcessedBytesMetric(loadBalancerFullName: string, availabilityZoneName: string, period: Duration): IMetric;
19
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NetworkLoadBalancerMetrics = void 0;
4
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
5
+ class NetworkLoadBalancerMetrics {
6
+ /**
7
+ * Creates a regional processed bytes metric for the specified load balancer
8
+ * @param loadBalancerFullName
9
+ * @param period
10
+ * @returns
11
+ */
12
+ static createRegionalNetworkLoadBalancerProcessedBytesMetric(loadBalancerFullName, period) {
13
+ return new aws_cloudwatch_1.Metric({
14
+ metricName: 'ProcessedBytes',
15
+ namespace: 'AWS/NetworkELB',
16
+ unit: aws_cloudwatch_1.Unit.COUNT,
17
+ period: period,
18
+ statistic: 'Sum',
19
+ dimensionsMap: {
20
+ LoadBalancer: loadBalancerFullName,
21
+ },
22
+ label: 'ProcessedBytes',
23
+ });
24
+ }
25
+ /**
26
+ * Creates a zonal processed bytes metric for the specified load balancer
27
+ * @param loadBalancerFullName
28
+ * @param availabilityZoneName
29
+ * @param period
30
+ * @returns
31
+ */
32
+ static createZonalNetworkLoadBalancerProcessedBytesMetric(loadBalancerFullName, availabilityZoneName, period) {
33
+ return new aws_cloudwatch_1.Metric({
34
+ metricName: 'ProcessedBytes',
35
+ namespace: 'AWS/NetworkELB',
36
+ unit: aws_cloudwatch_1.Unit.COUNT,
37
+ period: period,
38
+ statistic: 'Sum',
39
+ dimensionsMap: {
40
+ LoadBalancer: loadBalancerFullName,
41
+ AvailabilityZone: availabilityZoneName,
42
+ },
43
+ label: 'ProcessedBytes',
44
+ });
45
+ }
46
+ }
47
+ exports.NetworkLoadBalancerMetrics = NetworkLoadBalancerMetrics;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya0xvYWRCYWxhbmNlck1ldHJpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWV0cmljcy9OZXR3b3JrTG9hZEJhbGFuY2VyTWV0cmljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwrREFBbUU7QUFFbkUsTUFBYSwwQkFBMEI7SUFDckM7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMscURBQXFELENBQzFELG9CQUE0QixFQUM1QixNQUFnQjtRQUVoQixPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixVQUFVLEVBQUUsZ0JBQWdCO1lBQzVCLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsSUFBSSxFQUFFLHFCQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLGFBQWEsRUFBRTtnQkFDYixZQUFZLEVBQUUsb0JBQW9CO2FBQ25DO1lBQ0QsS0FBSyxFQUFFLGdCQUFnQjtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGtEQUFrRCxDQUN2RCxvQkFBNEIsRUFDNUIsb0JBQTRCLEVBQzVCLE1BQWdCO1FBRWhCLE9BQU8sSUFBSSx1QkFBTSxDQUFDO1lBQ2hCLFVBQVUsRUFBRSxnQkFBZ0I7WUFDNUIsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixJQUFJLEVBQUUscUJBQUksQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLEtBQUs7WUFDaEIsYUFBYSxFQUFFO2dCQUNiLFlBQVksRUFBRSxvQkFBb0I7Z0JBQ2xDLGdCQUFnQixFQUFFLG9CQUFvQjthQUN2QztZQUNELEtBQUssRUFBRSxnQkFBZ0I7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakRELGdFQWlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSU1ldHJpYywgTWV0cmljLCBVbml0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuXG5leHBvcnQgY2xhc3MgTmV0d29ya0xvYWRCYWxhbmNlck1ldHJpY3Mge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlZ2lvbmFsIHByb2Nlc3NlZCBieXRlcyBtZXRyaWMgZm9yIHRoZSBzcGVjaWZpZWQgbG9hZCBiYWxhbmNlclxuICAgKiBAcGFyYW0gbG9hZEJhbGFuY2VyRnVsbE5hbWVcbiAgICogQHBhcmFtIHBlcmlvZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsTmV0d29ya0xvYWRCYWxhbmNlclByb2Nlc3NlZEJ5dGVzTWV0cmljKFxuICAgIGxvYWRCYWxhbmNlckZ1bGxOYW1lOiBzdHJpbmcsXG4gICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgKTogSU1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogJ1Byb2Nlc3NlZEJ5dGVzJyxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9OZXR3b3JrRUxCJyxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIExvYWRCYWxhbmNlcjogbG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICB9LFxuICAgICAgbGFiZWw6ICdQcm9jZXNzZWRCeXRlcycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHpvbmFsIHByb2Nlc3NlZCBieXRlcyBtZXRyaWMgZm9yIHRoZSBzcGVjaWZpZWQgbG9hZCBiYWxhbmNlclxuICAgKiBAcGFyYW0gbG9hZEJhbGFuY2VyRnVsbE5hbWVcbiAgICogQHBhcmFtIGF2YWlsYWJpbGl0eVpvbmVOYW1lXG4gICAqIEBwYXJhbSBwZXJpb2RcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbE5ldHdvcmtMb2FkQmFsYW5jZXJQcm9jZXNzZWRCeXRlc01ldHJpYyhcbiAgICBsb2FkQmFsYW5jZXJGdWxsTmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJpbGl0eVpvbmVOYW1lOiBzdHJpbmcsXG4gICAgcGVyaW9kOiBEdXJhdGlvbixcbiAgKTogSU1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogJ1Byb2Nlc3NlZEJ5dGVzJyxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9OZXR3b3JrRUxCJyxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICBwZXJpb2Q6IHBlcmlvZCxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIExvYWRCYWxhbmNlcjogbG9hZEJhbGFuY2VyRnVsbE5hbWUsXG4gICAgICAgIEF2YWlsYWJpbGl0eVpvbmU6IGF2YWlsYWJpbGl0eVpvbmVOYW1lLFxuICAgICAgfSxcbiAgICAgIGxhYmVsOiAnUHJvY2Vzc2VkQnl0ZXMnLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { RegionalAvailabilityMetricProps } from './props/RegionalAvailabilityMetricProps';
3
+ import { ServiceAvailabilityMetricProps } from './props/ServiceAvailabilityMetricProps';
4
+ export declare class RegionalAvailabilityMetrics {
5
+ /**
6
+ * Creates a regional availability metric
7
+ * @param props
8
+ * @returns
9
+ */
10
+ static createRegionalAvailabilityMetric(props: RegionalAvailabilityMetricProps): IMetric;
11
+ /**
12
+ * Creates a regional service level availability metrics, one metric for
13
+ * each operation at the regional level and the service.
14
+ * @param props
15
+ * @returns The metric at index 0 is the metric math expression for the whole service. The following metrics
16
+ * are the metrics for each operation included in the request availability metric props.
17
+ */
18
+ static createRegionalServiceAvailabilityMetrics(props: ServiceAvailabilityMetricProps): IMetric[];
19
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegionalAvailabilityMetrics = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const AvailabilityAndLatencyMetrics_1 = require("./AvailabilityAndLatencyMetrics");
9
+ const AvailabilityMetricType_1 = require("../utilities/AvailabilityMetricType");
10
+ class RegionalAvailabilityMetrics {
11
+ /**
12
+ * Creates a regional availability metric
13
+ * @param props
14
+ * @returns
15
+ */
16
+ static createRegionalAvailabilityMetric(props) {
17
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createAvailabilityMetric(props, props.metricDetails.metricDimensions.regionalDimensions(aws_cdk_lib_1.Fn.ref('AWS::Region')));
18
+ }
19
+ /**
20
+ * Creates a regional service level availability metrics, one metric for
21
+ * each operation at the regional level and the service.
22
+ * @param props
23
+ * @returns The metric at index 0 is the metric math expression for the whole service. The following metrics
24
+ * are the metrics for each operation included in the request availability metric props.
25
+ */
26
+ static createRegionalServiceAvailabilityMetrics(props) {
27
+ let usingMetrics = {};
28
+ let operationMetrics = [];
29
+ let counter = 0;
30
+ props.availabilityMetricProps.forEach((prop) => {
31
+ let keyPrefix = (prop.keyPrefix === undefined || prop.keyPrefix == ''
32
+ ? ''
33
+ : prop.keyPrefix.toLowerCase() + '_') +
34
+ prop.metricDetails.operationName.toLowerCase() +
35
+ '_' +
36
+ prop.metricType.toString().toLowerCase();
37
+ let regionalOperationAvailabilityMetric = this.createRegionalAvailabilityMetric(prop);
38
+ operationMetrics.push(regionalOperationAvailabilityMetric);
39
+ usingMetrics[`${keyPrefix}${counter++}`] =
40
+ regionalOperationAvailabilityMetric;
41
+ });
42
+ let expression = '';
43
+ switch (props.availabilityMetricProps[0].metricType) {
44
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_RATE:
45
+ expression = `(${Object.keys(usingMetrics).join('+')}) / ${props.availabilityMetricProps.length}`;
46
+ break;
47
+ case AvailabilityMetricType_1.AvailabilityMetricType.REQUEST_COUNT:
48
+ expression = `${Object.keys(usingMetrics).join('+')}`;
49
+ break;
50
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT:
51
+ expression = `${Object.keys(usingMetrics).join('+')}`;
52
+ break;
53
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_RATE:
54
+ expression = `(${Object.keys(usingMetrics).join('+')}) / ${props.availabilityMetricProps.length}`;
55
+ break;
56
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT:
57
+ expression = `${Object.keys(usingMetrics).join('+')}`;
58
+ break;
59
+ }
60
+ let math = new aws_cloudwatch_1.MathExpression({
61
+ usingMetrics: usingMetrics,
62
+ period: props.period,
63
+ label: props.label,
64
+ expression: expression,
65
+ });
66
+ operationMetrics.splice(0, 0, math);
67
+ return operationMetrics;
68
+ }
69
+ }
70
+ exports.RegionalAvailabilityMetrics = RegionalAvailabilityMetrics;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ldHJpY3MvUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFDdEMsNkNBQWlDO0FBQ2pDLCtEQUFxRTtBQUNyRSxtRkFBZ0Y7QUFHaEYsZ0ZBQTZFO0FBRTdFLE1BQWEsMkJBQTJCO0lBQ3RDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0NBQWdDLENBQ3JDLEtBQXNDO1FBRXRDLE9BQU8sNkRBQTZCLENBQUMsd0JBQXdCLENBQzNELEtBQUssRUFDTCxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUNyRCxnQkFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDdEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyx3Q0FBd0MsQ0FDN0MsS0FBcUM7UUFFckMsSUFBSSxZQUFZLEdBQStCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGdCQUFnQixHQUFjLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sR0FBVyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksU0FBUyxHQUNYLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFO2dCQUNuRCxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnQkFDOUMsR0FBRztnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTNDLElBQUksbUNBQW1DLEdBQ3JDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FDbkMsSUFBdUMsQ0FDeEMsQ0FBQztZQUVKLGdCQUFnQixDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQzNELFlBQVksQ0FBQyxHQUFHLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxtQ0FBbUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUU1QixRQUFRLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwRCxLQUFLLCtDQUFzQixDQUFDLFlBQVk7Z0JBQ3RDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEcsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsYUFBYTtnQkFDdkMsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsV0FBVztnQkFDckMsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsVUFBVTtnQkFDcEMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRyxNQUFNO1lBQ1IsS0FBSywrQ0FBc0IsQ0FBQyxhQUFhO2dCQUN2QyxVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksSUFBSSxHQUFZLElBQUksK0JBQWMsQ0FBQztZQUNyQyxZQUFZLEVBQUUsWUFBWTtZQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FBQztRQUVILGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBDLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBakZELGtFQWlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSU1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4vQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5pbXBvcnQgeyBTZXJ2aWNlQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1NlcnZpY2VBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0F2YWlsYWJpbGl0eU1ldHJpY1R5cGUnO1xuXG5leHBvcnQgY2xhc3MgUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSByZWdpb25hbCBhdmFpbGFiaWxpdHkgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljKFxuICAgIHByb3BzOiBSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLFxuICApOiBJTWV0cmljIHtcbiAgICByZXR1cm4gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlQXZhaWxhYmlsaXR5TWV0cmljKFxuICAgICAgcHJvcHMsXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMucmVnaW9uYWxEaW1lbnNpb25zKFxuICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlZ2lvbmFsIHNlcnZpY2UgbGV2ZWwgYXZhaWxhYmlsaXR5IG1ldHJpY3MsIG9uZSBtZXRyaWMgZm9yXG4gICAqIGVhY2ggb3BlcmF0aW9uIGF0IHRoZSByZWdpb25hbCBsZXZlbCBhbmQgdGhlIHNlcnZpY2UuXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJucyBUaGUgbWV0cmljIGF0IGluZGV4IDAgaXMgdGhlIG1ldHJpYyBtYXRoIGV4cHJlc3Npb24gZm9yIHRoZSB3aG9sZSBzZXJ2aWNlLiBUaGUgZm9sbG93aW5nIG1ldHJpY3NcbiAgICogYXJlIHRoZSBtZXRyaWNzIGZvciBlYWNoIG9wZXJhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdCBhdmFpbGFiaWxpdHkgbWV0cmljIHByb3BzLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsU2VydmljZUF2YWlsYWJpbGl0eU1ldHJpY3MoXG4gICAgcHJvcHM6IFNlcnZpY2VBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyxcbiAgKTogSU1ldHJpY1tdIHtcbiAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuICAgIGxldCBvcGVyYXRpb25NZXRyaWNzOiBJTWV0cmljW10gPSBbXTtcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMDtcblxuICAgIHByb3BzLmF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIGxldCBrZXlQcmVmaXg6IHN0cmluZyA9XG4gICAgICAgIChwcm9wLmtleVByZWZpeCA9PT0gdW5kZWZpbmVkIHx8IHByb3Aua2V5UHJlZml4ID09ICcnXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcHJvcC5rZXlQcmVmaXgudG9Mb3dlckNhc2UoKSArICdfJykgK1xuICAgICAgICBwcm9wLm1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgJ18nICtcbiAgICAgICAgcHJvcC5tZXRyaWNUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgbGV0IHJlZ2lvbmFsT3BlcmF0aW9uQXZhaWxhYmlsaXR5TWV0cmljOiBJTWV0cmljID1cbiAgICAgICAgdGhpcy5jcmVhdGVSZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpYyhcbiAgICAgICAgICBwcm9wIGFzIFJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMsXG4gICAgICAgICk7XG5cbiAgICAgIG9wZXJhdGlvbk1ldHJpY3MucHVzaChyZWdpb25hbE9wZXJhdGlvbkF2YWlsYWJpbGl0eU1ldHJpYyk7XG4gICAgICB1c2luZ01ldHJpY3NbYCR7a2V5UHJlZml4fSR7Y291bnRlcisrfWBdID1cbiAgICAgICAgcmVnaW9uYWxPcGVyYXRpb25BdmFpbGFiaWxpdHlNZXRyaWM7XG4gICAgfSk7XG5cbiAgICBsZXQgZXhwcmVzc2lvbjogc3RyaW5nID0gJyc7XG5cbiAgICBzd2l0Y2ggKHByb3BzLmF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzWzBdLm1ldHJpY1R5cGUpIHtcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX1JBVEU6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyl9KSAvICR7cHJvcHMuYXZhaWxhYmlsaXR5TWV0cmljUHJvcHMubGVuZ3RofWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlJFUVVFU1RfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgJHtPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9DT1VOVDpcbiAgICAgICAgZXhwcmVzc2lvbiA9IGAke09iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpfWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX1JBVEU6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgKCR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyl9KSAvICR7cHJvcHMuYXZhaWxhYmlsaXR5TWV0cmljUHJvcHMubGVuZ3RofWA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLlNVQ0NFU1NfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgJHtPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKX1gO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgbWF0aDogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgIHBlcmlvZDogcHJvcHMucGVyaW9kLFxuICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcbiAgICB9KTtcblxuICAgIG9wZXJhdGlvbk1ldHJpY3Muc3BsaWNlKDAsIDAsIG1hdGgpO1xuXG4gICAgcmV0dXJuIG9wZXJhdGlvbk1ldHJpY3M7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { RegionalLatencyMetricProps } from './props/RegionalLatencyMetricProps';
3
+ import { ServiceLatencyMetricProps } from './props/ServiceLatencyMericProps';
4
+ export declare class RegionalLatencyMetrics {
5
+ /**
6
+ * Creates a metrics for regional latency, one metric per metric name for the
7
+ * specified type of latency metric. You will need to perform some aggregation
8
+ * of these metrics if there is more than 1 metric name that correponds to
9
+ * SuccessLatency or FaultLatency, like doing an average.
10
+ * @param props
11
+ * @returns
12
+ */
13
+ static createRegionalLatencyMetrics(props: RegionalLatencyMetricProps): IMetric[];
14
+ /**
15
+ * Creates a regional average latency metric, averages the values from all of the
16
+ * metric names that represent either SuccessLatency or FaultLatency
17
+ * @param props
18
+ * @returns
19
+ */
20
+ static createRegionalAverageLatencyMetric(props: RegionalLatencyMetricProps): IMetric;
21
+ /**
22
+ * Creates a count of high latency metrics for either SuccessLatency or FaultLatency
23
+ * @param props
24
+ * @returns
25
+ */
26
+ static createRegionalLatencyCountMetric(props: RegionalLatencyMetricProps): IMetric;
27
+ /**
28
+ * Creates a count of high latency responses for all critical operations
29
+ * @param props
30
+ * @returns
31
+ */
32
+ static createRegionalServiceLatencyCountMetrics(props: ServiceLatencyMetricProps): IMetric[];
33
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegionalLatencyMetrics = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const AvailabilityAndLatencyMetrics_1 = require("./AvailabilityAndLatencyMetrics");
9
+ class RegionalLatencyMetrics {
10
+ /**
11
+ * Creates a metrics for regional latency, one metric per metric name for the
12
+ * specified type of latency metric. You will need to perform some aggregation
13
+ * of these metrics if there is more than 1 metric name that correponds to
14
+ * SuccessLatency or FaultLatency, like doing an average.
15
+ * @param props
16
+ * @returns
17
+ */
18
+ static createRegionalLatencyMetrics(props) {
19
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createLatencyMetrics(props, props.metricDetails.metricDimensions.regionalDimensions(aws_cdk_lib_1.Fn.ref('AWS::Region')));
20
+ }
21
+ /**
22
+ * Creates a regional average latency metric, averages the values from all of the
23
+ * metric names that represent either SuccessLatency or FaultLatency
24
+ * @param props
25
+ * @returns
26
+ */
27
+ static createRegionalAverageLatencyMetric(props) {
28
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createAverageLatencyMetric(props, props.metricDetails.metricDimensions.regionalDimensions(aws_cdk_lib_1.Fn.ref('AWS::Region')));
29
+ }
30
+ /**
31
+ * Creates a count of high latency metrics for either SuccessLatency or FaultLatency
32
+ * @param props
33
+ * @returns
34
+ */
35
+ static createRegionalLatencyCountMetric(props) {
36
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createLatencyCountMetric(props, props.metricDetails.metricDimensions.regionalDimensions(aws_cdk_lib_1.Fn.ref('AWS::Region')));
37
+ }
38
+ /**
39
+ * Creates a count of high latency responses for all critical operations
40
+ * @param props
41
+ * @returns
42
+ */
43
+ static createRegionalServiceLatencyCountMetrics(props) {
44
+ let usingMetrics = {};
45
+ let operationMetrics = [];
46
+ let keyPrefix = AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.nextChar('');
47
+ props.latencyMetricProps.forEach((prop, index) => {
48
+ let operationRegionalMetric = this.createRegionalLatencyCountMetric(prop);
49
+ operationMetrics.push(operationRegionalMetric);
50
+ usingMetrics[`${keyPrefix}${index}`] = operationRegionalMetric;
51
+ keyPrefix = AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.nextChar(keyPrefix);
52
+ });
53
+ if (Object.keys(usingMetrics).length == 1) {
54
+ operationMetrics.push(Object.values(usingMetrics)[0]);
55
+ }
56
+ else {
57
+ let math = new aws_cloudwatch_1.MathExpression({
58
+ usingMetrics: usingMetrics,
59
+ period: props.period,
60
+ label: props.label,
61
+ expression: Object.keys(usingMetrics).join('+'),
62
+ });
63
+ operationMetrics.splice(0, 0, math);
64
+ }
65
+ return operationMetrics;
66
+ }
67
+ }
68
+ exports.RegionalLatencyMetrics = RegionalLatencyMetrics;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uYWxMYXRlbmN5TWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXRyaWNzL1JlZ2lvbmFsTGF0ZW5jeU1ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0Qyw2Q0FBaUM7QUFDakMsK0RBQXFFO0FBQ3JFLG1GQUFnRjtBQUtoRixNQUFhLHNCQUFzQjtJQUNqQzs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QixDQUNqQyxLQUFpQztRQUVqQyxPQUFPLDZEQUE2QixDQUFDLG9CQUFvQixDQUN2RCxLQUFLLEVBQ0wsS0FBSyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FDckQsZ0JBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQ3RCLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxrQ0FBa0MsQ0FDdkMsS0FBaUM7UUFFakMsT0FBTyw2REFBNkIsQ0FBQywwQkFBMEIsQ0FDN0QsS0FBSyxFQUNMLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQ3JELGdCQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUN0QixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FDckMsS0FBaUM7UUFFakMsT0FBTyw2REFBNkIsQ0FBQyx3QkFBd0IsQ0FDM0QsS0FBSyxFQUNMLEtBQUssQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQ3JELGdCQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUN0QixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyx3Q0FBd0MsQ0FDN0MsS0FBZ0M7UUFFaEMsSUFBSSxZQUFZLEdBQStCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGdCQUFnQixHQUFjLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFNBQVMsR0FBVyw2REFBNkIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbkUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FDOUIsQ0FBQyxJQUF3QixFQUFFLEtBQWEsRUFBRSxFQUFFO1lBQzFDLElBQUksdUJBQXVCLEdBQ3pCLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU5QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUMvQyxZQUFZLENBQUMsR0FBRyxTQUFTLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztZQUMvRCxTQUFTLEdBQUcsNkRBQTZCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FDRixDQUFDO1FBRUYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLEdBQVksSUFBSSwrQkFBYyxDQUFDO2dCQUNyQyxZQUFZLEVBQUUsWUFBWTtnQkFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDaEQsQ0FBQyxDQUFDO1lBRUgsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBM0ZELHdEQTJGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSU1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4vQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9MYXRlbmN5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgUmVnaW9uYWxMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1JlZ2lvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzJztcbmltcG9ydCB7IFNlcnZpY2VMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1NlcnZpY2VMYXRlbmN5TWVyaWNQcm9wcyc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpb25hbExhdGVuY3lNZXRyaWNzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZXRyaWNzIGZvciByZWdpb25hbCBsYXRlbmN5LCBvbmUgbWV0cmljIHBlciBtZXRyaWMgbmFtZSBmb3IgdGhlXG4gICAqIHNwZWNpZmllZCB0eXBlIG9mIGxhdGVuY3kgbWV0cmljLiBZb3Ugd2lsbCBuZWVkIHRvIHBlcmZvcm0gc29tZSBhZ2dyZWdhdGlvblxuICAgKiBvZiB0aGVzZSBtZXRyaWNzIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIG1ldHJpYyBuYW1lIHRoYXQgY29ycmVwb25kcyB0b1xuICAgKiBTdWNjZXNzTGF0ZW5jeSBvciBGYXVsdExhdGVuY3ksIGxpa2UgZG9pbmcgYW4gYXZlcmFnZS5cbiAgICogQHBhcmFtIHByb3BzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUmVnaW9uYWxMYXRlbmN5TWV0cmljcyhcbiAgICBwcm9wczogUmVnaW9uYWxMYXRlbmN5TWV0cmljUHJvcHMsXG4gICk6IElNZXRyaWNbXSB7XG4gICAgcmV0dXJuIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUxhdGVuY3lNZXRyaWNzKFxuICAgICAgcHJvcHMsXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMucmVnaW9uYWxEaW1lbnNpb25zKFxuICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHJlZ2lvbmFsIGF2ZXJhZ2UgbGF0ZW5jeSBtZXRyaWMsIGF2ZXJhZ2VzIHRoZSB2YWx1ZXMgZnJvbSBhbGwgb2YgdGhlXG4gICAqIG1ldHJpYyBuYW1lcyB0aGF0IHJlcHJlc2VudCBlaXRoZXIgU3VjY2Vzc0xhdGVuY3kgb3IgRmF1bHRMYXRlbmN5XG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsQXZlcmFnZUxhdGVuY3lNZXRyaWMoXG4gICAgcHJvcHM6IFJlZ2lvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICApOiBJTWV0cmljIHtcbiAgICByZXR1cm4gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlQXZlcmFnZUxhdGVuY3lNZXRyaWMoXG4gICAgICBwcm9wcyxcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy5yZWdpb25hbERpbWVuc2lvbnMoXG4gICAgICAgIEZuLnJlZignQVdTOjpSZWdpb24nKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY291bnQgb2YgaGlnaCBsYXRlbmN5IG1ldHJpY3MgZm9yIGVpdGhlciBTdWNjZXNzTGF0ZW5jeSBvciBGYXVsdExhdGVuY3lcbiAgICogQHBhcmFtIHByb3BzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUmVnaW9uYWxMYXRlbmN5Q291bnRNZXRyaWMoXG4gICAgcHJvcHM6IFJlZ2lvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICApOiBJTWV0cmljIHtcbiAgICByZXR1cm4gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlTGF0ZW5jeUNvdW50TWV0cmljKFxuICAgICAgcHJvcHMsXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMucmVnaW9uYWxEaW1lbnNpb25zKFxuICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvdW50IG9mIGhpZ2ggbGF0ZW5jeSByZXNwb25zZXMgZm9yIGFsbCBjcml0aWNhbCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVJlZ2lvbmFsU2VydmljZUxhdGVuY3lDb3VudE1ldHJpY3MoXG4gICAgcHJvcHM6IFNlcnZpY2VMYXRlbmN5TWV0cmljUHJvcHMsXG4gICk6IElNZXRyaWNbXSB7XG4gICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcbiAgICBsZXQgb3BlcmF0aW9uTWV0cmljczogSU1ldHJpY1tdID0gW107XG4gICAgbGV0IGtleVByZWZpeDogc3RyaW5nID0gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MubmV4dENoYXIoJycpO1xuXG4gICAgcHJvcHMubGF0ZW5jeU1ldHJpY1Byb3BzLmZvckVhY2goXG4gICAgICAocHJvcDogTGF0ZW5jeU1ldHJpY1Byb3BzLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGxldCBvcGVyYXRpb25SZWdpb25hbE1ldHJpYzogSU1ldHJpYyA9XG4gICAgICAgICAgdGhpcy5jcmVhdGVSZWdpb25hbExhdGVuY3lDb3VudE1ldHJpYyhwcm9wKTtcblxuICAgICAgICBvcGVyYXRpb25NZXRyaWNzLnB1c2gob3BlcmF0aW9uUmVnaW9uYWxNZXRyaWMpO1xuICAgICAgICB1c2luZ01ldHJpY3NbYCR7a2V5UHJlZml4fSR7aW5kZXh9YF0gPSBvcGVyYXRpb25SZWdpb25hbE1ldHJpYztcbiAgICAgICAga2V5UHJlZml4ID0gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MubmV4dENoYXIoa2V5UHJlZml4KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmxlbmd0aCA9PSAxKSB7XG4gICAgICBvcGVyYXRpb25NZXRyaWNzLnB1c2goT2JqZWN0LnZhbHVlcyh1c2luZ01ldHJpY3MpWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1hdGg6IElNZXRyaWMgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgICB1c2luZ01ldHJpY3M6IHVzaW5nTWV0cmljcyxcbiAgICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICAgIGxhYmVsOiBwcm9wcy5sYWJlbCxcbiAgICAgICAgZXhwcmVzc2lvbjogT2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyksXG4gICAgICB9KTtcblxuICAgICAgb3BlcmF0aW9uTWV0cmljcy5zcGxpY2UoMCwgMCwgbWF0aCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wZXJhdGlvbk1ldHJpY3M7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { ServiceAvailabilityMetricProps } from './props/ServiceAvailabilityMetricProps';
3
+ import { ZonalAvailabilityMetricProps } from './props/ZonalAvailabilityMetricProps';
4
+ export declare class ZonalAvailabilityMetrics {
5
+ /**
6
+ * Creates a zonal service level availability metrics, one metric for
7
+ * each operation at the zonal level and the service.
8
+ * @param props
9
+ * @returns The metric at index 0 is the metric math expression for the whole service. The following metrics
10
+ * are the metrics for each operation included in the request availability metric props.
11
+ */
12
+ static createZonalServiceAvailabilityMetrics(props: ServiceAvailabilityMetricProps): IMetric[];
13
+ /**
14
+ * Creates a zonal availability metric
15
+ * @param props
16
+ * @returns
17
+ */
18
+ static createZonalAvailabilityMetric(props: ZonalAvailabilityMetricProps): IMetric;
19
+ }