@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,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZonalAvailabilityMetrics = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const AvailabilityAndLatencyMetrics_1 = require("./AvailabilityAndLatencyMetrics");
9
+ const AvailabilityMetricType_1 = require("../utilities/AvailabilityMetricType");
10
+ class ZonalAvailabilityMetrics {
11
+ /**
12
+ * Creates a zonal service level availability metrics, one metric for
13
+ * each operation at the zonal level and the service.
14
+ * @param props
15
+ * @returns The metric at index 0 is the metric math expression for the whole service. The following metrics
16
+ * are the metrics for each operation included in the request availability metric props.
17
+ */
18
+ static createZonalServiceAvailabilityMetrics(props) {
19
+ let usingMetrics = {};
20
+ let operationMetrics = [];
21
+ let counter = 0;
22
+ props.availabilityMetricProps.forEach((prop) => {
23
+ let keyPrefix = (prop.keyPrefix === undefined || prop.keyPrefix == ''
24
+ ? ''
25
+ : prop.keyPrefix.toLowerCase() + '_') +
26
+ prop.metricDetails.operationName.toLowerCase() +
27
+ '_' +
28
+ prop.metricType.toString().toLowerCase();
29
+ let zonalOperationAvailabilityMetric = this.createZonalAvailabilityMetric(prop);
30
+ operationMetrics.push(zonalOperationAvailabilityMetric);
31
+ usingMetrics[`${keyPrefix}${counter++}`] =
32
+ zonalOperationAvailabilityMetric;
33
+ });
34
+ let expression = '';
35
+ switch (props.availabilityMetricProps[0].metricType) {
36
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_RATE:
37
+ expression = `(${Object.keys(usingMetrics).join('+')}) / ${props.availabilityMetricProps.length}`;
38
+ break;
39
+ case AvailabilityMetricType_1.AvailabilityMetricType.REQUEST_COUNT:
40
+ expression = `${Object.keys(usingMetrics).join('+')}`;
41
+ break;
42
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_COUNT:
43
+ expression = `${Object.keys(usingMetrics).join('+')}`;
44
+ break;
45
+ case AvailabilityMetricType_1.AvailabilityMetricType.FAULT_RATE:
46
+ expression = `(${Object.keys(usingMetrics).join('+')}) / ${props.availabilityMetricProps.length}`;
47
+ break;
48
+ case AvailabilityMetricType_1.AvailabilityMetricType.SUCCESS_COUNT:
49
+ expression = `${Object.keys(usingMetrics).join('+')}`;
50
+ break;
51
+ }
52
+ let math = new aws_cloudwatch_1.MathExpression({
53
+ usingMetrics: usingMetrics,
54
+ period: props.period,
55
+ label: props.label,
56
+ expression: expression,
57
+ });
58
+ operationMetrics.splice(0, 0, math);
59
+ return operationMetrics;
60
+ }
61
+ /**
62
+ * Creates a zonal availability metric
63
+ * @param props
64
+ * @returns
65
+ */
66
+ static createZonalAvailabilityMetric(props) {
67
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createAvailabilityMetric(props, props.metricDetails.metricDimensions.zonalDimensions(props.availabilityZoneId, aws_cdk_lib_1.Fn.ref('AWS::Region')));
68
+ }
69
+ }
70
+ exports.ZonalAvailabilityMetrics = ZonalAvailabilityMetrics;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ldHJpY3MvWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFDdEMsNkNBQWlDO0FBQ2pDLCtEQUFxRTtBQUNyRSxtRkFBZ0Y7QUFHaEYsZ0ZBQTZFO0FBRTdFLE1BQWEsd0JBQXdCO0lBQ25DOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxxQ0FBcUMsQ0FDMUMsS0FBcUM7UUFFckMsSUFBSSxZQUFZLEdBQStCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLGdCQUFnQixHQUFjLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sR0FBVyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksU0FBUyxHQUNYLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFO2dCQUNuRCxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnQkFDOUMsR0FBRztnQkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTNDLElBQUksZ0NBQWdDLEdBQ2xDLElBQUksQ0FBQyw2QkFBNkIsQ0FDaEMsSUFBb0MsQ0FDckMsQ0FBQztZQUVKLGdCQUFnQixDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3hELFlBQVksQ0FBQyxHQUFHLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxnQ0FBZ0MsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxHQUFXLEVBQUUsQ0FBQztRQUU1QixRQUFRLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwRCxLQUFLLCtDQUFzQixDQUFDLFlBQVk7Z0JBQ3RDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEcsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsYUFBYTtnQkFDdkMsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsV0FBVztnQkFDckMsVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTTtZQUNSLEtBQUssK0NBQXNCLENBQUMsVUFBVTtnQkFDcEMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsRyxNQUFNO1lBQ1IsS0FBSywrQ0FBc0IsQ0FBQyxhQUFhO2dCQUN2QyxVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNO1FBQ1YsQ0FBQztRQUNELElBQUksSUFBSSxHQUFZLElBQUksK0JBQWMsQ0FBQztZQUNyQyxZQUFZLEVBQUUsWUFBWTtZQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUMsQ0FBQztRQUVILGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBDLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsNkJBQTZCLENBQ2xDLEtBQW1DO1FBRW5DLE9BQU8sNkRBQTZCLENBQUMsd0JBQXdCLENBQzNELEtBQUssRUFDTCxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDbEQsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixnQkFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDdEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBakZELDREQWlGQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSU1ldHJpYywgTWF0aEV4cHJlc3Npb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyB9IGZyb20gJy4vQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MnO1xuaW1wb3J0IHsgU2VydmljZUF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9TZXJ2aWNlQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB9IGZyb20gJy4vcHJvcHMvWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlIH0gZnJvbSAnLi4vdXRpbGl0aWVzL0F2YWlsYWJpbGl0eU1ldHJpY1R5cGUnO1xuXG5leHBvcnQgY2xhc3MgWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNzIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB6b25hbCBzZXJ2aWNlIGxldmVsIGF2YWlsYWJpbGl0eSBtZXRyaWNzLCBvbmUgbWV0cmljIGZvclxuICAgKiBlYWNoIG9wZXJhdGlvbiBhdCB0aGUgem9uYWwgbGV2ZWwgYW5kIHRoZSBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnMgVGhlIG1ldHJpYyBhdCBpbmRleCAwIGlzIHRoZSBtZXRyaWMgbWF0aCBleHByZXNzaW9uIGZvciB0aGUgd2hvbGUgc2VydmljZS4gVGhlIGZvbGxvd2luZyBtZXRyaWNzXG4gICAqIGFyZSB0aGUgbWV0cmljcyBmb3IgZWFjaCBvcGVyYXRpb24gaW5jbHVkZWQgaW4gdGhlIHJlcXVlc3QgYXZhaWxhYmlsaXR5IG1ldHJpYyBwcm9wcy5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbFNlcnZpY2VBdmFpbGFiaWxpdHlNZXRyaWNzKFxuICAgIHByb3BzOiBTZXJ2aWNlQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMsXG4gICk6IElNZXRyaWNbXSB7XG4gICAgbGV0IHVzaW5nTWV0cmljczogeyBba2V5OiBzdHJpbmddOiBJTWV0cmljIH0gPSB7fTtcbiAgICBsZXQgb3BlcmF0aW9uTWV0cmljczogSU1ldHJpY1tdID0gW107XG4gICAgbGV0IGNvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgICBwcm9wcy5hdmFpbGFiaWxpdHlNZXRyaWNQcm9wcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICBsZXQga2V5UHJlZml4OiBzdHJpbmcgPVxuICAgICAgICAocHJvcC5rZXlQcmVmaXggPT09IHVuZGVmaW5lZCB8fCBwcm9wLmtleVByZWZpeCA9PSAnJ1xuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHByb3Aua2V5UHJlZml4LnRvTG93ZXJDYXNlKCkgKyAnXycpICtcbiAgICAgICAgcHJvcC5tZXRyaWNEZXRhaWxzLm9wZXJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKSArXG4gICAgICAgICdfJyArXG4gICAgICAgIHByb3AubWV0cmljVHlwZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGxldCB6b25hbE9wZXJhdGlvbkF2YWlsYWJpbGl0eU1ldHJpYzogSU1ldHJpYyA9XG4gICAgICAgIHRoaXMuY3JlYXRlWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWMoXG4gICAgICAgICAgcHJvcCBhcyBab25hbEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLFxuICAgICAgICApO1xuXG4gICAgICBvcGVyYXRpb25NZXRyaWNzLnB1c2goem9uYWxPcGVyYXRpb25BdmFpbGFiaWxpdHlNZXRyaWMpO1xuICAgICAgdXNpbmdNZXRyaWNzW2Ake2tleVByZWZpeH0ke2NvdW50ZXIrK31gXSA9XG4gICAgICAgIHpvbmFsT3BlcmF0aW9uQXZhaWxhYmlsaXR5TWV0cmljO1xuICAgIH0pO1xuXG4gICAgbGV0IGV4cHJlc3Npb246IHN0cmluZyA9ICcnO1xuXG4gICAgc3dpdGNoIChwcm9wcy5hdmFpbGFiaWxpdHlNZXRyaWNQcm9wc1swXS5tZXRyaWNUeXBlKSB7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuU1VDQ0VTU19SQVRFOlxuICAgICAgICBleHByZXNzaW9uID0gYCgke09iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpfSkgLyAke3Byb3BzLmF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLmxlbmd0aH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5SRVFVRVNUX0NPVU5UOlxuICAgICAgICBleHByZXNzaW9uID0gYCR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEF2YWlsYWJpbGl0eU1ldHJpY1R5cGUuRkFVTFRfQ09VTlQ6XG4gICAgICAgIGV4cHJlc3Npb24gPSBgJHtPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKX1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5GQVVMVF9SQVRFOlxuICAgICAgICBleHByZXNzaW9uID0gYCgke09iamVjdC5rZXlzKHVzaW5nTWV0cmljcykuam9pbignKycpfSkgLyAke3Byb3BzLmF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLmxlbmd0aH1gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXZhaWxhYmlsaXR5TWV0cmljVHlwZS5TVUNDRVNTX0NPVU5UOlxuICAgICAgICBleHByZXNzaW9uID0gYCR7T2JqZWN0LmtleXModXNpbmdNZXRyaWNzKS5qb2luKCcrJyl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGxldCBtYXRoOiBJTWV0cmljID0gbmV3IE1hdGhFeHByZXNzaW9uKHtcbiAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QsXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwsXG4gICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgb3BlcmF0aW9uTWV0cmljcy5zcGxpY2UoMCwgMCwgbWF0aCk7XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uTWV0cmljcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgem9uYWwgYXZhaWxhYmlsaXR5IG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbEF2YWlsYWJpbGl0eU1ldHJpYyhcbiAgICBwcm9wczogWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyxcbiAgKTogSU1ldHJpYyB7XG4gICAgcmV0dXJuIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUF2YWlsYWJpbGl0eU1ldHJpYyhcbiAgICAgIHByb3BzLFxuICAgICAgcHJvcHMubWV0cmljRGV0YWlscy5tZXRyaWNEaW1lbnNpb25zLnpvbmFsRGltZW5zaW9ucyhcbiAgICAgICAgcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZUlkLFxuICAgICAgICBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { IMetric } from 'aws-cdk-lib/aws-cloudwatch';
2
+ import { ServiceLatencyMetricProps } from './props/ServiceLatencyMericProps';
3
+ import { ZonalLatencyMetricProps } from './props/ZonalLatencyMetricProps';
4
+ export declare class ZonalLatencyMetrics {
5
+ /**
6
+ * Creates a zonal latency metric
7
+ * @param props
8
+ * @returns
9
+ */
10
+ static createZonalLatencyMetrics(props: ZonalLatencyMetricProps): IMetric[];
11
+ /**
12
+ * Creates an average zonal latency metric
13
+ * @param props
14
+ * @returns
15
+ */
16
+ static createZonalAverageLatencyMetric(props: ZonalLatencyMetricProps): IMetric;
17
+ /**
18
+ * Creates a count of high latency metric
19
+ * @param props
20
+ * @returns
21
+ */
22
+ static createZonalCountLatencyMetric(props: ZonalLatencyMetricProps): IMetric;
23
+ /**
24
+ * Creates a count of high latency responses for all critical operations
25
+ * @param props
26
+ * @returns
27
+ */
28
+ static createZonalServiceLatencyMetrics(props: ServiceLatencyMetricProps): IMetric[];
29
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZonalLatencyMetrics = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
8
+ const AvailabilityAndLatencyMetrics_1 = require("./AvailabilityAndLatencyMetrics");
9
+ class ZonalLatencyMetrics {
10
+ /**
11
+ * Creates a zonal latency metric
12
+ * @param props
13
+ * @returns
14
+ */
15
+ static createZonalLatencyMetrics(props) {
16
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createLatencyMetrics(props, props.metricDetails.metricDimensions.zonalDimensions(props.availabilityZoneId, aws_cdk_lib_1.Fn.ref('AWS::Region')));
17
+ }
18
+ /**
19
+ * Creates an average zonal latency metric
20
+ * @param props
21
+ * @returns
22
+ */
23
+ static createZonalAverageLatencyMetric(props) {
24
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createAverageLatencyMetric(props, props.metricDetails.metricDimensions.zonalDimensions(props.availabilityZoneId, aws_cdk_lib_1.Fn.ref('AWS::Region')));
25
+ }
26
+ /**
27
+ * Creates a count of high latency metric
28
+ * @param props
29
+ * @returns
30
+ */
31
+ static createZonalCountLatencyMetric(props) {
32
+ return AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.createLatencyCountMetric(props, props.metricDetails.metricDimensions.zonalDimensions(props.availabilityZoneId, aws_cdk_lib_1.Fn.ref('AWS::Region')));
33
+ }
34
+ /**
35
+ * Creates a count of high latency responses for all critical operations
36
+ * @param props
37
+ * @returns
38
+ */
39
+ static createZonalServiceLatencyMetrics(props) {
40
+ let usingMetrics = {};
41
+ let operationMetrics = [];
42
+ let keyPrefix = AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.nextChar('');
43
+ props.latencyMetricProps.forEach((prop, index) => {
44
+ let operationZonalMetric = this.createZonalCountLatencyMetric(prop);
45
+ operationMetrics.push(operationZonalMetric);
46
+ usingMetrics[`${keyPrefix}${index}`] = operationZonalMetric;
47
+ keyPrefix = AvailabilityAndLatencyMetrics_1.AvailabilityAndLatencyMetrics.nextChar(keyPrefix);
48
+ });
49
+ if (Object.keys(usingMetrics).length == 1) {
50
+ operationMetrics.push(Object.values(usingMetrics)[0]);
51
+ }
52
+ else {
53
+ let math = new aws_cloudwatch_1.MathExpression({
54
+ usingMetrics: usingMetrics,
55
+ period: props.period,
56
+ label: props.label,
57
+ expression: Object.keys(usingMetrics).join('+'),
58
+ });
59
+ operationMetrics.splice(0, 0, math);
60
+ }
61
+ return operationMetrics;
62
+ }
63
+ }
64
+ exports.ZonalLatencyMetrics = ZonalLatencyMetrics;
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm9uYWxMYXRlbmN5TWV0cmljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXRyaWNzL1pvbmFsTGF0ZW5jeU1ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUN0Qyw2Q0FBaUM7QUFDakMsK0RBQXFFO0FBQ3JFLG1GQUFnRjtBQUtoRixNQUFhLG1CQUFtQjtJQUM5Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEtBQThCO1FBQzdELE9BQU8sNkRBQTZCLENBQUMsb0JBQW9CLENBQ3ZELEtBQUssRUFDTCxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDbEQsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixnQkFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDdEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsK0JBQStCLENBQ3BDLEtBQThCO1FBRTlCLE9BQU8sNkRBQTZCLENBQUMsMEJBQTBCLENBQzdELEtBQUssRUFDTCxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDbEQsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixnQkFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDdEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsNkJBQTZCLENBQ2xDLEtBQThCO1FBRTlCLE9BQU8sNkRBQTZCLENBQUMsd0JBQXdCLENBQzNELEtBQUssRUFDTCxLQUFLLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDbEQsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixnQkFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDdEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0NBQWdDLENBQ3JDLEtBQWdDO1FBRWhDLElBQUksWUFBWSxHQUErQixFQUFFLENBQUM7UUFDbEQsSUFBSSxnQkFBZ0IsR0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxTQUFTLEdBQVcsNkRBQTZCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQzlCLENBQUMsSUFBd0IsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUMxQyxJQUFJLG9CQUFvQixHQUFZLElBQUksQ0FBQyw2QkFBNkIsQ0FDcEUsSUFBK0IsQ0FDaEMsQ0FBQztZQUVGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzVDLFlBQVksQ0FBQyxHQUFHLFNBQVMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO1lBQzVELFNBQVMsR0FBRyw2REFBNkIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUNGLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksR0FBWSxJQUFJLCtCQUFjLENBQUM7Z0JBQ3JDLFlBQVksRUFBRSxZQUFZO2dCQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNoRCxDQUFDLENBQUM7WUFFSCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUF6RkQsa0RBeUZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgRm4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJTWV0cmljLCBNYXRoRXhwcmVzc2lvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcyc7XG5pbXBvcnQgeyBMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL0xhdGVuY3lNZXRyaWNQcm9wcyc7XG5pbXBvcnQgeyBTZXJ2aWNlTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9wcm9wcy9TZXJ2aWNlTGF0ZW5jeU1lcmljUHJvcHMnO1xuaW1wb3J0IHsgWm9uYWxMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL3Byb3BzL1pvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzJztcblxuZXhwb3J0IGNsYXNzIFpvbmFsTGF0ZW5jeU1ldHJpY3Mge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHpvbmFsIGxhdGVuY3kgbWV0cmljXG4gICAqIEBwYXJhbSBwcm9wc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVpvbmFsTGF0ZW5jeU1ldHJpY3MocHJvcHM6IFpvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzKTogSU1ldHJpY1tdIHtcbiAgICByZXR1cm4gQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY3MuY3JlYXRlTGF0ZW5jeU1ldHJpY3MoXG4gICAgICBwcm9wcyxcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy56b25hbERpbWVuc2lvbnMoXG4gICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgRm4ucmVmKCdBV1M6OlJlZ2lvbicpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXZlcmFnZSB6b25hbCBsYXRlbmN5IG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbEF2ZXJhZ2VMYXRlbmN5TWV0cmljKFxuICAgIHByb3BzOiBab25hbExhdGVuY3lNZXRyaWNQcm9wcyxcbiAgKTogSU1ldHJpYyB7XG4gICAgcmV0dXJuIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNzLmNyZWF0ZUF2ZXJhZ2VMYXRlbmN5TWV0cmljKFxuICAgICAgcHJvcHMsXG4gICAgICBwcm9wcy5tZXRyaWNEZXRhaWxzLm1ldHJpY0RpbWVuc2lvbnMuem9uYWxEaW1lbnNpb25zKFxuICAgICAgICBwcm9wcy5hdmFpbGFiaWxpdHlab25lSWQsXG4gICAgICAgIEZuLnJlZignQVdTOjpSZWdpb24nKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY291bnQgb2YgaGlnaCBsYXRlbmN5IG1ldHJpY1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbENvdW50TGF0ZW5jeU1ldHJpYyhcbiAgICBwcm9wczogWm9uYWxMYXRlbmN5TWV0cmljUHJvcHMsXG4gICk6IElNZXRyaWMge1xuICAgIHJldHVybiBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5jcmVhdGVMYXRlbmN5Q291bnRNZXRyaWMoXG4gICAgICBwcm9wcyxcbiAgICAgIHByb3BzLm1ldHJpY0RldGFpbHMubWV0cmljRGltZW5zaW9ucy56b25hbERpbWVuc2lvbnMoXG4gICAgICAgIHByb3BzLmF2YWlsYWJpbGl0eVpvbmVJZCxcbiAgICAgICAgRm4ucmVmKCdBV1M6OlJlZ2lvbicpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb3VudCBvZiBoaWdoIGxhdGVuY3kgcmVzcG9uc2VzIGZvciBhbGwgY3JpdGljYWwgb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0gcHJvcHNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVab25hbFNlcnZpY2VMYXRlbmN5TWV0cmljcyhcbiAgICBwcm9wczogU2VydmljZUxhdGVuY3lNZXRyaWNQcm9wcyxcbiAgKTogSU1ldHJpY1tdIHtcbiAgICBsZXQgdXNpbmdNZXRyaWNzOiB7IFtrZXk6IHN0cmluZ106IElNZXRyaWMgfSA9IHt9O1xuICAgIGxldCBvcGVyYXRpb25NZXRyaWNzOiBJTWV0cmljW10gPSBbXTtcbiAgICBsZXQga2V5UHJlZml4OiBzdHJpbmcgPSBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5uZXh0Q2hhcignJyk7XG5cbiAgICBwcm9wcy5sYXRlbmN5TWV0cmljUHJvcHMuZm9yRWFjaChcbiAgICAgIChwcm9wOiBMYXRlbmN5TWV0cmljUHJvcHMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IG9wZXJhdGlvblpvbmFsTWV0cmljOiBJTWV0cmljID0gdGhpcy5jcmVhdGVab25hbENvdW50TGF0ZW5jeU1ldHJpYyhcbiAgICAgICAgICBwcm9wIGFzIFpvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzLFxuICAgICAgICApO1xuXG4gICAgICAgIG9wZXJhdGlvbk1ldHJpY3MucHVzaChvcGVyYXRpb25ab25hbE1ldHJpYyk7XG4gICAgICAgIHVzaW5nTWV0cmljc1tgJHtrZXlQcmVmaXh9JHtpbmRleH1gXSA9IG9wZXJhdGlvblpvbmFsTWV0cmljO1xuICAgICAgICBrZXlQcmVmaXggPSBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljcy5uZXh0Q2hhcihrZXlQcmVmaXgpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHVzaW5nTWV0cmljcykubGVuZ3RoID09IDEpIHtcbiAgICAgIG9wZXJhdGlvbk1ldHJpY3MucHVzaChPYmplY3QudmFsdWVzKHVzaW5nTWV0cmljcylbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWF0aDogSU1ldHJpYyA9IG5ldyBNYXRoRXhwcmVzc2lvbih7XG4gICAgICAgIHVzaW5nTWV0cmljczogdXNpbmdNZXRyaWNzLFxuICAgICAgICBwZXJpb2Q6IHByb3BzLnBlcmlvZCxcbiAgICAgICAgbGFiZWw6IHByb3BzLmxhYmVsLFxuICAgICAgICBleHByZXNzaW9uOiBPYmplY3Qua2V5cyh1c2luZ01ldHJpY3MpLmpvaW4oJysnKSxcbiAgICAgIH0pO1xuXG4gICAgICBvcGVyYXRpb25NZXRyaWNzLnNwbGljZSgwLCAwLCBtYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uTWV0cmljcztcbiAgfVxufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { IOperationMetricDetails } from '../../services/IOperationMetricDetails';
2
+ /**
3
+ * Common availability and latency metric props
4
+ */
5
+ export interface AvailabilityAndLatencyMetricProps {
6
+ /**
7
+ * The metric details to create metrics from
8
+ */
9
+ readonly metricDetails: IOperationMetricDetails;
10
+ /**
11
+ * The metric label
12
+ */
13
+ readonly label?: string;
14
+ /**
15
+ * (Optional) A key prefix for the metric name to make it unique
16
+ * in alarms and graphs
17
+ */
18
+ readonly keyPrefix?: string;
19
+ /**
20
+ * The Region for the metrics
21
+ */
22
+ readonly region?: string;
23
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvcHJvcHMvQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJT3BlcmF0aW9uTWV0cmljRGV0YWlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL0lPcGVyYXRpb25NZXRyaWNEZXRhaWxzJztcblxuLyoqXG4gKiBDb21tb24gYXZhaWxhYmlsaXR5IGFuZCBsYXRlbmN5IG1ldHJpYyBwcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbWV0cmljIGRldGFpbHMgdG8gY3JlYXRlIG1ldHJpY3MgZnJvbVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljRGV0YWlsczogSU9wZXJhdGlvbk1ldHJpY0RldGFpbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgbGFiZWxcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIEEga2V5IHByZWZpeCBmb3IgdGhlIG1ldHJpYyBuYW1lIHRvIG1ha2UgaXQgdW5pcXVlXG4gICAqIGluIGFsYXJtcyBhbmQgZ3JhcGhzXG4gICAqL1xuICByZWFkb25seSBrZXlQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBSZWdpb24gZm9yIHRoZSBtZXRyaWNzXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { AvailabilityAndLatencyMetricProps } from './AvailabilityAndLatencyMetricProps';
2
+ import { AvailabilityMetricType } from '../../utilities/AvailabilityMetricType';
3
+ /**
4
+ * Metric properties for availability metrics
5
+ */
6
+ export interface AvailabilityMetricProps extends AvailabilityAndLatencyMetricProps {
7
+ /**
8
+ * The type of availability metric
9
+ */
10
+ readonly metricType: AvailabilityMetricType;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9wcm9wcy9BdmFpbGFiaWxpdHlNZXRyaWNQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgQXZhaWxhYmlsaXR5QW5kTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljUHJvcHMnO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5TWV0cmljVHlwZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9BdmFpbGFiaWxpdHlNZXRyaWNUeXBlJztcblxuLyoqXG4gKiBNZXRyaWMgcHJvcGVydGllcyBmb3IgYXZhaWxhYmlsaXR5IG1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wc1xuICBleHRlbmRzIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhdmFpbGFiaWxpdHkgbWV0cmljXG4gICAqL1xuICByZWFkb25seSBtZXRyaWNUeXBlOiBBdmFpbGFiaWxpdHlNZXRyaWNUeXBlO1xufVxuIl19
@@ -0,0 +1,15 @@
1
+ import { AvailabilityAndLatencyMetricProps } from './AvailabilityAndLatencyMetricProps';
2
+ import { LatencyMetricType } from '../../utilities/LatencyMetricType';
3
+ /**
4
+ * Metric properties for latency metrics
5
+ */
6
+ export interface LatencyMetricProps extends AvailabilityAndLatencyMetricProps {
7
+ /**
8
+ * The type of latency metric
9
+ */
10
+ readonly metricType: LatencyMetricType;
11
+ /**
12
+ * The latency statistic like p99, tm99, or TC(100:)
13
+ */
14
+ readonly statistic: string;
15
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGF0ZW5jeU1ldHJpY1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvcHJvcHMvTGF0ZW5jeU1ldHJpY1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBBdmFpbGFiaWxpdHlBbmRMYXRlbmN5TWV0cmljUHJvcHMgfSBmcm9tICcuL0F2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNQcm9wcyc7XG5pbXBvcnQgeyBMYXRlbmN5TWV0cmljVHlwZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9MYXRlbmN5TWV0cmljVHlwZSc7XG5cbi8qKlxuICogTWV0cmljIHByb3BlcnRpZXMgZm9yIGxhdGVuY3kgbWV0cmljc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdGVuY3lNZXRyaWNQcm9wcyBleHRlbmRzIEF2YWlsYWJpbGl0eUFuZExhdGVuY3lNZXRyaWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsYXRlbmN5IG1ldHJpY1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljVHlwZTogTGF0ZW5jeU1ldHJpY1R5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlbmN5IHN0YXRpc3RpYyBsaWtlIHA5OSwgdG05OSwgb3IgVEMoMTAwOilcbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpc3RpYzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ import { AvailabilityMetricProps } from './AvailabilityMetricProps';
2
+ /**
3
+ * Metric properties for regional availability metrics
4
+ */
5
+ export interface RegionalAvailabilityMetricProps extends AvailabilityMetricProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZXRyaWNzL3Byb3BzL1JlZ2lvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5cbi8qKlxuICogTWV0cmljIHByb3BlcnRpZXMgZm9yIHJlZ2lvbmFsIGF2YWlsYWJpbGl0eSBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wc1xuICBleHRlbmRzIEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIHt9XG4iXX0=
@@ -0,0 +1,6 @@
1
+ import { LatencyMetricProps } from './LatencyMetricProps';
2
+ /**
3
+ * Metric properties for regional latency metrics
4
+ */
5
+ export interface RegionalLatencyMetricProps extends LatencyMetricProps {
6
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uYWxMYXRlbmN5TWV0cmljUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9wcm9wcy9SZWdpb25hbExhdGVuY3lNZXRyaWNQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9MYXRlbmN5TWV0cmljUHJvcHMnO1xuXG4vKipcbiAqIE1ldHJpYyBwcm9wZXJ0aWVzIGZvciByZWdpb25hbCBsYXRlbmN5IG1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpb25hbExhdGVuY3lNZXRyaWNQcm9wcyBleHRlbmRzIExhdGVuY3lNZXRyaWNQcm9wcyB7fVxuIl19
@@ -0,0 +1,23 @@
1
+ import { Duration } from 'aws-cdk-lib';
2
+ import { AvailabilityMetricProps } from './AvailabilityMetricProps';
3
+ /**
4
+ * Availability metric properties for a service
5
+ */
6
+ export interface ServiceAvailabilityMetricProps {
7
+ /**
8
+ * The availability metric props for each operation in this service
9
+ */
10
+ readonly availabilityMetricProps: AvailabilityMetricProps[];
11
+ /**
12
+ * The metric label
13
+ */
14
+ readonly label: string;
15
+ /**
16
+ * The period for the availability metrics
17
+ */
18
+ readonly period: Duration;
19
+ /**
20
+ * (Optional) A key prefix for the metric id to make it unique in a graph or alarm
21
+ */
22
+ readonly keyPrefix?: string;
23
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvcHJvcHMvU2VydmljZUF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5cbi8qKlxuICogQXZhaWxhYmlsaXR5IG1ldHJpYyBwcm9wZXJ0aWVzIGZvciBhIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMge1xuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSBtZXRyaWMgcHJvcHMgZm9yIGVhY2ggb3BlcmF0aW9uIGluIHRoaXMgc2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5TWV0cmljUHJvcHM6IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzW107XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgbGFiZWxcbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJpb2QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgcGVyaW9kOiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBBIGtleSBwcmVmaXggZm9yIHRoZSBtZXRyaWMgaWQgdG8gbWFrZSBpdCB1bmlxdWUgaW4gYSBncmFwaCBvciBhbGFybVxuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4Pzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { Duration } from 'aws-cdk-lib';
2
+ import { LatencyMetricProps } from './LatencyMetricProps';
3
+ /**
4
+ * Latency metric properties for a service
5
+ */
6
+ export interface ServiceLatencyMetricProps {
7
+ /**
8
+ * The latency metric props for each operation in this service
9
+ */
10
+ readonly latencyMetricProps: LatencyMetricProps[];
11
+ /**
12
+ * The metric label
13
+ */
14
+ readonly label: string;
15
+ /**
16
+ * The period for the availability metrics
17
+ */
18
+ readonly period: Duration;
19
+ /**
20
+ * (Optional) A key prefix for the metric id to make it unique in a graph or alarm
21
+ */
22
+ readonly keyPrefix?: string;
23
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUxhdGVuY3lNZXJpY1Byb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21ldHJpY3MvcHJvcHMvU2VydmljZUxhdGVuY3lNZXJpY1Byb3BzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IExhdGVuY3lNZXRyaWNQcm9wcyB9IGZyb20gJy4vTGF0ZW5jeU1ldHJpY1Byb3BzJztcblxuLyoqXG4gKiBMYXRlbmN5IG1ldHJpYyBwcm9wZXJ0aWVzIGZvciBhIHNlcnZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlTGF0ZW5jeU1ldHJpY1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsYXRlbmN5IG1ldHJpYyBwcm9wcyBmb3IgZWFjaCBvcGVyYXRpb24gaW4gdGhpcyBzZXJ2aWNlXG4gICAqL1xuICByZWFkb25seSBsYXRlbmN5TWV0cmljUHJvcHM6IExhdGVuY3lNZXRyaWNQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0cmljIGxhYmVsXG4gICAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyaW9kIGZvciB0aGUgYXZhaWxhYmlsaXR5IG1ldHJpY3NcbiAgICovXG4gIHJlYWRvbmx5IHBlcmlvZDogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgQSBrZXkgcHJlZml4IGZvciB0aGUgbWV0cmljIGlkIHRvIG1ha2UgaXQgdW5pcXVlIGluIGEgZ3JhcGggb3IgYWxhcm1cbiAgICovXG4gIHJlYWRvbmx5IGtleVByZWZpeD86IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { AvailabilityMetricProps } from './AvailabilityMetricProps';
2
+ /**
3
+ * The Availability Zone availability metric properties
4
+ */
5
+ export interface ZonalAvailabilityMetricProps extends AvailabilityMetricProps {
6
+ /**
7
+ * The Availability Zone Id for the metrics
8
+ */
9
+ readonly availabilityZoneId: string;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm9uYWxBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZXRyaWNzL3Byb3BzL1pvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IEF2YWlsYWJpbGl0eU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9BdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyc7XG5cbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIGF2YWlsYWJpbGl0eSBtZXRyaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFpvbmFsQXZhaWxhYmlsaXR5TWV0cmljUHJvcHMgZXh0ZW5kcyBBdmFpbGFiaWxpdHlNZXRyaWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgSWQgZm9yIHRoZSBtZXRyaWNzXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lSWQ6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { LatencyMetricProps } from './LatencyMetricProps';
2
+ /**
3
+ * The latency metric properties for an Availability Zone
4
+ */
5
+ export interface ZonalLatencyMetricProps extends LatencyMetricProps {
6
+ /**
7
+ * The Availability Zone Id for the metrics
8
+ */
9
+ readonly availabilityZoneId: string;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWm9uYWxMYXRlbmN5TWV0cmljUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWV0cmljcy9wcm9wcy9ab25hbExhdGVuY3lNZXRyaWNQcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuaW1wb3J0IHsgTGF0ZW5jeU1ldHJpY1Byb3BzIH0gZnJvbSAnLi9MYXRlbmN5TWV0cmljUHJvcHMnO1xuXG4vKipcbiAqIFRoZSBsYXRlbmN5IG1ldHJpYyBwcm9wZXJ0aWVzIGZvciBhbiBBdmFpbGFiaWxpdHkgWm9uZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFpvbmFsTGF0ZW5jeU1ldHJpY1Byb3BzIGV4dGVuZHMgTGF0ZW5jeU1ldHJpY1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSBJZCBmb3IgdGhlIG1ldHJpY3NcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmVJZDogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
2
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
3
+ export interface IOutlierDetectionFunction {
4
+ /**
5
+ * The outlier detection function
6
+ */
7
+ function: IFunction;
8
+ /**
9
+ * The log group where the function logs will be sent
10
+ */
11
+ logGroup: ILogGroup;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSU91dGxpZXJEZXRlY3Rpb25GdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vdXRsaWVyLWRldGVjdGlvbi9JT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElMb2dHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcblxuZXhwb3J0IGludGVyZmFjZSBJT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBvdXRsaWVyIGRldGVjdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgZnVuY3Rpb246IElGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxvZyBncm91cCB3aGVyZSB0aGUgZnVuY3Rpb24gbG9ncyB3aWxsIGJlIHNlbnRcbiAgICovXG4gIGxvZ0dyb3VwOiBJTG9nR3JvdXA7XG59XG4iXX0=
@@ -0,0 +1,16 @@
1
+ import { IFunction } from 'aws-cdk-lib/aws-lambda';
2
+ import { ILogGroup } from 'aws-cdk-lib/aws-logs';
3
+ import { Construct } from 'constructs';
4
+ import { IOutlierDetectionFunction } from './IOutlierDetectionFunction';
5
+ import { OutlierDetectionFunctionProps } from './props/OutlierDetectionFunctionProps';
6
+ export declare class OutlierDetectionFunction extends Construct implements IOutlierDetectionFunction {
7
+ /**
8
+ * The z-score function
9
+ */
10
+ function: IFunction;
11
+ /**
12
+ * The log group where the canarty logs will be sent
13
+ */
14
+ logGroup: ILogGroup;
15
+ constructor(scope: Construct, id: string, props: OutlierDetectionFunctionProps);
16
+ }
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutlierDetectionFunction = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const path = require("path");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
9
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
10
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
11
+ const aws_logs_1 = require("aws-cdk-lib/aws-logs");
12
+ const constructs_1 = require("constructs");
13
+ class OutlierDetectionFunction extends constructs_1.Construct {
14
+ constructor(scope, id, props) {
15
+ super(scope, id);
16
+ let xrayManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'xrayManagedPolicy', {
17
+ path: '/outlier-detection/',
18
+ statements: [
19
+ new aws_iam_1.PolicyStatement({
20
+ actions: [
21
+ 'xray:PutTraceSegments',
22
+ 'xray:PutTelemetryRecords',
23
+ 'xray:GetSamplingRules',
24
+ 'xray:GetSamplingTargets',
25
+ 'xray:GetSamplingStatisticSummaries',
26
+ ],
27
+ effect: aws_iam_1.Effect.ALLOW,
28
+ resources: ['*'],
29
+ }),
30
+ ],
31
+ });
32
+ let cwManagedPolicy = new aws_iam_1.ManagedPolicy(this, 'CWManagedPolicy', {
33
+ path: '/outlier-detection/',
34
+ statements: [
35
+ new aws_iam_1.PolicyStatement({
36
+ actions: ['cloudwatch:GetMetricData', 'cloduwatch:PutMetricData'],
37
+ effect: aws_iam_1.Effect.ALLOW,
38
+ resources: ['*'],
39
+ }),
40
+ ],
41
+ });
42
+ let executionRole = new aws_iam_1.Role(this, 'executionRole', {
43
+ assumedBy: new aws_iam_1.ServicePrincipal('lambda.amazonaws.com'),
44
+ path: '/outlier-detection/',
45
+ managedPolicies: [xrayManagedPolicy, cwManagedPolicy],
46
+ });
47
+ let sciPyLayer = new aws_lambda_1.LayerVersion(this, 'SciPyLayer', {
48
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, 'src/scipy-layer.zip')),
49
+ compatibleArchitectures: [aws_lambda_1.Architecture.ARM_64],
50
+ compatibleRuntimes: [aws_lambda_1.Runtime.PYTHON_3_12],
51
+ });
52
+ let monitoringLayer = new aws_lambda_1.LayerVersion(this, 'MonitoringLayer', {
53
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, '../monitoring/src/monitoring-layer.zip')),
54
+ compatibleArchitectures: [aws_lambda_1.Architecture.ARM_64],
55
+ compatibleRuntimes: [aws_lambda_1.Runtime.PYTHON_3_12],
56
+ });
57
+ if (props.vpc !== undefined && props.vpc != null) {
58
+ let sg = new aws_ec2_1.SecurityGroup(this, 'OutlierDetectionSecurityGroup', {
59
+ description: 'Allow outlier detection function to communicate with CW',
60
+ vpc: props.vpc,
61
+ allowAllOutbound: true,
62
+ });
63
+ this.function = new aws_lambda_1.Function(this, 'OutlierDetection', {
64
+ runtime: aws_lambda_1.Runtime.PYTHON_3_12,
65
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, 'src/outlier-detection.zip')),
66
+ handler: 'index.handler',
67
+ role: executionRole,
68
+ architecture: aws_lambda_1.Architecture.ARM_64,
69
+ tracing: aws_lambda_1.Tracing.ACTIVE,
70
+ timeout: aws_cdk_lib_1.Duration.seconds(5),
71
+ memorySize: 512,
72
+ layers: [sciPyLayer, monitoringLayer],
73
+ environment: {
74
+ REGION: aws_cdk_lib_1.Fn.ref('AWS::Region'),
75
+ PARTITION: aws_cdk_lib_1.Fn.ref('AWS::Partition'),
76
+ },
77
+ vpc: props.vpc,
78
+ securityGroups: [sg],
79
+ vpcSubnets: props.subnetSelection,
80
+ });
81
+ }
82
+ else {
83
+ this.function = new aws_lambda_1.Function(this, 'OutlierDetection', {
84
+ runtime: aws_lambda_1.Runtime.PYTHON_3_12,
85
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, 'src/outlier-detection.zip')),
86
+ handler: 'index.handler',
87
+ role: executionRole,
88
+ architecture: aws_lambda_1.Architecture.ARM_64,
89
+ tracing: aws_lambda_1.Tracing.ACTIVE,
90
+ timeout: aws_cdk_lib_1.Duration.seconds(5),
91
+ memorySize: 512,
92
+ layers: [sciPyLayer, monitoringLayer],
93
+ environment: {
94
+ REGION: aws_cdk_lib_1.Fn.ref('AWS::Region'),
95
+ PARTITION: aws_cdk_lib_1.Fn.ref('AWS::Partition'),
96
+ },
97
+ });
98
+ }
99
+ aws_cdk_lib_1.Tags.of(this.function).add('cloudwatch:datasource', 'custom', {
100
+ includeResourceTypes: ['AWS::Lambda::Function'],
101
+ });
102
+ this.function.addPermission('invokePermission', {
103
+ action: 'lambda:InvokeFunction',
104
+ principal: new aws_iam_1.ServicePrincipal('lambda.datasource.cloudwatch.amazonaws.com'),
105
+ sourceAccount: aws_cdk_lib_1.Fn.ref('AWS::AccountId'),
106
+ });
107
+ this.logGroup = new aws_logs_1.LogGroup(this, 'logGroup', {
108
+ logGroupName: `/aws/lambda/${this.function.functionName}`,
109
+ retention: aws_logs_1.RetentionDays.ONE_WEEK,
110
+ removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY,
111
+ });
112
+ new aws_iam_1.ManagedPolicy(this, 'cwLogsManagedPolicy', {
113
+ path: '/outlier-detection/',
114
+ statements: [
115
+ new aws_iam_1.PolicyStatement({
116
+ actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
117
+ effect: aws_iam_1.Effect.ALLOW,
118
+ resources: [this.logGroup.logGroupArn],
119
+ }),
120
+ ],
121
+ roles: [executionRole],
122
+ });
123
+ }
124
+ }
125
+ exports.OutlierDetectionFunction = OutlierDetectionFunction;
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL291dGxpZXItZGV0ZWN0aW9uL091dGxpZXJEZXRlY3Rpb25GdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBQ3RDLDZCQUE2QjtBQUM3Qiw2Q0FBZ0U7QUFDaEUsaURBQW9FO0FBQ3BFLGlEQVE2QjtBQUM3Qix1REFTZ0M7QUFDaEMsbURBQTBFO0FBQzFFLDJDQUF1QztBQUl2QyxNQUFhLHdCQUNYLFNBQVEsc0JBQVM7SUFZakIsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBb0M7UUFFcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGlCQUFpQixHQUFtQixJQUFJLHVCQUFhLENBQ3ZELElBQUksRUFDSixtQkFBbUIsRUFDbkI7WUFDRSxJQUFJLEVBQUUscUJBQXFCO1lBQzNCLFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2Qix5QkFBeUI7d0JBQ3pCLG9DQUFvQztxQkFDckM7b0JBQ0QsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztvQkFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNqQixDQUFDO2FBQ0g7U0FDRixDQUNGLENBQUM7UUFDRixJQUFJLGVBQWUsR0FBRyxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQy9ELElBQUksRUFBRSxxQkFBcUI7WUFDM0IsVUFBVSxFQUFFO2dCQUNWLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsMEJBQTBCLENBQUM7b0JBQ2pFLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7b0JB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SSxFQUFFLHFCQUFxQixFQUFFO1lBQzdDLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsVUFBVSxFQUFFO2dCQUNWLElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3RELE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7b0JBQ3BCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2lCQUN2QyxDQUFDO2FBQ0g7WUFDRCxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBekpELDREQXlKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlbW92YWxQb2xpY3ksIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHtcbiAgRWZmZWN0LFxuICBJTWFuYWdlZFBvbGljeSxcbiAgSVJvbGUsXG4gIE1hbmFnZWRQb2xpY3ksXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbCxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQge1xuICBBcmNoaXRlY3R1cmUsXG4gIENvZGUsXG4gIEZ1bmN0aW9uLFxuICBJRnVuY3Rpb24sXG4gIElMYXllclZlcnNpb24sXG4gIExheWVyVmVyc2lvbixcbiAgUnVudGltZSxcbiAgVHJhY2luZyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJTG9nR3JvdXAsIExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uIH0gZnJvbSAnLi9JT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uJztcbmltcG9ydCB7IE91dGxpZXJEZXRlY3Rpb25GdW5jdGlvblByb3BzIH0gZnJvbSAnLi9wcm9wcy9PdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb25Qcm9wcyc7XG5cbmV4cG9ydCBjbGFzcyBPdXRsaWVyRGV0ZWN0aW9uRnVuY3Rpb25cbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB6LXNjb3JlIGZ1bmN0aW9uXG4gICAqL1xuICBmdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHdoZXJlIHRoZSBjYW5hcnR5IGxvZ3Mgd2lsbCBiZSBzZW50XG4gICAqL1xuICBsb2dHcm91cDogSUxvZ0dyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBsZXQgeHJheU1hbmFnZWRQb2xpY3k6IElNYW5hZ2VkUG9saWN5ID0gbmV3IE1hbmFnZWRQb2xpY3koXG4gICAgICB0aGlzLFxuICAgICAgJ3hyYXlNYW5hZ2VkUG9saWN5JyxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy9vdXRsaWVyLWRldGVjdGlvbi8nLFxuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICd4cmF5OlB1dFRyYWNlU2VnbWVudHMnLFxuICAgICAgICAgICAgICAneHJheTpQdXRUZWxlbWV0cnlSZWNvcmRzJyxcbiAgICAgICAgICAgICAgJ3hyYXk6R2V0U2FtcGxpbmdSdWxlcycsXG4gICAgICAgICAgICAgICd4cmF5OkdldFNhbXBsaW5nVGFyZ2V0cycsXG4gICAgICAgICAgICAgICd4cmF5OkdldFNhbXBsaW5nU3RhdGlzdGljU3VtbWFyaWVzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICk7XG4gICAgbGV0IGN3TWFuYWdlZFBvbGljeSA9IG5ldyBNYW5hZ2VkUG9saWN5KHRoaXMsICdDV01hbmFnZWRQb2xpY3knLCB7XG4gICAgICBwYXRoOiAnL291dGxpZXItZGV0ZWN0aW9uLycsXG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnY2xvdWR3YXRjaDpHZXRNZXRyaWNEYXRhJywgJ2Nsb2R1d2F0Y2g6UHV0TWV0cmljRGF0YSddLFxuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGxldCBleGVjdXRpb25Sb2xlOiBJUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdleGVjdXRpb25Sb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIHBhdGg6ICcvb3V0bGllci1kZXRlY3Rpb24vJyxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW3hyYXlNYW5hZ2VkUG9saWN5LCBjd01hbmFnZWRQb2xpY3ldLFxuICAgIH0pO1xuXG4gICAgbGV0IHNjaVB5TGF5ZXI6IElMYXllclZlcnNpb24gPSBuZXcgTGF5ZXJWZXJzaW9uKHRoaXMsICdTY2lQeUxheWVyJywge1xuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ3NyYy9zY2lweS1sYXllci56aXAnKSksXG4gICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW0FyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgfSk7XG5cbiAgICBsZXQgbW9uaXRvcmluZ0xheWVyOiBJTGF5ZXJWZXJzaW9uID0gbmV3IExheWVyVmVyc2lvbihcbiAgICAgIHRoaXMsXG4gICAgICAnTW9uaXRvcmluZ0xheWVyJyxcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL21vbml0b3Jpbmcvc3JjL21vbml0b3JpbmctbGF5ZXIuemlwJyksXG4gICAgICAgICksXG4gICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW1J1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKHByb3BzLnZwYyAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnZwYyAhPSBudWxsKSB7XG4gICAgICBsZXQgc2c6IElTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAoXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdPdXRsaWVyRGV0ZWN0aW9uU2VjdXJpdHlHcm91cCcsXG4gICAgICAgIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdBbGxvdyBvdXRsaWVyIGRldGVjdGlvbiBmdW5jdGlvbiB0byBjb21tdW5pY2F0ZSB3aXRoIENXJyxcbiAgICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnT3V0bGllckRldGVjdGlvbicsIHtcbiAgICAgICAgcnVudGltZTogUnVudGltZS5QWVRIT05fM18xMixcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ3NyYy9vdXRsaWVyLWRldGVjdGlvbi56aXAnKSksXG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgcm9sZTogZXhlY3V0aW9uUm9sZSxcbiAgICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICB0cmFjaW5nOiBUcmFjaW5nLkFDVElWRSxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg1KSxcbiAgICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgICBsYXllcnM6IFtzY2lQeUxheWVyLCBtb25pdG9yaW5nTGF5ZXJdLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIFJFR0lPTjogRm4ucmVmKCdBV1M6OlJlZ2lvbicpLFxuICAgICAgICAgIFBBUlRJVElPTjogRm4ucmVmKCdBV1M6OlBhcnRpdGlvbicpLFxuICAgICAgICB9LFxuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtzZ10sXG4gICAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLnN1Ym5ldFNlbGVjdGlvbixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdPdXRsaWVyRGV0ZWN0aW9uJywge1xuICAgICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnc3JjL291dGxpZXItZGV0ZWN0aW9uLnppcCcpKSxcbiAgICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgICByb2xlOiBleGVjdXRpb25Sb2xlLFxuICAgICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgIHRyYWNpbmc6IFRyYWNpbmcuQUNUSVZFLFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIGxheWVyczogW3NjaVB5TGF5ZXIsIG1vbml0b3JpbmdMYXllcl0sXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgUkVHSU9OOiBGbi5yZWYoJ0FXUzo6UmVnaW9uJyksXG4gICAgICAgICAgUEFSVElUSU9OOiBGbi5yZWYoJ0FXUzo6UGFydGl0aW9uJyksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBUYWdzLm9mKHRoaXMuZnVuY3Rpb24pLmFkZCgnY2xvdWR3YXRjaDpkYXRhc291cmNlJywgJ2N1c3RvbScsIHtcbiAgICAgIGluY2x1ZGVSZXNvdXJjZVR5cGVzOiBbJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbiddLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdpbnZva2VQZXJtaXNzaW9uJywge1xuICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uJyxcbiAgICAgIHByaW5jaXBhbDogbmV3IFNlcnZpY2VQcmluY2lwYWwoXG4gICAgICAgICdsYW1iZGEuZGF0YXNvdXJjZS5jbG91ZHdhdGNoLmFtYXpvbmF3cy5jb20nLFxuICAgICAgKSxcbiAgICAgIHNvdXJjZUFjY291bnQ6IEZuLnJlZignQVdTOjpBY2NvdW50SWQnKSxcbiAgICB9KTtcblxuICAgIHRoaXMubG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgJ2xvZ0dyb3VwJywge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHt0aGlzLmZ1bmN0aW9uLmZ1bmN0aW9uTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgbmV3IE1hbmFnZWRQb2xpY3kodGhpcywgJ2N3TG9nc01hbmFnZWRQb2xpY3knLCB7XG4gICAgICBwYXRoOiAnL291dGxpZXItZGV0ZWN0aW9uLycsXG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnbG9nczpDcmVhdGVMb2dTdHJlYW0nLCAnbG9nczpQdXRMb2dFdmVudHMnXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmxvZ0dyb3VwLmxvZ0dyb3VwQXJuXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgcm9sZXM6IFtleGVjdXRpb25Sb2xlXSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { IVpc, SubnetSelection } from 'aws-cdk-lib/aws-ec2';
2
+ export interface OutlierDetectionFunctionProps {
3
+ /**
4
+ * If you want the function to run in your VPC, provide
5
+ * the VPC object
6
+ */
7
+ readonly vpc?: IVpc;
8
+ /**
9
+ * The subnets to use in the VPC
10
+ */
11
+ readonly subnetSelection?: SubnetSelection;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uUHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3V0bGllci1kZXRlY3Rpb24vcHJvcHMvT3V0bGllckRldGVjdGlvbkZ1bmN0aW9uUHJvcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbmltcG9ydCB7IElWcGMsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuXG5leHBvcnQgaW50ZXJmYWNlIE91dGxpZXJEZXRlY3Rpb25GdW5jdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIElmIHlvdSB3YW50IHRoZSBmdW5jdGlvbiB0byBydW4gaW4geW91ciBWUEMsIHByb3ZpZGVcbiAgICogdGhlIFZQQyBvYmplY3RcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRzIHRvIHVzZSBpbiB0aGUgVlBDXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRTZWxlY3Rpb24/OiBTdWJuZXRTZWxlY3Rpb247XG59XG4iXX0=