@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,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InsightRuleBody = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ /**
7
+ * The insight rule body to be included in a CfnInsightRule construct
8
+ */
9
+ class InsightRuleBody {
10
+ constructor() {
11
+ this.schema = {
12
+ name: 'CloudWatchLogRule',
13
+ version: 1,
14
+ };
15
+ this.aggregateOn = '';
16
+ this.contribution = {
17
+ keys: [],
18
+ };
19
+ this.logFormat = '';
20
+ this.logGroupNames = [];
21
+ }
22
+ /**
23
+ * Converts the rule to a JSON string
24
+ * @returns
25
+ */
26
+ toJson() {
27
+ let objectKeysToUpperCase = function (input) {
28
+ if (typeof input !== 'object')
29
+ return input;
30
+ if (Array.isArray(input))
31
+ return input.map(objectKeysToUpperCase);
32
+ return Object.keys(input).reduce(function (newObj, key) {
33
+ let val = input[key];
34
+ let newVal = typeof val === 'object' && val !== null
35
+ ? objectKeysToUpperCase(val)
36
+ : val;
37
+ let newKey = key.slice(0, 1).toUpperCase() + key.substring(1);
38
+ newObj[newKey] = newVal;
39
+ return newObj;
40
+ }, {});
41
+ };
42
+ return JSON.stringify(objectKeysToUpperCase(this));
43
+ }
44
+ }
45
+ exports.InsightRuleBody = InsightRuleBody;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5zaWdodFJ1bGVCb2R5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtc2FuZHJ1bGVzL0luc2lnaHRSdWxlQm9keS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBMEIxQjtRQUNFLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsSUFBSSxFQUFFLEVBQWM7U0FDTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxxQkFBcUIsR0FBRyxVQUFVLEtBQTZCO1lBR2pFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM1QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFDL0IsTUFBOEIsRUFDOUIsR0FBVztnQkFFWCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksTUFBTSxHQUNSLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSTtvQkFDckMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDVixJQUFJLE1BQU0sR0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUN4QixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0Y7QUFsRUQsMENBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuLyoqXG4gKiBUaGUgaW5zaWdodCBydWxlIGJvZHkgdG8gYmUgaW5jbHVkZWQgaW4gYSBDZm5JbnNpZ2h0UnVsZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIEluc2lnaHRSdWxlQm9keSB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgU2NoZW1hIGZvciBhIHJ1bGUgdGhhdCBhbmFseXplcyBDbG91ZFdhdGNoIExvZ3MgZGF0YSBtdXN0IGFsd2F5cyBiZSB7XCJOYW1lXCI6IFwiQ2xvdWRXYXRjaExvZ1J1bGVcIiwgXCJWZXJzaW9uXCI6IDF9XG4gICAqL1xuICBzY2hlbWE6IElSdWxlU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBzdHJpbmdzLiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheSwgeW91IGNhbiBvcHRpb25hbGx5IHVzZSAqIGF0IHRoZSBlbmQgb2YgYSBzdHJpbmcgdG8gaW5jbHVkZSBhbGwgbG9nIGdyb3VwcyB3aXRoIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCB0aGF0IHByZWZpeC5cbiAgICovXG4gIGxvZ0dyb3VwTmFtZXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBWYWxpZCB2YWx1ZXMgYXJlIEpTT04gYW5kIENMRi5cbiAgICovXG4gIGxvZ0Zvcm1hdDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWYWxpZCB2YWx1ZXMgYXJlIENvdW50IGFuZCBTdW0uIFNwZWNpZmllcyB3aGV0aGVyIHRvIGFnZ3JlZ2F0ZSB0aGUgcmVwb3J0IGJhc2VkIG9uIGEgY291bnQgb2Ygb2NjdXJyZW5jZXMgb3IgYSBzdW0gb2YgdGhlIHZhbHVlcyBvZiB0aGUgZmllbGQgdGhhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIFZhbHVlT2YgZmllbGQuXG4gICAqL1xuICBhZ2dyZWdhdGVPbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9iamVjdCBpbmNsdWRlcyBhIEtleXMgYXJyYXkgd2l0aCBhcyBtYW55IGFzIGZvdXIgbWVtYmVycywgb3B0aW9uYWxseSBhIHNpbmdsZSBWYWx1ZU9mLCBhbmQgb3B0aW9uYWxseSBhbiBhcnJheSBvZiBhcyBtYW55IGFzIGZvdXIgRmlsdGVycy5cbiAgICovXG4gIGNvbnRyaWJ1dGlvbjogSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zY2hlbWEgPSB7XG4gICAgICBuYW1lOiAnQ2xvdWRXYXRjaExvZ1J1bGUnLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9O1xuICAgIHRoaXMuYWdncmVnYXRlT24gPSAnJztcbiAgICB0aGlzLmNvbnRyaWJ1dGlvbiA9IHtcbiAgICAgIGtleXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIH0gYXMgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb247XG4gICAgdGhpcy5sb2dGb3JtYXQgPSAnJztcbiAgICB0aGlzLmxvZ0dyb3VwTmFtZXMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgcnVsZSB0byBhIEpTT04gc3RyaW5nXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0b0pzb24oKTogc3RyaW5nIHtcbiAgICBsZXQgb2JqZWN0S2V5c1RvVXBwZXJDYXNlID0gZnVuY3Rpb24gKGlucHV0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KToge1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0ge1xuICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ29iamVjdCcpIHJldHVybiBpbnB1dDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkgcmV0dXJuIGlucHV0Lm1hcChvYmplY3RLZXlzVG9VcHBlckNhc2UpO1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGlucHV0KS5yZWR1Y2UoZnVuY3Rpb24gKFxuICAgICAgICBuZXdPYmo6IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgKSB7XG4gICAgICAgIGxldCB2YWwgPSBpbnB1dFtrZXldO1xuICAgICAgICBsZXQgbmV3VmFsID1cbiAgICAgICAgICB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGxcbiAgICAgICAgICAgID8gb2JqZWN0S2V5c1RvVXBwZXJDYXNlKHZhbClcbiAgICAgICAgICAgIDogdmFsO1xuICAgICAgICBsZXQgbmV3S2V5OiBzdHJpbmcgPSBrZXkuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIG5ld09ialtuZXdLZXldID0gbmV3VmFsO1xuICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgfSwge30pO1xuICAgIH07XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0S2V5c1RvVXBwZXJDYXNlKHRoaXMpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdWxlU2NoZW1hIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBydWxlIHNjaGVtYSwgdGhpcyBzaG91bGQgYnJlIENsb3VkV2F0Y2hMb2dSdWxlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgc2NoZW1hLCB0aGlzIHNob3VsZCBiZSAxXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRyaWJ1dGlvbkRlZmluaXRpb24ge1xuICAvKipcbiAgICogQW4gYXJyYXkgb2YgdXAgdG8gZm91ciBsb2cgZmllbGRzIHRoYXQgYXJlIHVzZWQgYXMgZGltZW5zaW9ucyB0byBjbGFzc2lmeSBjb250cmlidXRvcnMuXG4gICAqIElmIHlvdSBlbnRlciBtb3JlIHRoYW4gb25lIGtleSwgZWFjaCB1bmlxdWUgY29tYmluYXRpb24gb2YgdmFsdWVzIGZvciB0aGUga2V5cyBpcyBjb3VudGVkXG4gICAqIGFzIGEgdW5pcXVlIGNvbnRyaWJ1dG9yLiBUaGUgZmllbGRzIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIEpTT04gcHJvcGVydHkgZm9ybWF0IG5vdGF0aW9uLlxuICAgKi9cbiAga2V5czogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgU3BlY2lmeSB0aGlzIG9ubHkgd2hlbiB5b3UgYXJlIHNwZWNpZnlpbmcgU3VtIGFzIHRoZSB2YWx1ZSBvZiBBZ2dyZWdhdGVPbi5cbiAgICogVmFsdWVPZiBzcGVjaWZpZXMgYSBsb2cgZmllbGQgd2l0aCBudW1lcmljYWwgdmFsdWVzLiBJbiB0aGlzIHR5cGUgb2YgcnVsZSwgdGhlIGNvbnRyaWJ1dG9yc1xuICAgKiBhcmUgcmFua2VkIGJ5IHRoZWlyIHN1bSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZCwgaW5zdGVhZCBvZiB0aGVpciBudW1iZXIgb2Ygb2NjdXJyZW5jZXNcbiAgICogaW4gdGhlIGxvZyBlbnRyaWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gc29ydCBjb250cmlidXRvcnMgYnkgdGhlaXIgdG90YWwgQnl0ZXNTZW50XG4gICAqIG92ZXIgYSBwZXJpb2QsIHlvdSB3b3VsZCBzZXQgVmFsdWVPZiB0byBCeXRlc1NlbnQgYW5kIHNwZWNpZnkgU3VtIGZvciBBZ2dyZWdhdGVPbi4gSWYgdGhpc1xuICAgKiB2YWx1ZSBpcyBub3Qgc2V0LCBpdCBtdXN0IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJ1bGUgYm9keS5cbiAgICovXG4gIHZhbHVlT2Y/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgU3BlY2lmaWVzIGFuIGFycmF5IG9mIGFzIG1hbnkgYXMgZm91ciBmaWx0ZXJzIHRvIG5hcnJvdyB0aGUgbG9nIGV2ZW50c1xuICAgKiB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgcmVwb3J0LiBJZiB5b3Ugc3BlY2lmeSBtdWx0aXBsZSBmaWx0ZXJzLCBDb250cmlidXRvciBJbnNpZ2h0c1xuICAgKiBldmFsdWF0ZXMgdGhlbSB3aXRoIGEgbG9naWNhbCBBTkQgb3BlcmF0b3IuIFlvdSBjYW4gdXNlIHRoaXMgdG8gZmlsdGVyIG91dCBpcnJlbGV2YW50XG4gICAqIGxvZyBldmVudHMgaW4geW91ciBzZWFyY2ggb3IgeW91IGNhbiB1c2UgaXQgdG8gc2VsZWN0IGEgc2luZ2xlIGNvbnRyaWJ1dG9yIHRvIGFuYWx5emUgdGhlaXIgYmVoYXZpb3IuXG4gICAqL1xuICBmaWx0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdO1xufVxuIl19
@@ -0,0 +1,59 @@
1
+ import { IAlarm } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { Construct } from 'constructs';
3
+ import { ICanaryOperationRegionalAlarmsAndRules } from './ICanaryOperationRegionalAlarmsAndRules';
4
+ import { ICanaryOperationZonalAlarmsAndRules } from './ICanaryOperationZonalAlarmsAndRules';
5
+ import { IOperationAlarmsAndRules } from './IOperationAlarmsAndRules';
6
+ import { IServerSideOperationRegionalAlarmsAndRules } from './IServerSideOperationRegionalAlarmsAndRules';
7
+ import { IServerSideOperationZonalAlarmsAndRules } from './IServerSideOperationZonalAlarmsAndRules';
8
+ import { OperationAlarmsAndRulesProps } from './props/OperationAlarmsAndRulesProps';
9
+ import { IOperation } from '../services/IOperation';
10
+ /**
11
+ * Creates alarms and rules for an operation for both regional and zonal metrics
12
+ */
13
+ export declare class OperationAlarmsAndRules extends Construct implements IOperationAlarmsAndRules {
14
+ /**
15
+ * The operation the alarms and rules are created for
16
+ */
17
+ readonly operation: IOperation;
18
+ /**
19
+ * The server side regional alarms and rules
20
+ */
21
+ readonly serverSideRegionalAlarmsAndRules: IServerSideOperationRegionalAlarmsAndRules;
22
+ /**
23
+ * The canary regional alarms and rules
24
+ */
25
+ readonly canaryRegionalAlarmsAndRules?: ICanaryOperationRegionalAlarmsAndRules;
26
+ /**
27
+ * The aggregate regional alarm that looks at both canary and server
28
+ * side impact alarms for latency and availability
29
+ */
30
+ readonly aggregateRegionalAlarm: IAlarm;
31
+ /**
32
+ * The server side zonal alarms and rules
33
+ */
34
+ readonly serverSideZonalAlarmsAndRules: IServerSideOperationZonalAlarmsAndRules[];
35
+ /**
36
+ * The canary zonal alarms and rules
37
+ */
38
+ readonly canaryZonalAlarmsAndRules?: ICanaryOperationZonalAlarmsAndRules[];
39
+ /**
40
+ * The aggregate zonal alarms, one per AZ. Each alarm indicates there is either
41
+ * latency or availability impact in that AZ, and the AZ is an outlier for
42
+ * availability or latency impact. Both server side and canary metrics are
43
+ * evaluated
44
+ */
45
+ readonly aggregateZonalAlarms: IAlarm[];
46
+ /**
47
+ * The aggregate zonal alarm indexed by Availability Zone Id.
48
+ */
49
+ readonly aggregateZonalAlarmsMap: {
50
+ [key: string]: IAlarm;
51
+ };
52
+ /**
53
+ * Just the server side zonal alarms
54
+ */
55
+ readonly serverSideZonalAlarmsMap: {
56
+ [key: string]: IAlarm;
57
+ };
58
+ constructor(scope: Construct, id: string, props: OperationAlarmsAndRulesProps);
59
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationAlarmsAndRules = 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 CanaryOperationRegionalAlarmsAndRules_1 = require("./CanaryOperationRegionalAlarmsAndRules");
10
+ const CanaryOperationZonalAlarmsAndRules_1 = require("./CanaryOperationZonalAlarmsAndRules");
11
+ const ServerSideOperationRegionalAlarmsAndRules_1 = require("./ServerSideOperationRegionalAlarmsAndRules");
12
+ const ServerSideOperationZonalAlarmsAndRules_1 = require("./ServerSideOperationZonalAlarmsAndRules");
13
+ /**
14
+ * Creates alarms and rules for an operation for both regional and zonal metrics
15
+ */
16
+ class OperationAlarmsAndRules extends constructs_1.Construct {
17
+ constructor(scope, id, props) {
18
+ super(scope, id);
19
+ this.serverSideZonalAlarmsAndRules = [];
20
+ this.canaryZonalAlarmsAndRules = [];
21
+ this.aggregateZonalAlarms = [];
22
+ this.operation = props.operation;
23
+ this.aggregateZonalAlarmsMap = {};
24
+ this.serverSideZonalAlarmsMap = {};
25
+ let availabilityZoneIds = props.operation.service.availabilityZoneNames.map((x) => {
26
+ return props.azMapper.availabilityZoneIdFromAvailabilityZoneLetter(x.substring(x.length - 1));
27
+ });
28
+ let loadBalancerArn = '';
29
+ if (props.loadBalancer !== undefined) {
30
+ loadBalancerArn = props.loadBalancer
31
+ .loadBalancerArn;
32
+ }
33
+ this.serverSideRegionalAlarmsAndRules =
34
+ new ServerSideOperationRegionalAlarmsAndRules_1.ServerSideOperationRegionalAlarmsAndRules(this, props.operation.operationName + 'ServerSideRegionalAlarms', {
35
+ availabilityMetricDetails: props.operation.serverSideAvailabilityMetricDetails,
36
+ latencyMetricDetails: props.operation.serverSideLatencyMetricDetails,
37
+ contributorInsightRuleDetails: props.operation
38
+ .serverSideContributorInsightRuleDetails
39
+ ? props.operation.serverSideContributorInsightRuleDetails
40
+ : props.operation.service.defaultContributorInsightRuleDetails,
41
+ nameSuffix: '-server',
42
+ });
43
+ if (props.operation.canaryMetricDetails !== undefined &&
44
+ props.operation.canaryMetricDetails != null) {
45
+ this.canaryRegionalAlarmsAndRules =
46
+ new CanaryOperationRegionalAlarmsAndRules_1.CanaryOperationRegionalAlarmsAndRules(this, props.operation.operationName + 'CanaryRegionalAlarms', {
47
+ availabilityMetricDetails: props.operation.canaryMetricDetails
48
+ .canaryAvailabilityMetricDetails,
49
+ latencyMetricDetails: props.operation.canaryMetricDetails.canaryLatencyMetricDetails,
50
+ nameSuffix: '-canary',
51
+ });
52
+ this.aggregateRegionalAlarm = new aws_cloudwatch_1.CompositeAlarm(this, props.operation.operationName + 'AggregateRegionalAlarm', {
53
+ actionsEnabled: false,
54
+ compositeAlarmName: aws_cdk_lib_1.Fn.ref('AWS::Region') +
55
+ '-' +
56
+ props.operation.operationName.toLowerCase() +
57
+ '-' +
58
+ 'aggregate-alarm',
59
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm, this.canaryRegionalAlarmsAndRules.availabilityOrLatencyAlarm),
60
+ });
61
+ }
62
+ else {
63
+ this.aggregateRegionalAlarm =
64
+ this.serverSideRegionalAlarmsAndRules.availabilityOrLatencyAlarm;
65
+ }
66
+ let counter = 1;
67
+ for (let i = 0; i < availabilityZoneIds.length; i++) {
68
+ let availabilityZoneId = availabilityZoneIds[i];
69
+ this.serverSideZonalAlarmsAndRules.push(new ServerSideOperationZonalAlarmsAndRules_1.ServerSideOperationZonalAlarmsAndRules(this, props.operation.operationName +
70
+ 'AZ' +
71
+ counter +
72
+ 'ServerSideZonalAlarmsAndRules', {
73
+ availabilityZoneId: availabilityZoneId,
74
+ availabilityMetricDetails: props.operation.serverSideAvailabilityMetricDetails,
75
+ latencyMetricDetails: props.operation.serverSideLatencyMetricDetails,
76
+ contributorInsightRuleDetails: props.operation
77
+ .serverSideContributorInsightRuleDetails
78
+ ? props.operation.serverSideContributorInsightRuleDetails
79
+ : props.operation.service.defaultContributorInsightRuleDetails,
80
+ counter: counter,
81
+ outlierThreshold: props.outlierThreshold,
82
+ outlierDetectionAlgorithm: props.outlierDetectionAlgorithm,
83
+ nameSuffix: '-server',
84
+ operation: props.operation,
85
+ azMapper: props.azMapper,
86
+ outlierDetectionFunction: props.outlierDetectionFunction,
87
+ }));
88
+ this.serverSideZonalAlarmsMap[availabilityZoneId] =
89
+ this.serverSideZonalAlarmsAndRules[i].isolatedImpactAlarm;
90
+ if (props.operation.canaryMetricDetails !== undefined &&
91
+ props.operation.canaryMetricDetails != null) {
92
+ this.canaryZonalAlarmsAndRules.push(new CanaryOperationZonalAlarmsAndRules_1.CanaryOperationZonalAlarmsAndRules(this, props.operation.operationName +
93
+ 'AZ' +
94
+ counter +
95
+ 'CanaryZonalAlarmsAndRules', {
96
+ availabilityZoneId: availabilityZoneId,
97
+ availabilityMetricDetails: props.operation.canaryMetricDetails
98
+ .canaryAvailabilityMetricDetails,
99
+ latencyMetricDetails: props.operation.canaryMetricDetails.canaryLatencyMetricDetails,
100
+ counter: counter,
101
+ outlierThreshold: props.outlierThreshold,
102
+ outlierDetectionAlgorithm: props.outlierDetectionAlgorithm,
103
+ nameSuffix: '-canary',
104
+ operation: props.operation,
105
+ azMapper: props.azMapper,
106
+ outlierDetectionFunction: props.outlierDetectionFunction,
107
+ }));
108
+ this.aggregateZonalAlarms.push(new aws_cloudwatch_1.CompositeAlarm(this, props.operation.operationName +
109
+ 'AZ' +
110
+ counter +
111
+ 'AggregateZonalIsolatedImpactAlarm', {
112
+ compositeAlarmName: availabilityZoneId +
113
+ '-' +
114
+ props.operation.operationName.toLowerCase() +
115
+ '-aggregate-isolated-az-impact',
116
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(this.canaryZonalAlarmsAndRules[i].isolatedImpactAlarm, this.serverSideZonalAlarmsAndRules[i].isolatedImpactAlarm),
117
+ actionsEnabled: false,
118
+ alarmDescription: '{"loadBalancer":"' +
119
+ loadBalancerArn +
120
+ '","az-id":"' +
121
+ availabilityZoneId +
122
+ '"}',
123
+ }));
124
+ }
125
+ else {
126
+ this.aggregateZonalAlarms.push(this.serverSideZonalAlarmsAndRules[i].isolatedImpactAlarm);
127
+ }
128
+ this.aggregateZonalAlarmsMap[availabilityZoneId] =
129
+ this.aggregateZonalAlarms[-1];
130
+ counter++;
131
+ }
132
+ }
133
+ }
134
+ exports.OperationAlarmsAndRules = OperationAlarmsAndRules;
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0Qyw2Q0FBaUM7QUFDakMsK0RBQStFO0FBRS9FLDJDQUF1QztBQUN2QyxtR0FBZ0c7QUFDaEcsNkZBQTBGO0FBTzFGLDJHQUF3RztBQUN4RyxxR0FBa0c7QUFHbEc7O0dBRUc7QUFDSCxNQUFhLHVCQUNYLFNBQVEsc0JBQVM7SUFtRGpCLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQW1DO1FBRW5DLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUVuQyxJQUFJLG1CQUFtQixHQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN0RCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsNENBQTRDLENBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDMUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxlQUFlLEdBQVcsRUFBRSxDQUFDO1FBRWpDLElBQUksS0FBSyxDQUFD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QW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFsYXJtUnVsZSwgQ29tcG9zaXRlQWxhcm0sIElBbGFybSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IEJhc2VMb2FkQmFsYW5jZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0NhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vQ2FuYXJ5T3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vSUNhbmFyeU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lDYW5hcnlPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElPcGVyYXRpb25BbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vSVNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IElTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vSVNlcnZlclNpZGVPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IE9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMgfSBmcm9tICcuL3Byb3BzL09wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzUHJvcHMnO1xuaW1wb3J0IHsgU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL1NlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IFNlcnZlclNpZGVPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9TZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJT3BlcmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvSU9wZXJhdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhbGFybXMgYW5kIHJ1bGVzIGZvciBhbiBvcGVyYXRpb24gZm9yIGJvdGggcmVnaW9uYWwgYW5kIHpvbmFsIG1ldHJpY3NcbiAqL1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSU9wZXJhdGlvbkFsYXJtc0FuZFJ1bGVzIHtcbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gdGhlIGFsYXJtcyBhbmQgcnVsZXMgYXJlIGNyZWF0ZWQgZm9yXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb246IElPcGVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2ZXIgc2lkZSByZWdpb25hbCBhbGFybXMgYW5kIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlczogSVNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FuYXJ5IHJlZ2lvbmFsIGFsYXJtcyBhbmQgcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IGNhbmFyeVJlZ2lvbmFsQWxhcm1zQW5kUnVsZXM/OiBJQ2FuYXJ5T3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcztcblxuICAvKipcbiAgICogVGhlIGFnZ3JlZ2F0ZSByZWdpb25hbCBhbGFybSB0aGF0IGxvb2tzIGF0IGJvdGggY2FuYXJ5IGFuZCBzZXJ2ZXJcbiAgICogc2lkZSBpbXBhY3QgYWxhcm1zIGZvciBsYXRlbmN5IGFuZCBhdmFpbGFiaWxpdHlcbiAgICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0ZVJlZ2lvbmFsQWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogVGhlIHNlcnZlciBzaWRlIHpvbmFsIGFsYXJtcyBhbmQgcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzOiBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNbXTtcblxuICAvKipcbiAgICogVGhlIGNhbmFyeSB6b25hbCBhbGFybXMgYW5kIHJ1bGVzXG4gICAqL1xuICByZWFkb25seSBjYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzPzogSUNhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXNbXTtcblxuICAvKipcbiAgICogVGhlIGFnZ3JlZ2F0ZSB6b25hbCBhbGFybXMsIG9uZSBwZXIgQVouIEVhY2ggYWxhcm0gaW5kaWNhdGVzIHRoZXJlIGlzIGVpdGhlclxuICAgKiBsYXRlbmN5IG9yIGF2YWlsYWJpbGl0eSBpbXBhY3QgaW4gdGhhdCBBWiwgYW5kIHRoZSBBWiBpcyBhbiBvdXRsaWVyIGZvclxuICAgKiBhdmFpbGFiaWxpdHkgb3IgbGF0ZW5jeSBpbXBhY3QuIEJvdGggc2VydmVyIHNpZGUgYW5kIGNhbmFyeSBtZXRyaWNzIGFyZVxuICAgKiBldmFsdWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0ZVpvbmFsQWxhcm1zOiBJQWxhcm1bXTtcblxuICAvKipcbiAgICogVGhlIGFnZ3JlZ2F0ZSB6b25hbCBhbGFybSBpbmRleGVkIGJ5IEF2YWlsYWJpbGl0eSBab25lIElkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWdncmVnYXRlWm9uYWxBbGFybXNNYXA6IHsgW2tleTogc3RyaW5nXTogSUFsYXJtIH07XG5cbiAgLyoqXG4gICAqIEp1c3QgdGhlIHNlcnZlciBzaWRlIHpvbmFsIGFsYXJtc1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyU2lkZVpvbmFsQWxhcm1zTWFwOiB7IFtrZXk6IHN0cmluZ106IElBbGFybSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogT3BlcmF0aW9uQWxhcm1zQW5kUnVsZXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzID0gW107XG4gICAgdGhpcy5jYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzID0gW107XG4gICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtcyA9IFtdO1xuICAgIHRoaXMub3BlcmF0aW9uID0gcHJvcHMub3BlcmF0aW9uO1xuICAgIHRoaXMuYWdncmVnYXRlWm9uYWxBbGFybXNNYXAgPSB7fTtcbiAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc01hcCA9IHt9O1xuXG4gICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZHM6IHN0cmluZ1tdID1cbiAgICAgIHByb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLmF2YWlsYWJpbGl0eVpvbmVOYW1lcy5tYXAoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmF6TWFwcGVyLmF2YWlsYWJpbGl0eVpvbmVJZEZyb21BdmFpbGFiaWxpdHlab25lTGV0dGVyKFxuICAgICAgICAgIHguc3Vic3RyaW5nKHgubGVuZ3RoIC0gMSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIGxldCBsb2FkQmFsYW5jZXJBcm46IHN0cmluZyA9ICcnO1xuXG4gICAgaWYgKHByb3BzLmxvYWRCYWxhbmNlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2FkQmFsYW5jZXJBcm4gPSAocHJvcHMubG9hZEJhbGFuY2VyIGFzIEJhc2VMb2FkQmFsYW5jZXIpXG4gICAgICAgIC5sb2FkQmFsYW5jZXJBcm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlcyA9XG4gICAgICBuZXcgU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICsgJ1NlcnZlclNpZGVSZWdpb25hbEFsYXJtcycsXG4gICAgICAgIHtcbiAgICAgICAgICBhdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzOlxuICAgICAgICAgICAgcHJvcHMub3BlcmF0aW9uLnNlcnZlclNpZGVBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIGxhdGVuY3lNZXRyaWNEZXRhaWxzOiBwcm9wcy5vcGVyYXRpb24uc2VydmVyU2lkZUxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIGNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzOiBwcm9wcy5vcGVyYXRpb25cbiAgICAgICAgICAgIC5zZXJ2ZXJTaWRlQ29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHNcbiAgICAgICAgICAgID8gcHJvcHMub3BlcmF0aW9uLnNlcnZlclNpZGVDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlsc1xuICAgICAgICAgICAgOiBwcm9wcy5vcGVyYXRpb24uc2VydmljZS5kZWZhdWx0Q29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMsXG4gICAgICAgICAgbmFtZVN1ZmZpeDogJy1zZXJ2ZXInLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzICE9IG51bGxcbiAgICApIHtcbiAgICAgIHRoaXMuY2FuYXJ5UmVnaW9uYWxBbGFybXNBbmRSdWxlcyA9XG4gICAgICAgIG5ldyBDYW5hcnlPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgKyAnQ2FuYXJ5UmVnaW9uYWxBbGFybXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHM6XG4gICAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5jYW5hcnlNZXRyaWNEZXRhaWxzXG4gICAgICAgICAgICAgICAgLmNhbmFyeUF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgICBsYXRlbmN5TWV0cmljRGV0YWlsczpcbiAgICAgICAgICAgICAgcHJvcHMub3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMuY2FuYXJ5TGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgICBuYW1lU3VmZml4OiAnLWNhbmFyeScsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgdGhpcy5hZ2dyZWdhdGVSZWdpb25hbEFsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgICB0aGlzLFxuICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArICdBZ2dyZWdhdGVSZWdpb25hbEFsYXJtJyxcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBjb21wb3NpdGVBbGFybU5hbWU6XG4gICAgICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJykgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCkgK1xuICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICdhZ2dyZWdhdGUtYWxhcm0nLFxuICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlcy5hdmFpbGFiaWxpdHlPckxhdGVuY3lBbGFybSxcbiAgICAgICAgICAgIHRoaXMuY2FuYXJ5UmVnaW9uYWxBbGFybXNBbmRSdWxlcy5hdmFpbGFiaWxpdHlPckxhdGVuY3lBbGFybSxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZ2dyZWdhdGVSZWdpb25hbEFsYXJtID1cbiAgICAgICAgdGhpcy5zZXJ2ZXJTaWRlUmVnaW9uYWxBbGFybXNBbmRSdWxlcy5hdmFpbGFiaWxpdHlPckxhdGVuY3lBbGFybTtcbiAgICB9XG5cbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXZhaWxhYmlsaXR5Wm9uZUlkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nID0gYXZhaWxhYmlsaXR5Wm9uZUlkc1tpXTtcblxuICAgICAgdGhpcy5zZXJ2ZXJTaWRlWm9uYWxBbGFybXNBbmRSdWxlcy5wdXNoKFxuICAgICAgICBuZXcgU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZSArXG4gICAgICAgICAgICAnQVonICtcbiAgICAgICAgICAgIGNvdW50ZXIgK1xuICAgICAgICAgICAgJ1NlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQ6IGF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHM6XG4gICAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5zZXJ2ZXJTaWRlQXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICAgIGxhdGVuY3lNZXRyaWNEZXRhaWxzOlxuICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24uc2VydmVyU2lkZUxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgICAgY29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHM6IHByb3BzLm9wZXJhdGlvblxuICAgICAgICAgICAgICAuc2VydmVyU2lkZUNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzXG4gICAgICAgICAgICAgID8gcHJvcHMub3BlcmF0aW9uLnNlcnZlclNpZGVDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlsc1xuICAgICAgICAgICAgICA6IHByb3BzLm9wZXJhdGlvbi5zZXJ2aWNlLmRlZmF1bHRDb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgICAgICAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgICAgICAgICBvdXRsaWVyVGhyZXNob2xkOiBwcm9wcy5vdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICAgICAgb3V0bGllckRldGVjdGlvbkFsZ29yaXRobTogcHJvcHMub3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWVTdWZmaXg6ICctc2VydmVyJyxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcHJvcHMub3BlcmF0aW9uLFxuICAgICAgICAgICAgYXpNYXBwZXI6IHByb3BzLmF6TWFwcGVyLFxuICAgICAgICAgICAgb3V0bGllckRldGVjdGlvbkZ1bmN0aW9uOiBwcm9wcy5vdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zTWFwW2F2YWlsYWJpbGl0eVpvbmVJZF0gPVxuICAgICAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzW2ldLmlzb2xhdGVkSW1wYWN0QWxhcm07XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMub3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscyAhPSBudWxsXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzLnB1c2goXG4gICAgICAgICAgbmV3IENhbmFyeU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICAgICAnQVonICtcbiAgICAgICAgICAgICAgY291bnRlciArXG4gICAgICAgICAgICAgICdDYW5hcnlab25hbEFsYXJtc0FuZFJ1bGVzJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZUlkOiBhdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHM6XG4gICAgICAgICAgICAgICAgcHJvcHMub3BlcmF0aW9uLmNhbmFyeU1ldHJpY0RldGFpbHNcbiAgICAgICAgICAgICAgICAgIC5jYW5hcnlBdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgICAgICBsYXRlbmN5TWV0cmljRGV0YWlsczpcbiAgICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24uY2FuYXJ5TWV0cmljRGV0YWlscy5jYW5hcnlMYXRlbmN5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICAgICAgY291bnRlcjogY291bnRlcixcbiAgICAgICAgICAgICAgb3V0bGllclRocmVzaG9sZDogcHJvcHMub3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgICAgICAgb3V0bGllckRldGVjdGlvbkFsZ29yaXRobTogcHJvcHMub3V0bGllckRldGVjdGlvbkFsZ29yaXRobSxcbiAgICAgICAgICAgICAgbmFtZVN1ZmZpeDogJy1jYW5hcnknLFxuICAgICAgICAgICAgICBvcGVyYXRpb246IHByb3BzLm9wZXJhdGlvbixcbiAgICAgICAgICAgICAgYXpNYXBwZXI6IHByb3BzLmF6TWFwcGVyLFxuICAgICAgICAgICAgICBvdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb246IHByb3BzLm91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZVpvbmFsQWxhcm1zLnB1c2goXG4gICAgICAgICAgbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHByb3BzLm9wZXJhdGlvbi5vcGVyYXRpb25OYW1lICtcbiAgICAgICAgICAgICAgJ0FaJyArXG4gICAgICAgICAgICAgIGNvdW50ZXIgK1xuICAgICAgICAgICAgICAnQWdncmVnYXRlWm9uYWxJc29sYXRlZEltcGFjdEFsYXJtJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29tcG9zaXRlQWxhcm1OYW1lOlxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICBwcm9wcy5vcGVyYXRpb24ub3BlcmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICAnLWFnZ3JlZ2F0ZS1pc29sYXRlZC1hei1pbXBhY3QnLFxuICAgICAgICAgICAgICBhbGFybVJ1bGU6IEFsYXJtUnVsZS5hbnlPZihcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmFyeVpvbmFsQWxhcm1zQW5kUnVsZXNbaV0uaXNvbGF0ZWRJbXBhY3RBbGFybSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZlclNpZGVab25hbEFsYXJtc0FuZFJ1bGVzW2ldLmlzb2xhdGVkSW1wYWN0QWxhcm0sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGFjdGlvbnNFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAne1wibG9hZEJhbGFuY2VyXCI6XCInICtcbiAgICAgICAgICAgICAgICBsb2FkQmFsYW5jZXJBcm4gK1xuICAgICAgICAgICAgICAgICdcIixcImF6LWlkXCI6XCInICtcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lSWQgK1xuICAgICAgICAgICAgICAgICdcIn0nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtcy5wdXNoKFxuICAgICAgICAgIHRoaXMuc2VydmVyU2lkZVpvbmFsQWxhcm1zQW5kUnVsZXNbaV0uaXNvbGF0ZWRJbXBhY3RBbGFybSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtc01hcFthdmFpbGFiaWxpdHlab25lSWRdID1cbiAgICAgICAgdGhpcy5hZ2dyZWdhdGVab25hbEFsYXJtc1stMV07XG5cbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { CfnInsightRule } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { Construct } from 'constructs';
3
+ import { BaseOperationRegionalAlarmsAndRules } from './BaseOperationRegionalAlarmsAndRules';
4
+ import { IServerSideOperationRegionalAlarmsAndRules } from './IServerSideOperationRegionalAlarmsAndRules';
5
+ import { ServerSideOperationRegionalAlarmsAndRulesProps } from './props/ServerSideOperationRegionalAlarmsAndRulesProps';
6
+ /**
7
+ * The server side regional alarms and rules for an operation
8
+ */
9
+ export declare class ServerSideOperationRegionalAlarmsAndRules extends BaseOperationRegionalAlarmsAndRules implements IServerSideOperationRegionalAlarmsAndRules {
10
+ /**
11
+ * A rule that shows which instances are contributing to high latency responses
12
+ */
13
+ instanceContributorsToRegionalHighLatency?: CfnInsightRule;
14
+ /**
15
+ * A rule that shows which instances are contributing to faults
16
+ */
17
+ instanceContributorsToRegionalFaults?: CfnInsightRule;
18
+ constructor(scope: Construct, id: string, props: ServerSideOperationRegionalAlarmsAndRulesProps);
19
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerSideOperationRegionalAlarmsAndRules = void 0;
4
+ const AvailabilityAndLatencyAlarmsAndRules_1 = require("./AvailabilityAndLatencyAlarmsAndRules");
5
+ const BaseOperationRegionalAlarmsAndRules_1 = require("./BaseOperationRegionalAlarmsAndRules");
6
+ /**
7
+ * The server side regional alarms and rules for an operation
8
+ */
9
+ class ServerSideOperationRegionalAlarmsAndRules extends BaseOperationRegionalAlarmsAndRules_1.BaseOperationRegionalAlarmsAndRules {
10
+ constructor(scope, id, props) {
11
+ super(scope, id, props);
12
+ if (props.contributorInsightRuleDetails !== undefined &&
13
+ props.contributorInsightRuleDetails != null) {
14
+ this.instanceContributorsToRegionalFaults =
15
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createRegionalInstanceContributorsToFaults(this, props.availabilityMetricDetails, props.contributorInsightRuleDetails);
16
+ this.instanceContributorsToRegionalHighLatency =
17
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createRegionalInstanceContributorsToHighLatency(this, props.latencyMetricDetails, props.contributorInsightRuleDetails);
18
+ }
19
+ }
20
+ }
21
+ exports.ServerSideOperationRegionalAlarmsAndRules = ServerSideOperationRegionalAlarmsAndRules;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsaUdBQThGO0FBQzlGLCtGQUE0RjtBQUk1Rjs7R0FFRztBQUNILE1BQWEseUNBQ1gsU0FBUSx5RUFBbUM7SUFZM0MsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBcUQ7UUFFckQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFDRSxLQUFLLENBQUMsNkJBQTZCLEtBQUssU0FBUztZQUNqRCxLQUFLLENBQUMsNkJBQTZCLElBQUksSUFBSSxFQUMzQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLG9DQUFvQztnQkFDdkMsMkVBQW9DLENBQUMsMENBQTBDLENBQzdFLElBQUksRUFDSixLQUFLLENBQUMseUJBQXlCLEVBQy9CLEtBQUssQ0FBQyw2QkFBNkIsQ0FDcEMsQ0FBQztZQUNKLElBQUksQ0FBQyx5Q0FBeUM7Z0JBQzVDLDJFQUFvQyxDQUFDLCtDQUErQyxDQUNsRixJQUFJLEVBQ0osS0FBSyxDQUFDLG9CQUFvQixFQUMxQixLQUFLLENBQUMsNkJBQTZCLENBQ3BDLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdENELDhGQXNDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IENmbkluc2lnaHRSdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBCYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vQmFzZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgSVNlcnZlclNpZGVPcGVyYXRpb25SZWdpb25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9JU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXMnO1xuaW1wb3J0IHsgU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyB9IGZyb20gJy4vcHJvcHMvU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyc7XG5cbi8qKlxuICogVGhlIHNlcnZlciBzaWRlIHJlZ2lvbmFsIGFsYXJtcyBhbmQgcnVsZXMgZm9yIGFuIG9wZXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNcbiAgZXh0ZW5kcyBCYXNlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlc1xuICBpbXBsZW1lbnRzIElTZXJ2ZXJTaWRlT3BlcmF0aW9uUmVnaW9uYWxBbGFybXNBbmRSdWxlcyB7XG4gIC8qKlxuICAgKiBBIHJ1bGUgdGhhdCBzaG93cyB3aGljaCBpbnN0YW5jZXMgYXJlIGNvbnRyaWJ1dGluZyB0byBoaWdoIGxhdGVuY3kgcmVzcG9uc2VzXG4gICAqL1xuICBpbnN0YW5jZUNvbnRyaWJ1dG9yc1RvUmVnaW9uYWxIaWdoTGF0ZW5jeT86IENmbkluc2lnaHRSdWxlO1xuXG4gIC8qKlxuICAgKiBBIHJ1bGUgdGhhdCBzaG93cyB3aGljaCBpbnN0YW5jZXMgYXJlIGNvbnRyaWJ1dGluZyB0byBmYXVsdHNcbiAgICovXG4gIGluc3RhbmNlQ29udHJpYnV0b3JzVG9SZWdpb25hbEZhdWx0cz86IENmbkluc2lnaHRSdWxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogU2VydmVyU2lkZU9wZXJhdGlvblJlZ2lvbmFsQWxhcm1zQW5kUnVsZXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5jb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwcm9wcy5jb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyAhPSBudWxsXG4gICAgKSB7XG4gICAgICB0aGlzLmluc3RhbmNlQ29udHJpYnV0b3JzVG9SZWdpb25hbEZhdWx0cyA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVSZWdpb25hbEluc3RhbmNlQ29udHJpYnV0b3JzVG9GYXVsdHMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIHByb3BzLmNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgICAgICApO1xuICAgICAgdGhpcy5pbnN0YW5jZUNvbnRyaWJ1dG9yc1RvUmVnaW9uYWxIaWdoTGF0ZW5jeSA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVSZWdpb25hbEluc3RhbmNlQ29udHJpYnV0b3JzVG9IaWdoTGF0ZW5jeShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHByb3BzLmxhdGVuY3lNZXRyaWNEZXRhaWxzLFxuICAgICAgICAgIHByb3BzLmNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,40 @@
1
+ import { IAlarm, CfnInsightRule } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { Construct } from 'constructs';
3
+ import { BaseOperationZonalAlarmsAndRules } from './BaseOperationZonalAlarmsAndRules';
4
+ import { IServerSideOperationZonalAlarmsAndRules } from './IServerSideOperationZonalAlarmsAndRules';
5
+ import { ServerSideOperationZonalAlarmsAndRulesProps } from './props/ServerSideOperationZonalAlarmsAndRulesProps';
6
+ /**
7
+ * The server side alarms and rules for an operation in an Availability Zone
8
+ */
9
+ export declare class ServerSideOperationZonalAlarmsAndRules extends BaseOperationZonalAlarmsAndRules implements IServerSideOperationZonalAlarmsAndRules {
10
+ /**
11
+ * Alarm that triggers if either latency or availability breach the specified
12
+ * threshold in this AZ and the AZ is an outlier for faults or latency
13
+ */
14
+ isolatedImpactAlarm: IAlarm;
15
+ /**
16
+ * Alarm indicating that there are multiple instances producing faults in
17
+ * this AZ indicating the fault rate is not being caused by a single instance
18
+ */
19
+ multipleInstancesProducingFaultsInThisAvailabilityZone?: IAlarm;
20
+ /**
21
+ * Alarm indicating that there are multiple instances producing high
22
+ * latency responses in this AZ indicating the latency is not being
23
+ * caused by a single instance
24
+ */
25
+ multipleInstancesProducingHighLatencyInThisAZ?: IAlarm;
26
+ /**
27
+ * Insight rule that measures the number of instances contributing to high latency in this AZ
28
+ */
29
+ instanceContributorsToHighLatencyInThisAZ?: CfnInsightRule;
30
+ /**
31
+ * Insight rule that measures the number of instances contributing to faults in this AZ
32
+ */
33
+ instanceContributorsToFaultsInThisAZ?: CfnInsightRule;
34
+ /**
35
+ * Insight rule that is used to calculate the number of instances in this particular AZ that is used with metric math to calculate
36
+ * the percent of instances contributing to latency or faults
37
+ */
38
+ instancesHandlingRequestsInThisAZ?: CfnInsightRule;
39
+ constructor(scope: Construct, id: string, props: ServerSideOperationZonalAlarmsAndRulesProps);
40
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerSideOperationZonalAlarmsAndRules = 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 AvailabilityAndLatencyAlarmsAndRules_1 = require("./AvailabilityAndLatencyAlarmsAndRules");
8
+ const BaseOperationZonalAlarmsAndRules_1 = require("./BaseOperationZonalAlarmsAndRules");
9
+ /**
10
+ * The server side alarms and rules for an operation in an Availability Zone
11
+ */
12
+ class ServerSideOperationZonalAlarmsAndRules extends BaseOperationZonalAlarmsAndRules_1.BaseOperationZonalAlarmsAndRules {
13
+ constructor(scope, id, props) {
14
+ super(scope, id, props);
15
+ if (props.contributorInsightRuleDetails !== undefined &&
16
+ props.contributorInsightRuleDetails != null) {
17
+ this.instancesHandlingRequestsInThisAZ =
18
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideInstancesHandlingRequestsInThisAZRule(this, props.availabilityMetricDetails.operationName, props.availabilityZoneId, props.contributorInsightRuleDetails, props.counter, props.nameSuffix);
19
+ this.instanceContributorsToFaultsInThisAZ =
20
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideInstanceFaultContributorsInThisAZRule(this, props.availabilityMetricDetails.operationName, props.availabilityZoneId, props.contributorInsightRuleDetails, props.counter, props.nameSuffix);
21
+ this.multipleInstancesProducingFaultsInThisAvailabilityZone =
22
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideZonalMoreThanOneInstanceProducingFaultsAlarm(this, props.availabilityMetricDetails, props.availabilityZoneId, props.counter, props.outlierThreshold, this.instanceContributorsToFaultsInThisAZ, this.instancesHandlingRequestsInThisAZ, props.nameSuffix);
23
+ this.instanceContributorsToHighLatencyInThisAZ =
24
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideInstanceHighLatencyContributorsInThisAZRule(this, props.latencyMetricDetails, props.availabilityZoneId, props.contributorInsightRuleDetails, props.counter, props.nameSuffix);
25
+ this.multipleInstancesProducingHighLatencyInThisAZ =
26
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideZonalMoreThanOneInstanceProducingHighLatencyAlarm(this, props.latencyMetricDetails, props.availabilityZoneId, props.counter, props.outlierThreshold, this.instanceContributorsToHighLatencyInThisAZ, this.instancesHandlingRequestsInThisAZ, props.nameSuffix);
27
+ this.isolatedImpactAlarm =
28
+ AvailabilityAndLatencyAlarmsAndRules_1.AvailabilityAndLatencyAlarmsAndRules.createServerSideIsolatedAZImpactAlarm(this, props.availabilityMetricDetails.operationName, props.availabilityZoneId, props.counter, this.availabilityZoneIsOutlierForFaults, this.availabilityAlarm, this.multipleInstancesProducingFaultsInThisAvailabilityZone, this.availabilityZoneIsOutlierForLatency, this.latencyAlarm, this.multipleInstancesProducingHighLatencyInThisAZ, props.nameSuffix);
29
+ }
30
+ else {
31
+ this.isolatedImpactAlarm = new aws_cloudwatch_1.CompositeAlarm(scope, props.operation.operationName +
32
+ 'AZ' +
33
+ props.counter +
34
+ 'IsolatedImpactAlarm' +
35
+ props.nameSuffix, {
36
+ compositeAlarmName: props.availabilityZoneId +
37
+ `-${props.operation.operationName.toLowerCase()}-isolated-impact-alarm` +
38
+ props.nameSuffix,
39
+ alarmRule: aws_cloudwatch_1.AlarmRule.anyOf(aws_cloudwatch_1.AlarmRule.allOf(this.availabilityZoneIsOutlierForFaults, this.availabilityAlarm), aws_cloudwatch_1.AlarmRule.allOf(this.availabilityZoneIsOutlierForLatency, this.latencyAlarm)),
40
+ actionsEnabled: false,
41
+ });
42
+ }
43
+ }
44
+ }
45
+ exports.ServerSideOperationZonalAlarmsAndRules = ServerSideOperationZonalAlarmsAndRules;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zYW5kcnVsZXMvU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0QywrREFLb0M7QUFFcEMsaUdBQThGO0FBQzlGLHlGQUFzRjtBQUl0Rjs7R0FFRztBQUNILE1BQWEsc0NBQ1gsU0FBUSxtRUFBZ0M7SUFxQ3hDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQWtEO1FBRWxELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQ0UsS0FBSyxDQUFDLDZCQUE2QixLQUFLLFNBQVM7WUFDakQsS0FBSyxDQUFDLDZCQUE2QixJQUFJLElBQUksRUFDM0MsQ0FBQztZQUNELElBQUksQ0FBQyxpQ0FBaUM7Z0JBQ3BDLDJFQUFvQyxDQUFDLHFEQUFxRCxDQUN4RixJQUFJLEVBQ0osS0FBSyxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFDN0MsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixLQUFLLENBQUMsNkJBQTZCLEVBQ25DLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztZQUNKLElBQUksQ0FBQyxvQ0FBb0M7Z0JBQ3ZDLDJFQUFvQyxDQUFDLHFEQUFxRCxDQUN4RixJQUFJLEVBQ0osS0FBSyxDQUFDLHlCQUF5QixDQUFDLGFBQWEsRUFDN0MsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixLQUFLLENBQUMsNkJBQTZCLEVBQ25DLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztZQUNKLElBQUksQ0FBQyxzREFBc0Q7Z0JBQ3pELDJFQUFvQyxDQUFDLDREQUE0RCxDQUMvRixJQUFJLEVBQ0osS0FBSyxDQUFDLHlCQUF5QixFQUMvQixLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLGdCQUFnQixFQUN0QixJQUFJLENBQUMsb0NBQW9DLEVBQ3pDLElBQUksQ0FBQyxpQ0FBaUMsRUFDdEMsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztZQUNKLElBQUksQ0FBQyx5Q0FBeUM7Z0JBQzVDLDJFQUFvQyxDQUFDLDJEQUEyRCxDQUM5RixJQUFJLEVBQ0osS0FBSyxDQUFDLG9CQUFvQixFQUMxQixLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyw2QkFBNkIsRUFDbkMsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsVUFBVSxDQUNqQixDQUFDO1lBQ0osSUFBSSxDQUFDLDZDQUE2QztnQkFDaEQsMkVBQW9DLENBQUMsaUVBQWlFLENBQ3BHLElBQUksRUFDSixLQUFLLENBQUMsb0JBQW9CLEVBQzFCLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsZ0JBQWdCLEVBQ3RCLElBQUksQ0FBQyx5Q0FBeUMsRUFDOUMsSUFBSSxDQUFDLGlDQUFpQyxFQUN0QyxLQUFLLENBQUMsVUFBVSxDQUNqQixDQUFDO1lBRUosSUFBSSxDQUFDLG1CQUFtQjtnQkFDdEIsMkVBQW9DLENBQUMscUNBQXFDLENBQ3hFLElBQUksRUFDSixLQUFLLENBQUMseUJBQXlCLENBQUMsYUFBYSxFQUM3QyxLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyxPQUFPLEVBQ2IsSUFBSSxDQUFDLGtDQUFrQyxFQUN2QyxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxzREFBc0QsRUFDM0QsSUFBSSxDQUFDLG1DQUFtQyxFQUN4QyxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsNkNBQTZDLEVBQ2xELEtBQUssQ0FBQyxVQUFVLENBQ2pCLENBQUM7UUFDTixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLCtCQUFjLENBQzNDLEtBQUssRUFDTCxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWE7Z0JBQzNCLElBQUk7Z0JBQ0osS0FBSyxDQUFDLE9BQU87Z0JBQ2IscUJBQXFCO2dCQUNyQixLQUFLLENBQUMsVUFBVSxFQUNsQjtnQkFDRSxrQkFBa0IsRUFDaEIsS0FBSyxDQUFDLGtCQUFrQjtvQkFDeEIsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsd0JBQXdCO29CQUN2RSxLQUFLLENBQUMsVUFBVTtnQkFDbEIsU0FBUyxFQUFFLDBCQUFTLENBQUMsS0FBSyxDQUN4QiwwQkFBUyxDQUFDLEtBQUssQ0FDYixJQUFJLENBQUMsa0NBQWtDLEVBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsRUFDRCwwQkFBUyxDQUFDLEtBQUssQ0FDYixJQUFJLENBQUMsbUNBQW1DLEVBQ3hDLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQ0Y7Z0JBQ0QsY0FBYyxFQUFFLEtBQUs7YUFDdEIsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQTdJRCx3RkE2SUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQge1xuICBJQWxhcm0sXG4gIENmbkluc2lnaHRSdWxlLFxuICBDb21wb3NpdGVBbGFybSxcbiAgQWxhcm1SdWxlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcyB9IGZyb20gJy4vQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzJztcbmltcG9ydCB7IEJhc2VPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIH0gZnJvbSAnLi9CYXNlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBJU2VydmVyU2lkZU9wZXJhdGlvblpvbmFsQWxhcm1zQW5kUnVsZXMgfSBmcm9tICcuL0lTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlcyc7XG5pbXBvcnQgeyBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9TZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzJztcblxuLyoqXG4gKiBUaGUgc2VydmVyIHNpZGUgYWxhcm1zIGFuZCBydWxlcyBmb3IgYW4gb3BlcmF0aW9uIGluIGFuIEF2YWlsYWJpbGl0eSBab25lXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1xuICBleHRlbmRzIEJhc2VPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzXG4gIGltcGxlbWVudHMgSVNlcnZlclNpZGVPcGVyYXRpb25ab25hbEFsYXJtc0FuZFJ1bGVzIHtcbiAgLyoqXG4gICAqIEFsYXJtIHRoYXQgdHJpZ2dlcnMgaWYgZWl0aGVyIGxhdGVuY3kgb3IgYXZhaWxhYmlsaXR5IGJyZWFjaCB0aGUgc3BlY2lmaWVkXG4gICAqIHRocmVzaG9sZCBpbiB0aGlzIEFaIGFuZCB0aGUgQVogaXMgYW4gb3V0bGllciBmb3IgZmF1bHRzIG9yIGxhdGVuY3lcbiAgICovXG4gIGlzb2xhdGVkSW1wYWN0QWxhcm06IElBbGFybTtcblxuICAvKipcbiAgICogQWxhcm0gaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBtdWx0aXBsZSBpbnN0YW5jZXMgcHJvZHVjaW5nIGZhdWx0cyBpblxuICAgKiB0aGlzIEFaIGluZGljYXRpbmcgdGhlIGZhdWx0IHJhdGUgaXMgbm90IGJlaW5nIGNhdXNlZCBieSBhIHNpbmdsZSBpbnN0YW5jZVxuICAgKi9cbiAgbXVsdGlwbGVJbnN0YW5jZXNQcm9kdWNpbmdGYXVsdHNJblRoaXNBdmFpbGFiaWxpdHlab25lPzogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBBbGFybSBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG11bHRpcGxlIGluc3RhbmNlcyBwcm9kdWNpbmcgaGlnaFxuICAgKiBsYXRlbmN5IHJlc3BvbnNlcyBpbiB0aGlzIEFaIGluZGljYXRpbmcgdGhlIGxhdGVuY3kgaXMgbm90IGJlaW5nXG4gICAqIGNhdXNlZCBieSBhIHNpbmdsZSBpbnN0YW5jZVxuICAgKi9cbiAgbXVsdGlwbGVJbnN0YW5jZXNQcm9kdWNpbmdIaWdoTGF0ZW5jeUluVGhpc0FaPzogSUFsYXJtO1xuXG4gIC8qKlxuICAgKiBJbnNpZ2h0IHJ1bGUgdGhhdCBtZWFzdXJlcyB0aGUgbnVtYmVyIG9mIGluc3RhbmNlcyBjb250cmlidXRpbmcgdG8gaGlnaCBsYXRlbmN5IGluIHRoaXMgQVpcbiAgICovXG4gIGluc3RhbmNlQ29udHJpYnV0b3JzVG9IaWdoTGF0ZW5jeUluVGhpc0FaPzogQ2ZuSW5zaWdodFJ1bGU7XG5cbiAgLyoqXG4gICAqIEluc2lnaHQgcnVsZSB0aGF0IG1lYXN1cmVzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIGNvbnRyaWJ1dGluZyB0byBmYXVsdHMgaW4gdGhpcyBBWlxuICAgKi9cbiAgaW5zdGFuY2VDb250cmlidXRvcnNUb0ZhdWx0c0luVGhpc0FaPzogQ2ZuSW5zaWdodFJ1bGU7XG5cbiAgLyoqXG4gICAqIEluc2lnaHQgcnVsZSB0aGF0IGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIGluIHRoaXMgcGFydGljdWxhciBBWiB0aGF0IGlzIHVzZWQgd2l0aCBtZXRyaWMgbWF0aCB0byBjYWxjdWxhdGVcbiAgICogdGhlIHBlcmNlbnQgb2YgaW5zdGFuY2VzIGNvbnRyaWJ1dGluZyB0byBsYXRlbmN5IG9yIGZhdWx0c1xuICAgKi9cbiAgaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaPzogQ2ZuSW5zaWdodFJ1bGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBTZXJ2ZXJTaWRlT3BlcmF0aW9uWm9uYWxBbGFybXNBbmRSdWxlc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLmNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHByb3BzLmNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzICE9IG51bGxcbiAgICApIHtcbiAgICAgIHRoaXMuaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaID1cbiAgICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVNlcnZlclNpZGVJbnN0YW5jZXNIYW5kbGluZ1JlcXVlc3RzSW5UaGlzQVpSdWxlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLFxuICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBwcm9wcy5jb250cmlidXRvckluc2lnaHRSdWxlRGV0YWlscyxcbiAgICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG4gICAgICB0aGlzLmluc3RhbmNlQ29udHJpYnV0b3JzVG9GYXVsdHNJblRoaXNBWiA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVTZXJ2ZXJTaWRlSW5zdGFuY2VGYXVsdENvbnRyaWJ1dG9yc0luVGhpc0FaUnVsZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eU1ldHJpY0RldGFpbHMub3BlcmF0aW9uTmFtZSxcbiAgICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgcHJvcHMuY29udHJpYnV0b3JJbnNpZ2h0UnVsZURldGFpbHMsXG4gICAgICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgICApO1xuICAgICAgdGhpcy5tdWx0aXBsZUluc3RhbmNlc1Byb2R1Y2luZ0ZhdWx0c0luVGhpc0F2YWlsYWJpbGl0eVpvbmUgPVxuICAgICAgICBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5QWxhcm1zQW5kUnVsZXMuY3JlYXRlU2VydmVyU2lkZVpvbmFsTW9yZVRoYW5PbmVJbnN0YW5jZVByb2R1Y2luZ0ZhdWx0c0FsYXJtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscyxcbiAgICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgICAgcHJvcHMuY291bnRlcixcbiAgICAgICAgICBwcm9wcy5vdXRsaWVyVGhyZXNob2xkLFxuICAgICAgICAgIHRoaXMuaW5zdGFuY2VDb250cmlidXRvcnNUb0ZhdWx0c0luVGhpc0FaLFxuICAgICAgICAgIHRoaXMuaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG4gICAgICB0aGlzLmluc3RhbmNlQ29udHJpYnV0b3JzVG9IaWdoTGF0ZW5jeUluVGhpc0FaID1cbiAgICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVNlcnZlclNpZGVJbnN0YW5jZUhpZ2hMYXRlbmN5Q29udHJpYnV0b3JzSW5UaGlzQVpSdWxlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMubGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIHByb3BzLmNvbnRyaWJ1dG9ySW5zaWdodFJ1bGVEZXRhaWxzLFxuICAgICAgICAgIHByb3BzLmNvdW50ZXIsXG4gICAgICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICAgICAgKTtcbiAgICAgIHRoaXMubXVsdGlwbGVJbnN0YW5jZXNQcm9kdWNpbmdIaWdoTGF0ZW5jeUluVGhpc0FaID1cbiAgICAgICAgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeUFsYXJtc0FuZFJ1bGVzLmNyZWF0ZVNlcnZlclNpZGVab25hbE1vcmVUaGFuT25lSW5zdGFuY2VQcm9kdWNpbmdIaWdoTGF0ZW5jeUFsYXJtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMubGF0ZW5jeU1ldHJpY0RldGFpbHMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICAgIHByb3BzLmNvdW50ZXIsXG4gICAgICAgICAgcHJvcHMub3V0bGllclRocmVzaG9sZCxcbiAgICAgICAgICB0aGlzLmluc3RhbmNlQ29udHJpYnV0b3JzVG9IaWdoTGF0ZW5jeUluVGhpc0FaLFxuICAgICAgICAgIHRoaXMuaW5zdGFuY2VzSGFuZGxpbmdSZXF1ZXN0c0luVGhpc0FaLFxuICAgICAgICAgIHByb3BzLm5hbWVTdWZmaXgsXG4gICAgICAgICk7XG5cbiAgICAgIHRoaXMuaXNvbGF0ZWRJbXBhY3RBbGFybSA9XG4gICAgICAgIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lBbGFybXNBbmRSdWxlcy5jcmVhdGVTZXJ2ZXJTaWRlSXNvbGF0ZWRBWkltcGFjdEFsYXJtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5TWV0cmljRGV0YWlscy5vcGVyYXRpb25OYW1lLFxuICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgICBwcm9wcy5jb3VudGVyLFxuICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckZhdWx0cyxcbiAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eUFsYXJtLFxuICAgICAgICAgIHRoaXMubXVsdGlwbGVJbnN0YW5jZXNQcm9kdWNpbmdGYXVsdHNJblRoaXNBdmFpbGFiaWxpdHlab25lLFxuICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZUlzT3V0bGllckZvckxhdGVuY3ksXG4gICAgICAgICAgdGhpcy5sYXRlbmN5QWxhcm0sXG4gICAgICAgICAgdGhpcy5tdWx0aXBsZUluc3RhbmNlc1Byb2R1Y2luZ0hpZ2hMYXRlbmN5SW5UaGlzQVosXG4gICAgICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc29sYXRlZEltcGFjdEFsYXJtID0gbmV3IENvbXBvc2l0ZUFsYXJtKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgcHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUgK1xuICAgICAgICAgICdBWicgK1xuICAgICAgICAgIHByb3BzLmNvdW50ZXIgK1xuICAgICAgICAgICdJc29sYXRlZEltcGFjdEFsYXJtJyArXG4gICAgICAgICAgcHJvcHMubmFtZVN1ZmZpeCxcbiAgICAgICAge1xuICAgICAgICAgIGNvbXBvc2l0ZUFsYXJtTmFtZTpcbiAgICAgICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCArXG4gICAgICAgICAgICBgLSR7cHJvcHMub3BlcmF0aW9uLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKX0taXNvbGF0ZWQtaW1wYWN0LWFsYXJtYCArXG4gICAgICAgICAgICBwcm9wcy5uYW1lU3VmZml4LFxuICAgICAgICAgIGFsYXJtUnVsZTogQWxhcm1SdWxlLmFueU9mKFxuICAgICAgICAgICAgQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JGYXVsdHMsXG4gICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5QWxhcm0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgQWxhcm1SdWxlLmFsbE9mKFxuICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVJc091dGxpZXJGb3JMYXRlbmN5LFxuICAgICAgICAgICAgICB0aGlzLmxhdGVuY3lBbGFybSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhY3Rpb25zRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,48 @@
1
+ import { IAlarm } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { Construct } from 'constructs';
3
+ import { IServiceAlarmsAndRules } from './IServiceAlarmsAndRules';
4
+ import { ServiceAlarmsAndRulesProps } from './props/ServiceAlarmsAndRulesProps';
5
+ import { IService } from '../services/IService';
6
+ /**
7
+ * Service level alarms and rules using critical operations
8
+ */
9
+ export declare class ServiceAlarmsAndRules extends Construct implements IServiceAlarmsAndRules {
10
+ /**
11
+ * The service these alarms and rules are for
12
+ */
13
+ service: IService;
14
+ /**
15
+ * The zonal aggregate isolated impact alarms. There is 1 alarm per AZ that
16
+ * triggers for availability or latency impact to any critical operation in that AZ
17
+ * that indicates it has isolated impact as measured by canaries or server-side.
18
+ */
19
+ zonalAggregateIsolatedImpactAlarms: IAlarm[];
20
+ /**
21
+ * The zonal server-side isolated impact alarms. There is 1 alarm per AZ that triggers
22
+ * on availability or atency impact to any critical operation in that AZ. These are useful
23
+ * for deployment monitoring to not inadvertently fail when a canary can't contact an AZ
24
+ * during a deployment.
25
+ */
26
+ zonalServerSideIsolatedImpactAlarms: IAlarm[];
27
+ /**
28
+ * An alarm for regional availability or latency impact of any critical operation as measured by the canary.
29
+ */
30
+ regionalAvailabilityOrLatencyCanaryAlarm?: IAlarm;
31
+ /**
32
+ * An alarm for regional availability impact of any critical operation as measured by the canary.
33
+ */
34
+ regionalAvailabilityCanaryAlarm?: IAlarm;
35
+ /**
36
+ * An alarm for regional availability or latency impact of any critical operation as measured by the server-side.
37
+ */
38
+ regionalAvailabilityOrLatencyServerSideAlarm: IAlarm;
39
+ /**
40
+ * An alarm for regional availability impact of any critical operation as measured by the server-side.
41
+ */
42
+ regionalAvailabilityServerSideAlarm: IAlarm;
43
+ /**
44
+ * An alarm for fault count exceeding a regional threshold for all critical operations.
45
+ */
46
+ regionalFaultCountServerSideAlarm: IAlarm;
47
+ constructor(scope: Construct, id: string, props: ServiceAlarmsAndRulesProps);
48
+ }