@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,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServiceAlarmsAndRules = 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 constructs_1 = require("constructs");
9
+ const AvailabilityAndLatencyMetrics_1 = require("../metrics/AvailabilityAndLatencyMetrics");
10
+ const RegionalAvailabilityMetrics_1 = require("../metrics/RegionalAvailabilityMetrics");
11
+ const AvailabilityMetricType_1 = require("../utilities/AvailabilityMetricType");
12
+ /**
13
+ * Service level alarms and rules using critical operations
14
+ */
15
+ class ServiceAlarmsAndRules extends constructs_1.Construct {
16
+ constructor(scope, id, props) {
17
+ super(scope, id);
18
+ this.service = props.service;
19
+ let criticalOperations = props.service.operations
20
+ .filter((x) => x.critical == true)
21
+ .map((x) => x.operationName);
22
+ let counter = 1;
23
+ this.zonalAggregateIsolatedImpactAlarms = [];
24
+ this.zonalServerSideIsolatedImpactAlarms = [];
25
+ let availabilityZoneIds = props.service.availabilityZoneNames.map((x) => {
26
+ return props.azMapper.availabilityZoneIdFromAvailabilityZoneLetter(x.substring(x.length - 1));
27
+ });
28
+ for (let i = 0; i < availabilityZoneIds.length; i++) {
29
+ let availabilityZonedId = availabilityZoneIds[i];
30
+ this.zonalAggregateIsolatedImpactAlarms.push(new aws_cloudwatch_1.CompositeAlarm(this, 'AZ' + counter + 'ServiceAggregateIsolatedImpactAlarm', {
31
+ compositeAlarmName: availabilityZonedId +
32
+ '-' +
33
+ props.service.serviceName.toLowerCase() +
34
+ '-isolated-impact-aggregate-alarm',
35
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
36
+ if (criticalOperations.indexOf(key) > -1) {
37
+ filtered[key] = value;
38
+ }
39
+ return filtered;
40
+ }, {})).map((x) => x.aggregateZonalAlarms[i])),
41
+ }));
42
+ this.zonalServerSideIsolatedImpactAlarms.push(new aws_cloudwatch_1.CompositeAlarm(this, 'AZ' + counter + 'ServiceServerSideIsolatedImpactAlarm', {
43
+ compositeAlarmName: availabilityZonedId +
44
+ '-' +
45
+ props.service.serviceName.toLowerCase() +
46
+ '-isolated-impact-server-side-alarm',
47
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
48
+ if (criticalOperations.indexOf(key) > -1) {
49
+ filtered[key] = value;
50
+ }
51
+ return filtered;
52
+ }, {})).map((x) => x.serverSideZonalAlarmsMap[availabilityZonedId])),
53
+ }));
54
+ counter++;
55
+ }
56
+ let keyPrefix = '';
57
+ let regionalOperationFaultCountMetrics = {};
58
+ props.service.operations
59
+ .filter((x) => x.critical == true)
60
+ .forEach((x) => {
61
+ keyPrefix = AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.nextChar(keyPrefix);
62
+ regionalOperationFaultCountMetrics[keyPrefix] =
63
+ RegionalAvailabilityMetrics_1.RegionalAvailabilityMetrics.createRegionalAvailabilityMetric({
64
+ label: x.operationName + ' fault count',
65
+ metricDetails: x.serverSideAvailabilityMetricDetails,
66
+ metricType: AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT,
67
+ });
68
+ });
69
+ let regionalFaultCount = new aws_cloudwatch_1.MathExpression({
70
+ usingMetrics: regionalOperationFaultCountMetrics,
71
+ expression: Object.keys(regionalOperationFaultCountMetrics).join('+'),
72
+ label: props.service.serviceName + ' fault count',
73
+ period: props.service.period,
74
+ });
75
+ this.regionalFaultCountServerSideAlarm = new aws_cloudwatch_1.Alarm(this, 'RegionalFaultCount', {
76
+ alarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
77
+ '-' +
78
+ props.service.serviceName.toLowerCase() +
79
+ '-fault-count',
80
+ datapointsToAlarm: 3,
81
+ evaluationPeriods: 5,
82
+ comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD,
83
+ threshold: props.service.faultCountThreshold,
84
+ alarmDescription: 'Counts faults from all critical operation in the service',
85
+ metric: regionalFaultCount,
86
+ });
87
+ let canaryAlarms = Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
88
+ if (criticalOperations.indexOf(key) > -1) {
89
+ filtered[key] = value;
90
+ }
91
+ return filtered;
92
+ }, {}))
93
+ .reduce((filtered, value) => {
94
+ if (value.canaryRegionalAlarmsAndRules !== undefined) {
95
+ filtered.push(value.canaryRegionalAlarmsAndRules);
96
+ }
97
+ return filtered;
98
+ }, [])
99
+ .map((x) => x.availabilityOrLatencyAlarm);
100
+ if (canaryAlarms !== undefined &&
101
+ canaryAlarms !== null &&
102
+ canaryAlarms.length > 0) {
103
+ this.regionalAvailabilityOrLatencyCanaryAlarm = new aws_cloudwatch_1.CompositeAlarm(this, 'ServiceCanaryAvailabilityOrLatencyAggregateAlarm', {
104
+ compositeAlarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
105
+ '-' +
106
+ props.service.serviceName.toLowerCase() +
107
+ '-canary-availability-or-latency-aggregate-alarm',
108
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...canaryAlarms),
109
+ });
110
+ }
111
+ let canaryAvailabilityAlarms = Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
112
+ if (criticalOperations.indexOf(key) > -1) {
113
+ filtered[key] = value;
114
+ }
115
+ return filtered;
116
+ }, {}))
117
+ .reduce((filtered, value) => {
118
+ if (value.canaryRegionalAlarmsAndRules !== undefined) {
119
+ filtered.push(value.canaryRegionalAlarmsAndRules);
120
+ }
121
+ return filtered;
122
+ }, [])
123
+ .map((x) => x.availabilityAlarm);
124
+ if (canaryAvailabilityAlarms !== undefined &&
125
+ canaryAvailabilityAlarms !== null &&
126
+ canaryAvailabilityAlarms.length > 0) {
127
+ this.regionalAvailabilityCanaryAlarm = new aws_cloudwatch_1.CompositeAlarm(this, 'ServiceCanaryAvailabilityAggregateAlarm', {
128
+ compositeAlarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
129
+ '-' +
130
+ props.service.serviceName.toLowerCase() +
131
+ '-canary-availability-aggregate-alarm',
132
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...canaryAvailabilityAlarms),
133
+ });
134
+ }
135
+ this.regionalAvailabilityOrLatencyServerSideAlarm = new aws_cloudwatch_1.CompositeAlarm(this, 'ServiceServerSideAggregateIsolatedImpactAlarm', {
136
+ compositeAlarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
137
+ '-' +
138
+ props.service.serviceName.toLowerCase() +
139
+ '-server-side-aggregate-alarm',
140
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
141
+ if (criticalOperations.indexOf(key) > -1) {
142
+ filtered[key] = value;
143
+ }
144
+ return filtered;
145
+ }, {}))
146
+ .map((x) => x.serverSideRegionalAlarmsAndRules)
147
+ .map((x) => x.availabilityOrLatencyAlarm)),
148
+ });
149
+ this.regionalAvailabilityServerSideAlarm = new aws_cloudwatch_1.CompositeAlarm(this, 'ServiceServerSideAvailabilityAlarm', {
150
+ compositeAlarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
151
+ '-' +
152
+ props.service.serviceName.toLowerCase() +
153
+ '-server-side-availability-alarm',
154
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(...Object.values(Object.entries(props.perOperationAlarmsAndRules).reduce((filtered, [key, value]) => {
155
+ if (criticalOperations.indexOf(key) > -1) {
156
+ filtered[key] = value;
157
+ }
158
+ return filtered;
159
+ }, {}))
160
+ .map((x) => x.serverSideRegionalAlarmsAndRules)
161
+ .map((x) => x.availabilityAlarm)),
162
+ });
163
+ }
164
+ }
165
+ exports.ServiceAlarmsAndRules = ServiceAlarmsAndRules;
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUFsYXJtc0FuZFJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL1NlcnZpY2VBbGFybXNBbmRSdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLDZDQUFpQztBQUNqQywrREFRb0M7QUFDcEMsMkNBQXVDO0FBS3ZDLDRGQUF5RjtBQUN6Rix3RkFBcUY7QUFFckYsZ0ZBQTZFO0FBRTdFOztHQUVHO0FBQ0gsTUFBYSxxQkFDWCxTQUFRLHNCQUFTO0lBK0NqQixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlDO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTdCLElBQUksa0JBQWtCLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVO2FBQ3hELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7YUFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsSUFBSSxPQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztRQUU5QyxJQUFJLG1CQUFtQixHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUN6RSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ0osT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLDRDQUE0QyxDQUNoRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzFCLENB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TSxDQUFDLE1BQU0sQ0FDZCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE1BQU0sQ0FDckQsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsQ0FBQztnQkFFRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDLEVBQ0QsRUFBaUQsQ0FDbEQsQ0FDRjtpQkFDRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FDbkM7U0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFsVEQsc0RBa1RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgRm4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBBbGFybSxcbiAgQWxhcm1SdWxlLFxuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIENvbXBvc2l0ZUFsYXJtLFxuICBJQWxhcm0sXG4gIElNZXRyaWMsXG4gIE1hdGhFeHByZXNzaW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lPcGVyYXRpb25BbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmljZUFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JU2VydmljZUFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IFNlcnZpY2VBbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9TZXJ2aWNlQWxhcm1zQW5kUnVsZXNQcm9wcyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4uL21ldHJpY3MvQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzIH0gZnJvbSAnLi4vbWV0cmljcy9SZWdpb25hbEF2YWlsYWJpbGl0eU1ldHJpY3MnO1xuaW1wb3J0IHsgSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9JU2VydmljZSc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0F2YWlsYWJpbGl0eU1ldHJpY1R5cGUnO1xuXG4vKipcbiAqIFNlcnZpY2UgbGV2ZWwgYWxhcm1zIGFuZCBydWxlcyB1c2luZyBjcml0aWNhbCBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQWxhcm1zQW5kUnVsZXNcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJU2VydmljZUFsYXJtc0FuZFJ1bGVzIHtcbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIHRoZXNlIGFsYXJtcyBhbmQgcnVsZXMgYXJlIGZvclxuICAgKi9cbiAgc2VydmljZTogSVNlcnZpY2U7XG5cbiAgLyoqXG4gICAqIFRoZSB6b25hbCBhZ2dyZWdhdGUgaXNvbGF0ZWQgaW1wYWN0IGFsYXJtcy4gVGhlcmUgaXMgMSBhbGFybSBwZXIgQVogdGhhdFxuICAgKiB0cmlnZ2VycyBmb3IgYXZhaWxhYmlsaXR5IG9yIGxhdGVuY3kgaW1wYWN0IHRvIGFueSBjcml0aWNhbCBvcGVyYXRpb24gaW4gdGhhdCBBWlxuICAgKiB0aGF0IGluZGljYXRlcyBpdCBoYXMgaXNvbGF0ZWQgaW1wYWN0IGFzIG1lYXN1cmVkIGJ5IGNhbmFyaWVzIG9yIHNlcnZlci1zaWRlLlxuICAgKi9cbiAgem9uYWxBZ2dyZWdhdGVJc29sYXRlZEltcGFjdEFsYXJtczogSUFsYXJtW107XG5cbiAgLyoqXG4gICAqIFRoZSB6b25hbCBzZXJ2ZXItc2lkZSBpc29sYXRlZCBpbXBhY3QgYWxhcm1zLiBUaGVyZSBpcyAxIGFsYXJtIHBlciBBWiB0aGF0IHRyaWdnZXJzXG4gICAqIG9uIGF2YWlsYWJpbGl0eSBvciBhdGVuY3kgaW1wYWN0IHRvIGFueSBjcml0aWNhbCBvcGVyYXRpb24gaW4gdGhhdCBBWi4gVGhlc2UgYXJlIHVzZWZ1bFxuICAgKiBmb3IgZGVwbG95bWVudCBtb25pdG9yaW5nIHRvIG5vdCBpbmFkdmVydGVudGx5IGZhaWwgd2hlbiBhIGNhbmFyeSBjYW4ndCBjb250YWN0IGFuIEFaXG4gICAqIGR1cmluZyBhIGRlcGxveW1lbnQuXG4gICAqL1xuICB6b25hbFNlcnZlclNpZGVJc29sYXRlZEltcGFjdEFsYXJtczogSUFsYXJtW107XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIGZvciByZWdpb25hbCBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeSBpbXBhY3Qgb2YgYW55IGNyaXRpY2FsIG9wZXJhdGlvbiBhcyBtZWFzdXJlZCBieSB0aGUgY2FuYXJ5LlxuICAgKi9cbiAgcmVnaW9uYWxBdmFpbGFiaWxpdHlPckxhdGVuY3lDYW5hcnlBbGFybT86IElBbGFybTtcblxuICAvKipcbiAgICogQW4gYWxhcm0gZm9yIHJlZ2lvbmFsIGF2YWlsYWJpbGl0eSBpbXBhY3Qgb2YgYW55IGNyaXRpY2FsIG9wZXJhdGlvbiBhcyBtZWFzdXJlZCBieSB0aGUgY2FuYXJ5LlxuICAgKi9cbiAgcmVnaW9uYWxBdmFpbGFiaWxpdHlDYW5hcnlBbGFybT86IElBbGFybTtcblxuICAvKipcbiAgICogQW4gYWxhcm0gZm9yIHJlZ2lvbmFsIGF2YWlsYWJpbGl0eSBvciBsYXRlbmN5IGltcGFjdCBvZiBhbnkgY3JpdGljYWwgb3BlcmF0aW9uIGFzIG1lYXN1cmVkIGJ5IHRoZSBzZXJ2ZXItc2lkZS5cbiAgICovXG4gIHJlZ2lvbmFsQXZhaWxhYmlsaXR5T3JMYXRlbmN5U2VydmVyU2lkZUFsYXJtOiBJQWxhcm07XG5cbiAgLyoqXG4gICAqIEFuIGFsYXJtIGZvciByZWdpb25hbCBhdmFpbGFiaWxpdHkgaW1wYWN0IG9mIGFueSBjcml0aWNhbCBvcGVyYXRpb24gYXMgbWVhc3VyZWQgYnkgdGhlIHNlcnZlci1zaWRlLlxuICAgKi9cbiAgcmVnaW9uYWxBdmFpbGFiaWxpdHlTZXJ2ZXJTaWRlQWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogQW4gYWxhcm0gZm9yIGZhdWx0IGNvdW50IGV4Y2VlZGluZyBhIHJlZ2lvbmFsIHRocmVzaG9sZCBmb3IgYWxsIGNyaXRpY2FsIG9wZXJhdGlvbnMuXG4gICAqL1xuICByZWdpb25hbEZhdWx0Q291bnRTZXJ2ZXJTaWRlQWxhcm06IElBbGFybTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VydmljZUFsYXJtc0FuZFJ1bGVzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuc2VydmljZSA9IHByb3BzLnNlcnZpY2U7XG5cbiAgICBsZXQgY3JpdGljYWxPcGVyYXRpb25zOiBzdHJpbmdbXSA9IHByb3BzLnNlcnZpY2Uub3BlcmF0aW9uc1xuICAgICAgLmZpbHRlcigoeCkgPT4geC5jcml0aWNhbCA9PSB0cnVlKVxuICAgICAgLm1hcCgoeCkgPT4geC5vcGVyYXRpb25OYW1lKTtcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMTtcbiAgICB0aGlzLnpvbmFsQWdncmVnYXRlSXNvbGF0ZWRJbXBhY3RBbGFybXMgPSBbXTtcbiAgICB0aGlzLnpvbmFsU2VydmVyU2lkZUlzb2xhdGVkSW1wYWN0QWxhcm1zID0gW107XG5cbiAgICBsZXQgYXZhaWxhYmlsaXR5Wm9uZUlkczogc3RyaW5nW10gPSBwcm9wcy5zZXJ2aWNlLmF2YWlsYWJpbGl0eVpvbmVOYW1lcy5tYXAoXG4gICAgICAoeCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcHMuYXpNYXBwZXIuYXZhaWxhYmlsaXR5Wm9uZUlkRnJvbUF2YWlsYWJpbGl0eVpvbmVMZXR0ZXIoXG4gICAgICAgICAgeC5zdWJzdHJpbmcoeC5sZW5ndGggLSAxKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmlsaXR5Wm9uZUlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVkSWQ6IHN0cmluZyA9IGF2YWlsYWJpbGl0eVpvbmVJZHNbaV07XG5cbiAgICAgIHRoaXMuem9uYWxBZ2dyZWdhdGVJc29sYXRlZEltcGFjdEFsYXJtcy5wdXNoKFxuICAgICAgICBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQVonICsgY291bnRlciArICdTZXJ2aWNlQWdncmVnYXRlSXNvbGF0ZWRJbXBhY3RBbGFybScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOlxuICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lZElkICtcbiAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICAgJy1pc29sYXRlZC1pbXBhY3QtYWdncmVnYXRlLWFsYXJtJyxcbiAgICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzLnBlck9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzKS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyZWQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3JpdGljYWxPcGVyYXRpb25zLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKS5tYXAoKHgpID0+IHguYWdncmVnYXRlWm9uYWxBbGFybXNbaV0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgdGhpcy56b25hbFNlcnZlclNpZGVJc29sYXRlZEltcGFjdEFsYXJtcy5wdXNoKFxuICAgICAgICBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQVonICsgY291bnRlciArICdTZXJ2aWNlU2VydmVyU2lkZUlzb2xhdGVkSW1wYWN0QWxhcm0nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZWRJZCArXG4gICAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICAgIHByb3BzLnNlcnZpY2Uuc2VydmljZU5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgICAgICctaXNvbGF0ZWQtaW1wYWN0LXNlcnZlci1zaWRlLWFsYXJtJyxcbiAgICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzLnBlck9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzKS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyZWQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3JpdGljYWxPcGVyYXRpb25zLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKS5tYXAoKHgpID0+IHguc2VydmVyU2lkZVpvbmFsQWxhcm1zTWFwW2F2YWlsYWJpbGl0eVpvbmVkSWRdKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG5cbiAgICBsZXQga2V5UHJlZml4OiBzdHJpbmcgPSAnJztcblxuICAgIGxldCByZWdpb25hbE9wZXJhdGlvbkZhdWx0Q291bnRNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuXG4gICAgcHJvcHMuc2VydmljZS5vcGVyYXRpb25zXG4gICAgICAuZmlsdGVyKCh4KSA9PiB4LmNyaXRpY2FsID09IHRydWUpXG4gICAgICAuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBrZXlQcmVmaXggPSBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5uZXh0Q2hhcihrZXlQcmVmaXgpO1xuXG4gICAgICAgIHJlZ2lvbmFsT3BlcmF0aW9uRmF1bHRDb3VudE1ldHJpY3Nba2V5UHJlZml4XSA9XG4gICAgICAgICAgUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLmNyZWF0ZVJlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljKHtcbiAgICAgICAgICAgIGxhYmVsOiB4Lm9wZXJhdGlvbk5hbWUgKyAnIGZhdWx0IGNvdW50JyxcbiAgICAgICAgICAgIG1ldHJpY0RldGFpbHM6IHguc2VydmVyU2lkZUF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgICBtZXRyaWNUeXBlOiBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlLkZBVUxUX0NPVU5ULFxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBsZXQgcmVnaW9uYWxGYXVsdENvdW50OiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIHVzaW5nTWV0cmljczogcmVnaW9uYWxPcGVyYXRpb25GYXVsdENvdW50TWV0cmljcyxcbiAgICAgIGV4cHJlc3Npb246IE9iamVjdC5rZXlzKHJlZ2lvbmFsT3BlcmF0aW9uRmF1bHRDb3VudE1ldHJpY3MpLmpvaW4oJysnKSxcbiAgICAgIGxhYmVsOiBwcm9wcy5zZXJ2aWNlLnNlcnZpY2VOYW1lICsgJyBmYXVsdCBjb3VudCcsXG4gICAgICBwZXJpb2Q6IHByb3BzLnNlcnZpY2UucGVyaW9kLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpb25hbEZhdWx0Q291bnRTZXJ2ZXJTaWRlQWxhcm0gPSBuZXcgQWxhcm0oXG4gICAgICB0aGlzLFxuICAgICAgJ1JlZ2lvbmFsRmF1bHRDb3VudCcsXG4gICAgICB7XG4gICAgICAgIGFsYXJtTmFtZTpcbiAgICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJykgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnLWZhdWx0LWNvdW50JyxcbiAgICAgICAgZGF0YXBvaW50c1RvQWxhcm06IDMsXG4gICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiA1LFxuICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICB0aHJlc2hvbGQ6IHByb3BzLnNlcnZpY2UuZmF1bHRDb3VudFRocmVzaG9sZCxcbiAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgICAnQ291bnRzIGZhdWx0cyBmcm9tIGFsbCBjcml0aWNhbCBvcGVyYXRpb24gaW4gdGhlIHNlcnZpY2UnLFxuICAgICAgICBtZXRyaWM6IHJlZ2lvbmFsRmF1bHRDb3VudCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGxldCBjYW5hcnlBbGFybXM6IElBbGFybVtdID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzLnBlck9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzKS5yZWR1Y2UoXG4gICAgICAgIChmaWx0ZXJlZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgaWYgKGNyaXRpY2FsT3BlcmF0aW9ucy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgZmlsdGVyZWRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMgfSxcbiAgICAgICksXG4gICAgKVxuICAgICAgLnJlZHVjZSgoZmlsdGVyZWQsIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5jYW5hcnlSZWdpb25hbEFsYXJtc0FuZFJ1bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWx0ZXJlZC5wdXNoKHZhbHVlLmNhbmFyeVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgIH0sIFtdIGFzIElDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzW10pXG4gICAgICAubWFwKCh4KSA9PiB4LmF2YWlsYWJpbGl0eU9yTGF0ZW5jeUFsYXJtKTtcblxuICAgIGlmIChcbiAgICAgIGNhbmFyeUFsYXJtcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjYW5hcnlBbGFybXMgIT09IG51bGwgJiZcbiAgICAgIGNhbmFyeUFsYXJtcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnJlZ2lvbmFsQXZhaWxhYmlsaXR5T3JMYXRlbmN5Q2FuYXJ5QWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdTZXJ2aWNlQ2FuYXJ5QXZhaWxhYmlsaXR5T3JMYXRlbmN5QWdncmVnYXRlQWxhcm0nLFxuICAgICAgICB7XG4gICAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOlxuICAgICAgICAgICAgRm4ucmVmKCdBV1M6OlJlZ2lvbicpICtcbiAgICAgICAgICAgICctJyArXG4gICAgICAgICAgICBwcm9wcy5zZXJ2aWNlLnNlcnZpY2VOYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICAgJy1jYW5hcnktYXZhaWxhYmlsaXR5LW9yLWxhdGVuY3ktYWdncmVnYXRlLWFsYXJtJyxcbiAgICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZiguLi5jYW5hcnlBbGFybXMpLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgY2FuYXJ5QXZhaWxhYmlsaXR5QWxhcm1zOiBJQWxhcm1bXSA9IE9iamVjdC52YWx1ZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5wZXJPcGVyYXRpb25BbGFybXNBbmRSdWxlcykucmVkdWNlKFxuICAgICAgICAoZmlsdGVyZWQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGlmIChjcml0aWNhbE9wZXJhdGlvbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzIH0sXG4gICAgICApLFxuICAgIClcbiAgICAgIC5yZWR1Y2UoKGZpbHRlcmVkLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUuY2FuYXJ5UmVnaW9uYWxBbGFybXNBbmRSdWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmlsdGVyZWQucHVzaCh2YWx1ZS5jYW5hcnlSZWdpb25hbEFsYXJtc0FuZFJ1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICB9LCBbXSBhcyBJQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1tdKVxuICAgICAgLm1hcCgoeCkgPT4geC5hdmFpbGFiaWxpdHlBbGFybSk7XG5cbiAgICBpZiAoXG4gICAgICBjYW5hcnlBdmFpbGFiaWxpdHlBbGFybXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2FuYXJ5QXZhaWxhYmlsaXR5QWxhcm1zICE9PSBudWxsICYmXG4gICAgICBjYW5hcnlBdmFpbGFiaWxpdHlBbGFybXMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5yZWdpb25hbEF2YWlsYWJpbGl0eUNhbmFyeUFsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnU2VydmljZUNhbmFyeUF2YWlsYWJpbGl0eUFnZ3JlZ2F0ZUFsYXJtJyxcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICAgIEZuLnJlZignQVdTOjpSZWdpb24nKSArXG4gICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICctY2FuYXJ5LWF2YWlsYWJpbGl0eS1hZ2dyZWdhdGUtYWxhcm0nLFxuICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKC4uLmNhbmFyeUF2YWlsYWJpbGl0eUFsYXJtcyksXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucmVnaW9uYWxBdmFpbGFiaWxpdHlPckxhdGVuY3lTZXJ2ZXJTaWRlQWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICB0aGlzLFxuICAgICAgJ1NlcnZpY2VTZXJ2ZXJTaWRlQWdncmVnYXRlSXNvbGF0ZWRJbXBhY3RBbGFybScsXG4gICAgICB7XG4gICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJykgK1xuICAgICAgICAgICctJyArXG4gICAgICAgICAgcHJvcHMuc2VydmljZS5zZXJ2aWNlTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAnLXNlcnZlci1zaWRlLWFnZ3JlZ2F0ZS1hbGFybScsXG4gICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5wZXJPcGVyYXRpb25BbGFybXNBbmRSdWxlcykucmVkdWNlKFxuICAgICAgICAgICAgICAoZmlsdGVyZWQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjcml0aWNhbE9wZXJhdGlvbnMuaW5kZXhPZihrZXkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKHgpID0+IHguc2VydmVyU2lkZVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMpXG4gICAgICAgICAgICAubWFwKCh4KSA9PiB4LmF2YWlsYWJpbGl0eU9yTGF0ZW5jeUFsYXJtKSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMucmVnaW9uYWxBdmFpbGFiaWxpdHlTZXJ2ZXJTaWRlQWxhcm0gPSBuZXcgQ29tcG9zaXRlQWxhcm0oXG4gICAgICB0aGlzLFxuICAgICAgJ1NlcnZpY2VTZXJ2ZXJTaWRlQXZhaWxhYmlsaXR5QWxhcm0nLFxuICAgICAge1xuICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgRm4ucmVmKCdBV1M6OlJlZ2lvbicpICtcbiAgICAgICAgICAnLScgK1xuICAgICAgICAgIHByb3BzLnNlcnZpY2Uuc2VydmljZU5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICAgJy1zZXJ2ZXItc2lkZS1hdmFpbGFiaWxpdHktYWxhcm0nLFxuICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICAuLi5PYmplY3QudmFsdWVzKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcHMucGVyT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGZpbHRlcmVkLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3JpdGljYWxPcGVyYXRpb25zLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJlZFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7fSBhcyB7IFtrZXk6IHN0cmluZ106IElPcGVyYXRpb25BbGFybXNBbmRSdWxlcyB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICAgICAubWFwKCh4KSA9PiB4LnNlcnZlclNpZGVSZWdpb25hbEFsYXJtc0FuZFJ1bGVzKVxuICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5hdmFpbGFiaWxpdHlBbGFybSksXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { IContributorInsightRuleDetails } from '../../services/IContributorInsightRuleDetails';
2
+ import { IOperationMetricDetails } from '../../services/IOperationMetricDetails';
3
+ /**
4
+ * The base props for an operation regional alarms and rules configuration
5
+ */
6
+ export interface BaseOperationRegionalAlarmsAndRulesProps {
7
+ /**
8
+ * The metric details for availability metrics
9
+ */
10
+ readonly availabilityMetricDetails: IOperationMetricDetails;
11
+ /**
12
+ * The metric details for latency metrics
13
+ */
14
+ readonly latencyMetricDetails: IOperationMetricDetails;
15
+ /**
16
+ * (Optional) A suffix to be appended to alarm and rule names
17
+ */
18
+ readonly nameSuffix: string;
19
+ /**
20
+ * (Optional) Details for creating contributor insight rules, which help
21
+ * make the server-side alarms for detecting single AZ failures more accurate
22
+ */
23
+ readonly contributorInsightRuleDetails?: IContributorInsightRuleDetails;
24
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9wcm9wcy9CYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9JQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMnO1xuaW1wb3J0IHsgSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9JT3BlcmF0aW9uTWV0cmljRGV0YWlscyc7XG5cbi8qKlxuICogVGhlIGJhc2UgcHJvcHMgZm9yIGFuIG9wZXJhdGlvbiByZWdpb25hbCBhbGFybXMgYW5kIHJ1bGVzIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgZGV0YWlscyBmb3IgYXZhaWxhYmlsaXR5IG1ldHJpY3NcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0cmljIGRldGFpbHMgZm9yIGxhdGVuY3kgbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbGF0ZW5jeU1ldHJpY0RldGFpbHM6IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGFsYXJtIGFuZCBydWxlIG5hbWVzXG4gICAqL1xuICByZWFkb25seSBuYW1lU3VmZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgRGV0YWlscyBmb3IgY3JlYXRpbmcgY29udHJpYnV0b3IgaW5zaWdodCBydWxlcywgd2hpY2ggaGVscFxuICAgKiBtYWtlIHRoZSBzZXJ2ZXItc2lkZSBhbGFybXMgZm9yIGRldGVjdGluZyBzaW5nbGUgQVogZmFpbHVyZXMgbW9yZSBhY2N1cmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHM/OiBJQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHM7XG59XG4iXX0=
@@ -0,0 +1,62 @@
1
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
2
+ import { IAvailabilityZoneMapper } from '../../azmapper/IAvailabilityZoneMapper';
3
+ import { IContributorInsightRuleDetails } from '../../services/IContributorInsightRuleDetails';
4
+ import { IOperationMetricDetails } from '../../services/IOperationMetricDetails';
5
+ import { Operation } from '../../services/Operation';
6
+ import { OutlierDetectionAlgorithm } from '../../utilities/OutlierDetectionAlgorithm';
7
+ /**
8
+ * The base properties for an operation zonal alarms and rules configuration
9
+ */
10
+ export interface BaseOperationZonalAlarmsAndRulesProps {
11
+ /**
12
+ * The operation for these alarms and rules
13
+ */
14
+ readonly operation: Operation;
15
+ /**
16
+ * The availability metric details to create alarms and rules from
17
+ */
18
+ readonly availabilityMetricDetails: IOperationMetricDetails;
19
+ /**
20
+ * The latency metric details to create alarms and rules from
21
+ */
22
+ readonly latencyMetricDetails: IOperationMetricDetails;
23
+ /**
24
+ * The Availability Zone Id the alarms and rules are being created for
25
+ */
26
+ readonly availabilityZoneId: string;
27
+ /**
28
+ * A counter used to name the CDK constructs uniquely
29
+ */
30
+ readonly counter: number;
31
+ /**
32
+ * Used when the OutlierDetectionAlgorithm is set to STATIC, should be a
33
+ * number between 0 and 1, non-inclusive, representing the percentage
34
+ * or faults or high latency responses that an AZ must have to be considered
35
+ * an outlier.
36
+ */
37
+ readonly outlierThreshold: number;
38
+ /**
39
+ * (Optional) Details for creating contributor insight rules, which help
40
+ * make the server-side alarms for detecting single AZ failures more accurate
41
+ */
42
+ readonly contributorInsightRuleDetails?: IContributorInsightRuleDetails;
43
+ /**
44
+ * The outlier detection algorithm used to determine if Availability Zones
45
+ * or instances are outliers for latency or availability impact. Currently this property
46
+ * is ignored and only STATIC is used.
47
+ */
48
+ readonly outlierDetectionAlgorithm: OutlierDetectionAlgorithm;
49
+ /**
50
+ * (Optional) A suffix to apply to alarm and rules names, like "-server" for server
51
+ * side metrics and alarms
52
+ */
53
+ readonly nameSuffix?: string;
54
+ /**
55
+ * The AZ mapper
56
+ */
57
+ readonly azMapper: IAvailabilityZoneMapper;
58
+ /**
59
+ * A function that is used to perform outlier detection
60
+ */
61
+ readonly outlierDetectionFunction?: IFunction;
62
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9wcm9wcy9CYXNlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElBdmFpbGFiaWxpdHlab25lTWFwcGVyIH0gZnJvbSAnLi4vLi4vYXptYXBwZXIvSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXInO1xuaW1wb3J0IHsgSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzJztcbmltcG9ydCB7IElPcGVyYXRpb25NZXRyaWNEZXRhaWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvSU9wZXJhdGlvbk1ldHJpY0RldGFpbHMnO1xuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvT3BlcmF0aW9uJztcbmltcG9ydCB7IE91dGxpZXJEZXRlY3Rpb25BbGdvcml0aG0gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSc7XG5cbi8qKlxuICogVGhlIGJhc2UgcHJvcGVydGllcyBmb3IgYW4gb3BlcmF0aW9uIHpvbmFsIGFsYXJtcyBhbmQgcnVsZXMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzUHJvcHMge1xuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbiBmb3IgdGhlc2UgYWxhcm1zIGFuZCBydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uOiBPcGVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgbWV0cmljIGRldGFpbHMgdG8gY3JlYXRlIGFsYXJtcyBhbmQgcnVsZXMgZnJvbVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlbmN5IG1ldHJpYyBkZXRhaWxzIHRvIGNyZWF0ZSBhbGFybXMgYW5kIHJ1bGVzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVuY3lNZXRyaWNEZXRhaWxzOiBJT3BlcmF0aW9uTWV0cmljRGV0YWlscztcblxuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIElkIHRoZSBhbGFybXMgYW5kIHJ1bGVzIGFyZSBiZWluZyBjcmVhdGVkIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY291bnRlciB1c2VkIHRvIG5hbWUgdGhlIENESyBjb25zdHJ1Y3RzIHVuaXF1ZWx5XG4gICAqL1xuICByZWFkb25seSBjb3VudGVyOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFVzZWQgd2hlbiB0aGUgT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSBpcyBzZXQgdG8gU1RBVElDLCBzaG91bGQgYmUgYVxuICAgKiBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLCBub24taW5jbHVzaXZlLCByZXByZXNlbnRpbmcgdGhlIHBlcmNlbnRhZ2VcbiAgICogb3IgZmF1bHRzIG9yIGhpZ2ggbGF0ZW5jeSByZXNwb25zZXMgdGhhdCBhbiBBWiBtdXN0IGhhdmUgdG8gYmUgY29uc2lkZXJlZFxuICAgKiBhbiBvdXRsaWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0bGllclRocmVzaG9sZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIERldGFpbHMgZm9yIGNyZWF0aW5nIGNvbnRyaWJ1dG9yIGluc2lnaHQgcnVsZXMsIHdoaWNoIGhlbHBcbiAgICogbWFrZSB0aGUgc2VydmVyLXNpZGUgYWxhcm1zIGZvciBkZXRlY3Rpbmcgc2luZ2xlIEFaIGZhaWx1cmVzIG1vcmUgYWNjdXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzPzogSUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgb3V0bGllciBkZXRlY3Rpb24gYWxnb3JpdGhtIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIEF2YWlsYWJpbGl0eSBab25lc1xuICAgKiBvciBpbnN0YW5jZXMgYXJlIG91dGxpZXJzIGZvciBsYXRlbmN5IG9yIGF2YWlsYWJpbGl0eSBpbXBhY3QuIEN1cnJlbnRseSB0aGlzIHByb3BlcnR5XG4gICAqIGlzIGlnbm9yZWQgYW5kIG9ubHkgU1RBVElDIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIEEgc3VmZml4IHRvIGFwcGx5IHRvIGFsYXJtIGFuZCBydWxlcyBuYW1lcywgbGlrZSBcIi1zZXJ2ZXJcIiBmb3Igc2VydmVyXG4gICAqIHNpZGUgbWV0cmljcyBhbmQgYWxhcm1zXG4gICAqL1xuICByZWFkb25seSBuYW1lU3VmZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVogbWFwcGVyXG4gICAqL1xuICByZWFkb25seSBhek1hcHBlcjogSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXI7XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIHBlcmZvcm0gb3V0bGllciBkZXRlY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IG91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbj86IElGdW5jdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ import { BaseOperationRegionalAlarmsAndRulesProps } from './BaseOperationRegionalAlarmsAndRulesProps';
2
+ /**
3
+ * Canary metric properties for an operation at the regional level
4
+ */
5
+ export interface CanaryOperationRegionalAlarmsAndRulesProps extends BaseOperationRegionalAlarmsAndRulesProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL3Byb3BzL0NhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB9IGZyb20gJy4vQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyc7XG5cbi8qKlxuICogQ2FuYXJ5IG1ldHJpYyBwcm9wZXJ0aWVzIGZvciBhbiBvcGVyYXRpb24gYXQgdGhlIHJlZ2lvbmFsIGxldmVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzXG4gIGV4dGVuZHMgQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB7fVxuIl19
@@ -0,0 +1,6 @@
1
+ import { BaseOperationZonalAlarmsAndRulesProps } from './BaseOperationZonalAlarmsAndRulesProps';
2
+ /**
3
+ * Canary metric properties for an operation at the zonal level
4
+ */
5
+ export interface CanaryOperationZonalAlarmsAndRulesProps extends BaseOperationZonalAlarmsAndRulesProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL3Byb3BzL0NhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB9IGZyb20gJy4vQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyc7XG5cbi8qKlxuICogQ2FuYXJ5IG1ldHJpYyBwcm9wZXJ0aWVzIGZvciBhbiBvcGVyYXRpb24gYXQgdGhlIHpvbmFsIGxldmVsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzXG4gIGV4dGVuZHMgQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB7fVxuIl19
@@ -0,0 +1,45 @@
1
+ import { ILoadBalancerV2 } from 'aws-cdk-lib/aws-elasticloadbalancingv2';
2
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
3
+ import { IAvailabilityZoneMapper } from '../../azmapper/IAvailabilityZoneMapper';
4
+ import { ContributorInsightRuleDetails } from '../../services/ContributorInsightRuleDetails';
5
+ import { Operation } from '../../services/Operation';
6
+ import { OutlierDetectionAlgorithm } from '../../utilities/OutlierDetectionAlgorithm';
7
+ /**
8
+ * The properties for the operation alarms and rules
9
+ */
10
+ export interface OperationAlarmsAndRulesProps {
11
+ /**
12
+ * The operation the alarms and rules are for
13
+ */
14
+ readonly operation: Operation;
15
+ /**
16
+ * The load balancer associated with this operation.
17
+ *
18
+ * @default - If not provided, its ARN will not be included
19
+ * in top level alarm descriptions that can be referenced by
20
+ * automation to identify which load balancers should execute
21
+ * a zonal shift.
22
+ */
23
+ readonly loadBalancer?: ILoadBalancerV2;
24
+ /**
25
+ * Rule details for contributor insight rules
26
+ */
27
+ readonly contributorInsightRuleDetails?: ContributorInsightRuleDetails;
28
+ /**
29
+ * The outlier threshold used with the STATIC outlier detection algorithm
30
+ */
31
+ readonly outlierThreshold: number;
32
+ /**
33
+ * The outlier detection algorithm
34
+ */
35
+ readonly outlierDetectionAlgorithm: OutlierDetectionAlgorithm;
36
+ /**
37
+ * The AZ Mapper
38
+ */
39
+ readonly azMapper: IAvailabilityZoneMapper;
40
+ /**
41
+ * An optional Lambda function used to perform outlier detection
42
+ * for chi-squared or z-score algorithms
43
+ */
44
+ readonly outlierDetectionFunction?: IFunction;
45
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9wcm9wcy9PcGVyYXRpb25BbGFybXNBbmRSdWxlc1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJTG9hZEJhbGFuY2VyVjIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mic7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElBdmFpbGFiaWxpdHlab25lTWFwcGVyIH0gZnJvbSAnLi4vLi4vYXptYXBwZXIvSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXInO1xuaW1wb3J0IHsgQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9Db250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyc7XG5pbXBvcnQgeyBPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9PcGVyYXRpb24nO1xuaW1wb3J0IHsgT3V0bGllckRldGVjdGlvbkFsZ29yaXRobSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9PdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtJztcblxuLyoqXG4gKiBUaGUgcHJvcGVydGllcyBmb3IgdGhlIG9wZXJhdGlvbiBhbGFybXMgYW5kIHJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW9uIHRoZSBhbGFybXMgYW5kIHJ1bGVzIGFyZSBmb3JcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbjogT3BlcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9hZCBiYWxhbmNlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgbm90IHByb3ZpZGVkLCBpdHMgQVJOIHdpbGwgbm90IGJlIGluY2x1ZGVkXG4gICAqIGluIHRvcCBsZXZlbCBhbGFybSBkZXNjcmlwdGlvbnMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBieVxuICAgKiBhdXRvbWF0aW9uIHRvIGlkZW50aWZ5IHdoaWNoIGxvYWQgYmFsYW5jZXJzIHNob3VsZCBleGVjdXRlXG4gICAqIGEgem9uYWwgc2hpZnQuXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXI/OiBJTG9hZEJhbGFuY2VyVjI7XG5cbiAgLyoqXG4gICAqIFJ1bGUgZGV0YWlscyBmb3IgY29udHJpYnV0b3IgaW5zaWdodCBydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgY29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHM/OiBDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscztcblxuICAvKipcbiAgICogVGhlIG91dGxpZXIgdGhyZXNob2xkIHVzZWQgd2l0aCB0aGUgU1RBVElDIG91dGxpZXIgZGV0ZWN0aW9uIGFsZ29yaXRobVxuICAgKi9cbiAgcmVhZG9ubHkgb3V0bGllclRocmVzaG9sZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb3V0bGllciBkZXRlY3Rpb24gYWxnb3JpdGhtXG4gICAqL1xuICByZWFkb25seSBvdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtOiBPdXRsaWVyRGV0ZWN0aW9uQWxnb3JpdGhtO1xuXG4gIC8qKlxuICAgKiBUaGUgQVogTWFwcGVyXG4gICAqL1xuICByZWFkb25seSBhek1hcHBlcjogSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXI7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIExhbWJkYSBmdW5jdGlvbiB1c2VkIHRvIHBlcmZvcm0gb3V0bGllciBkZXRlY3Rpb25cbiAgICogZm9yIGNoaS1zcXVhcmVkIG9yIHotc2NvcmUgYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0bGllckRldGVjdGlvbkZ1bmN0aW9uPzogSUZ1bmN0aW9uO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { BaseOperationRegionalAlarmsAndRulesProps } from './BaseOperationRegionalAlarmsAndRulesProps';
2
+ /**
3
+ * The server side rules and alarms properties for an operation
4
+ */
5
+ export interface ServerSideOperationRegionalAlarmsAndRulesProps extends BaseOperationRegionalAlarmsAndRulesProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9wcm9wcy9TZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBCYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9CYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzJztcblxuLyoqXG4gKiBUaGUgc2VydmVyIHNpZGUgcnVsZXMgYW5kIGFsYXJtcyBwcm9wZXJ0aWVzIGZvciBhbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1Byb3BzXG4gIGV4dGVuZHMgQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB7fVxuIl19
@@ -0,0 +1,6 @@
1
+ import { BaseOperationZonalAlarmsAndRulesProps } from './BaseOperationZonalAlarmsAndRulesProps';
2
+ /**
3
+ * The server side zonal alarms and rules properties for an operation
4
+ */
5
+ export interface ServerSideOperationZonalAlarmsAndRulesProps extends BaseOperationZonalAlarmsAndRulesProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbGFybXNhbmRydWxlcy9wcm9wcy9TZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBCYXNlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9CYXNlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzJztcblxuLyoqXG4gKiBUaGUgc2VydmVyIHNpZGUgem9uYWwgYWxhcm1zIGFuZCBydWxlcyBwcm9wZXJ0aWVzIGZvciBhbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzXG4gIGV4dGVuZHMgQmFzZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB7fVxuIl19
@@ -0,0 +1,13 @@
1
+ import { IAvailabilityZoneMapper } from '../../azmapper/IAvailabilityZoneMapper';
2
+ import { IService } from '../../services/IService';
3
+ import { IOperationAlarmsAndRules } from '../IOperationAlarmsAndRules';
4
+ export interface ServiceAlarmsAndRulesProps {
5
+ readonly service: IService;
6
+ readonly perOperationAlarmsAndRules: {
7
+ [key: string]: IOperationAlarmsAndRules;
8
+ };
9
+ /**
10
+ * The AZ Mapper
11
+ */
12
+ readonly azMapper: IAvailabilityZoneMapper;
13
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUFsYXJtc0FuZFJ1bGVzUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvcHJvcHMvU2VydmljZUFsYXJtc0FuZFJ1bGVzUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElBdmFpbGFiaWxpdHlab25lTWFwcGVyIH0gZnJvbSAnLi4vLi4vYXptYXBwZXIvSUF2YWlsYWJpbGl0eVpvbmVNYXBwZXInO1xuaW1wb3J0IHsgSVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9JU2VydmljZSc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuLi9JT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VBbGFybXNBbmRSdWxlc1Byb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZTogSVNlcnZpY2U7XG5cbiAgcmVhZG9ubHkgcGVyT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBJT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBBWiBNYXBwZXJcbiAgICovXG4gIHJlYWRvbmx5IGF6TWFwcGVyOiBJQXZhaWxhYmlsaXR5Wm9uZU1hcHBlcjtcbn1cbiJdfQ==
@@ -0,0 +1,86 @@
1
+ import { CustomResource, Reference } from 'aws-cdk-lib';
2
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
3
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
4
+ import { Construct } from 'constructs';
5
+ import { IAvailabilityZoneMapper } from './IAvailabilityZoneMapper';
6
+ import { AvailabilityZoneMapperProps } from './props/AvailabilityZoneMapperProps';
7
+ /**
8
+ * A construct that allows you to map AZ names to ids and back
9
+ */
10
+ export declare class AvailabilityZoneMapper extends Construct implements IAvailabilityZoneMapper {
11
+ /**
12
+ * The function that does the mapping
13
+ */
14
+ function: IFunction;
15
+ /**
16
+ * The log group for the function's logs
17
+ */
18
+ logGroup: ILogGroup;
19
+ /**
20
+ * The custom resource that can be referenced to use
21
+ * Fn::GetAtt functions on to retrieve availability zone
22
+ * names and ids
23
+ */
24
+ mapper: CustomResource;
25
+ constructor(scope: Construct, id: string, props?: AvailabilityZoneMapperProps);
26
+ /**
27
+ * Gets the Availability Zone Id for the given Availability Zone Name in this account
28
+ * @param availabilityZoneName
29
+ * @returns
30
+ */
31
+ availabilityZoneId(availabilityZoneName: string): string;
32
+ /**
33
+ * Gets the Availability Zone Name for the given Availability Zone Id in this account
34
+ * @param availabilityZoneId
35
+ * @returns
36
+ */
37
+ availabilityZoneName(availabilityZoneId: string): string;
38
+ /**
39
+ * Gets the prefix for the region used with Availability Zone Ids, for example
40
+ * in us-east-1, this returns "use1"
41
+ * @returns
42
+ */
43
+ regionPrefixForAvailabilityZoneIds(): string;
44
+ /**
45
+ * Returns an array for Availability Zone Ids for the supplied Availability Zone names,
46
+ * they are returned in the same order the names were provided
47
+ * @param availabilityZoneNames
48
+ * @returns
49
+ */
50
+ availabilityZoneIdsAsArray(availabilityZoneNames: string[]): string[];
51
+ /**
52
+ * Returns a comma delimited list of Availability Zone Ids for the supplied
53
+ * Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
54
+ * get a specific Availability Zone Id
55
+ * @param availabilityZoneNames
56
+ * @returns
57
+ */
58
+ availabilityZoneIdsAsCommaDelimitedList(availabilityZoneNames: string[]): string;
59
+ /**
60
+ * Returns a comma delimited list of Availability Zone Ids for the supplied
61
+ * Availability Zone names. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
62
+ * get a specific Availability Zone Id
63
+ * @returns
64
+ */
65
+ allAvailabilityZoneIdsAsCommaDelimitedList(): string;
66
+ /**
67
+ * Returns a reference that can be cast to a string array with all of the
68
+ * Availability Zone Ids
69
+ * @returns
70
+ */
71
+ allAvailabilityZoneIdsAsArray(): Reference;
72
+ /**
73
+ * Given a letter like "f" or "a", returns the Availability Zone Id for that
74
+ * Availability Zone name in this account
75
+ * @param letter
76
+ * @returns
77
+ */
78
+ availabilityZoneIdFromAvailabilityZoneLetter(letter: string): string;
79
+ /**
80
+ * Gets all of the Availability Zone names in this Region as a comma delimited
81
+ * list. You can use this string with Fn.Select(x, Fn.Split(",", azs)) to
82
+ * get a specific Availability Zone Name
83
+ * @returns
84
+ */
85
+ allAvailabilityZoneNamesAsCommaDelimitedList(): string;
86
+ }