From d273f84b7836e500e7e0ba7976ee1f5d5bfb8876 Mon Sep 17 00:00:00 2001 From: Matthew Serrano Date: Fri, 20 Oct 2023 10:31:30 -0400 Subject: [PATCH] feat(api-gateway): support monitoring slowest requests with trimmed mean (#444) Closes #443 --- _By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license_ --- API.md | 328 +++++++++++ lib/common/metric/MetricStatistic.ts | 18 + .../monitoring/alarms/LatencyAlarmFactory.ts | 16 + .../aws-apigateway/ApiGatewayMonitoring.ts | 8 + .../ApiGatewayV2HttpApiMonitoring.ts | 34 ++ .../ApiGatewayMonitoring.test.ts | 52 +- .../ApiGatewayMonitoring.test.ts.snap | 424 +++++++++++++- .../ApiGatewayV2HttpApiMonitoring.test.ts | 50 +- ...ApiGatewayV2HttpApiMonitoring.test.ts.snap | 520 +++++++++++++++++- 9 files changed, 1407 insertions(+), 43 deletions(-) diff --git a/API.md b/API.md index 4013f88b..7d59947e 100644 --- a/API.md +++ b/API.md @@ -4477,9 +4477,13 @@ const apiGatewayMonitoringOptions: ApiGatewayMonitoringOptions = { ... } | addLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLowTpsAlarm | {[ key: string ]: LowTpsThreshold} | *No description.* | | latencyTypesToRender | LatencyType[] | You can specify what latency types you want to be rendered in the dashboards. | @@ -4763,6 +4767,16 @@ public readonly addLatencyTM95Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM9999Alarm`Optional ```typescript @@ -4773,6 +4787,16 @@ public readonly addLatencyTM9999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM999Alarm`Optional ```typescript @@ -4783,6 +4807,16 @@ public readonly addLatencyTM999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM99Alarm`Optional ```typescript @@ -4793,6 +4827,16 @@ public readonly addLatencyTM99Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLowTpsAlarm`Optional ```typescript @@ -4867,9 +4911,13 @@ const apiGatewayMonitoringProps: ApiGatewayMonitoringProps = { ... } | addLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLowTpsAlarm | {[ key: string ]: LowTpsThreshold} | *No description.* | | latencyTypesToRender | LatencyType[] | You can specify what latency types you want to be rendered in the dashboards. | @@ -5222,6 +5270,16 @@ public readonly addLatencyTM95Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM9999Alarm`Optional ```typescript @@ -5232,6 +5290,16 @@ public readonly addLatencyTM9999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM999Alarm`Optional ```typescript @@ -5242,6 +5310,16 @@ public readonly addLatencyTM999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM99Alarm`Optional ```typescript @@ -5252,6 +5330,16 @@ public readonly addLatencyTM99Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLowTpsAlarm`Optional ```typescript @@ -5416,9 +5504,13 @@ const apiGatewayV2HttpApiMonitoringProps: ApiGatewayV2HttpApiMonitoringProps = { | addIntegrationLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyAverageAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyP100Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyP50Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | @@ -5432,9 +5524,13 @@ const apiGatewayV2HttpApiMonitoringProps: ApiGatewayV2HttpApiMonitoringProps = { | addLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLowTpsAlarm | {[ key: string ]: LowTpsThreshold} | *No description.* | | latencyTypesToRender | LatencyType[] | You can specify what latency types you want to be rendered in the dashboards. | @@ -5785,6 +5881,16 @@ public readonly addIntegrationLatencyTM95Alarm: {[ key: string ]: LatencyThresho --- +##### `addIntegrationLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM9999Alarm`Optional ```typescript @@ -5795,6 +5901,16 @@ public readonly addIntegrationLatencyTM9999Alarm: {[ key: string ]: LatencyThres --- +##### `addIntegrationLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM999Alarm`Optional ```typescript @@ -5805,6 +5921,16 @@ public readonly addIntegrationLatencyTM999Alarm: {[ key: string ]: LatencyThresh --- +##### `addIntegrationLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM99Alarm`Optional ```typescript @@ -5815,6 +5941,16 @@ public readonly addIntegrationLatencyTM99Alarm: {[ key: string ]: LatencyThresho --- +##### `addIntegrationLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyAverageAlarm`Optional ```typescript @@ -5945,6 +6081,16 @@ public readonly addLatencyTM95Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM9999Alarm`Optional ```typescript @@ -5955,6 +6101,16 @@ public readonly addLatencyTM9999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM999Alarm`Optional ```typescript @@ -5965,6 +6121,16 @@ public readonly addLatencyTM999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM99Alarm`Optional ```typescript @@ -5975,6 +6141,16 @@ public readonly addLatencyTM99Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLowTpsAlarm`Optional ```typescript @@ -6043,9 +6219,13 @@ const apiGatewayV2MonitoringOptions: ApiGatewayV2MonitoringOptions = { ... } | addIntegrationLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addIntegrationLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addIntegrationLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyAverageAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyP100Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyP50Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | @@ -6059,9 +6239,13 @@ const apiGatewayV2MonitoringOptions: ApiGatewayV2MonitoringOptions = { ... } | addLatencyTM70Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM90Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM95Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM95OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM9999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM9999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM999Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM999OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLatencyTM99Alarm | {[ key: string ]: LatencyThreshold} | *No description.* | +| addLatencyTM99OutlierAlarm | {[ key: string ]: LatencyThreshold} | *No description.* | | addLowTpsAlarm | {[ key: string ]: LowTpsThreshold} | *No description.* | | latencyTypesToRender | LatencyType[] | You can specify what latency types you want to be rendered in the dashboards. | @@ -6345,6 +6529,16 @@ public readonly addIntegrationLatencyTM95Alarm: {[ key: string ]: LatencyThresho --- +##### `addIntegrationLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM9999Alarm`Optional ```typescript @@ -6355,6 +6549,16 @@ public readonly addIntegrationLatencyTM9999Alarm: {[ key: string ]: LatencyThres --- +##### `addIntegrationLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM999Alarm`Optional ```typescript @@ -6365,6 +6569,16 @@ public readonly addIntegrationLatencyTM999Alarm: {[ key: string ]: LatencyThresh --- +##### `addIntegrationLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addIntegrationLatencyTM99Alarm`Optional ```typescript @@ -6375,6 +6589,16 @@ public readonly addIntegrationLatencyTM99Alarm: {[ key: string ]: LatencyThresho --- +##### `addIntegrationLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addIntegrationLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyAverageAlarm`Optional ```typescript @@ -6505,6 +6729,16 @@ public readonly addLatencyTM95Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM95OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM95OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM9999Alarm`Optional ```typescript @@ -6515,6 +6749,16 @@ public readonly addLatencyTM9999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM9999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM9999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM999Alarm`Optional ```typescript @@ -6525,6 +6769,16 @@ public readonly addLatencyTM999Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM999OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM999OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLatencyTM99Alarm`Optional ```typescript @@ -6535,6 +6789,16 @@ public readonly addLatencyTM99Alarm: {[ key: string ]: LatencyThreshold}; --- +##### `addLatencyTM99OutlierAlarm`Optional + +```typescript +public readonly addLatencyTM99OutlierAlarm: {[ key: string ]: LatencyThreshold}; +``` + +- *Type:* {[ key: string ]: LatencyThreshold} + +--- + ##### `addLowTpsAlarm`Optional ```typescript @@ -68162,6 +68426,10 @@ Create a two sets of dashboards: standard set (interactive) and a copy (bitmap). | TM99 | *No description.* | | TM999 | *No description.* | | TM9999 | *No description.* | +| TM95_TOP | *No description.* | +| TM99_TOP | *No description.* | +| TM999_TOP | *No description.* | +| TM9999_TOP | *No description.* | | AVERAGE | *No description.* | --- @@ -68241,6 +68509,26 @@ Create a two sets of dashboards: standard set (interactive) and a copy (bitmap). --- +##### `TM95_TOP` + +--- + + +##### `TM99_TOP` + +--- + + +##### `TM999_TOP` + +--- + + +##### `TM9999_TOP` + +--- + + ##### `AVERAGE` --- @@ -68307,6 +68595,10 @@ Metric aggregation statistic to be used with the IMetric objects. | TM80_BOTH | trimmed mean; | | TM75_BOTH | trimmed mean; | | TM70_BOTH | trimmed mean; | +| TM95_TOP | trimmed mean; | +| TM99_TOP | trimmed mean; | +| TM999_TOP | trimmed mean; | +| TM9999_TOP | trimmed mean; | | WM50 | winsorized mean; | | WM70 | winsorized mean; | | WM90 | winsorized mean; | @@ -68511,6 +68803,42 @@ calculates the average after removing the 30% lowest data points and the 30% hig --- +##### `TM95_TOP` + +trimmed mean; + +calculates the average after removing the 95% lowest data points + +--- + + +##### `TM99_TOP` + +trimmed mean; + +calculates the average after removing the 99% lowest data points + +--- + + +##### `TM999_TOP` + +trimmed mean; + +calculates the average after removing the 99.9% lowest data points + +--- + + +##### `TM9999_TOP` + +trimmed mean; + +calculates the average after removing the 99.99% lowest data points + +--- + + ##### `WM50` winsorized mean; diff --git a/lib/common/metric/MetricStatistic.ts b/lib/common/metric/MetricStatistic.ts index a6d7561a..6c30e048 100644 --- a/lib/common/metric/MetricStatistic.ts +++ b/lib/common/metric/MetricStatistic.ts @@ -65,6 +65,7 @@ export enum MetricStatistic { * trimmed mean; calculates the average after removing the 0.01% of data points with the highest values */ TM9999 = "tm99.99", + /** * trimmed mean; calculates the average after removing the 1% lowest data points and the 1% highest data points */ @@ -94,6 +95,23 @@ export enum MetricStatistic { */ TM70_BOTH = "TM(30%:70%)", + /** + * trimmed mean; calculates the average after removing the 95% lowest data points + */ + TM95_TOP = "TM(95%:100%)", + /** + * trimmed mean; calculates the average after removing the 99% lowest data points + */ + TM99_TOP = "TM(99%:100%)", + /** + * trimmed mean; calculates the average after removing the 99.9% lowest data points + */ + TM999_TOP = "TM(99.9%:100%)", + /** + * trimmed mean; calculates the average after removing the 99.99% lowest data points + */ + TM9999_TOP = "TM(99.99%:100%)", + /** * winsorized mean; calculates the average while treating the 50% of the highest values to be equal to the value at the 50th percentile */ diff --git a/lib/common/monitoring/alarms/LatencyAlarmFactory.ts b/lib/common/monitoring/alarms/LatencyAlarmFactory.ts index 6849a802..9d18c751 100644 --- a/lib/common/monitoring/alarms/LatencyAlarmFactory.ts +++ b/lib/common/monitoring/alarms/LatencyAlarmFactory.ts @@ -23,6 +23,10 @@ export enum LatencyType { TM99 = "TM99", TM999 = "TM999", TM9999 = "TM9999", + TM95_TOP = "TM(95%:100%)", + TM99_TOP = "TM(99%:100%)", + TM999_TOP = "TM(99.9%:100%)", + TM9999_TOP = "TM(99.99%:100%)", AVERAGE = "Average", } @@ -58,6 +62,14 @@ export function getLatencyTypeStatistic(latencyType: LatencyType) { return MetricStatistic.TM999; case LatencyType.TM9999: return MetricStatistic.TM9999; + case LatencyType.TM95_TOP: + return MetricStatistic.TM95_TOP; + case LatencyType.TM99_TOP: + return MetricStatistic.TM99_TOP; + case LatencyType.TM999_TOP: + return MetricStatistic.TM999_TOP; + case LatencyType.TM9999_TOP: + return MetricStatistic.TM9999_TOP; case LatencyType.AVERAGE: return MetricStatistic.AVERAGE; default: @@ -98,6 +110,10 @@ export function getLatencyTypeLabel(latencyType: LatencyType) { return latencyType.replace("999", "99.9") + averageSuffix; case LatencyType.P9999: case LatencyType.TM9999: + case LatencyType.TM95_TOP: + case LatencyType.TM99_TOP: + case LatencyType.TM999_TOP: + case LatencyType.TM9999_TOP: // we need proper decimal here return latencyType.replace("9999", "99.99") + averageSuffix; case LatencyType.AVERAGE: diff --git a/lib/monitoring/aws-apigateway/ApiGatewayMonitoring.ts b/lib/monitoring/aws-apigateway/ApiGatewayMonitoring.ts index ff1ad9e6..66d8e1da 100644 --- a/lib/monitoring/aws-apigateway/ApiGatewayMonitoring.ts +++ b/lib/monitoring/aws-apigateway/ApiGatewayMonitoring.ts @@ -64,6 +64,10 @@ export interface ApiGatewayMonitoringOptions extends BaseMonitoringProps { readonly addLatencyTM99Alarm?: Record; readonly addLatencyTM999Alarm?: Record; readonly addLatencyTM9999Alarm?: Record; + readonly addLatencyTM95OutlierAlarm?: Record; + readonly addLatencyTM99OutlierAlarm?: Record; + readonly addLatencyTM999OutlierAlarm?: Record; + readonly addLatencyTM9999OutlierAlarm?: Record; readonly addLatencyAverageAlarm?: Record; readonly addLowTpsAlarm?: Record; @@ -175,6 +179,10 @@ export class ApiGatewayMonitoring extends Monitoring { [LatencyType.TM99]: props.addLatencyTM99Alarm, [LatencyType.TM999]: props.addLatencyTM999Alarm, [LatencyType.TM9999]: props.addLatencyTM9999Alarm, + [LatencyType.TM95_TOP]: props.addLatencyTM95OutlierAlarm, + [LatencyType.TM99_TOP]: props.addLatencyTM99OutlierAlarm, + [LatencyType.TM999_TOP]: props.addLatencyTM999OutlierAlarm, + [LatencyType.TM9999_TOP]: props.addLatencyTM999OutlierAlarm, [LatencyType.AVERAGE]: props.addLatencyAverageAlarm, }; diff --git a/lib/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.ts b/lib/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.ts index b6c431f6..cf7fe1df 100644 --- a/lib/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.ts +++ b/lib/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.ts @@ -58,6 +58,7 @@ export interface ApiGatewayV2MonitoringOptions extends BaseMonitoringProps { readonly addLatencyP999Alarm?: Record; readonly addLatencyP9999Alarm?: Record; readonly addLatencyP100Alarm?: Record; + readonly addLatencyTM50Alarm?: Record; readonly addLatencyTM70Alarm?: Record; readonly addLatencyTM90Alarm?: Record; @@ -65,6 +66,12 @@ export interface ApiGatewayV2MonitoringOptions extends BaseMonitoringProps { readonly addLatencyTM99Alarm?: Record; readonly addLatencyTM999Alarm?: Record; readonly addLatencyTM9999Alarm?: Record; + + readonly addLatencyTM95OutlierAlarm?: Record; + readonly addLatencyTM99OutlierAlarm?: Record; + readonly addLatencyTM999OutlierAlarm?: Record; + readonly addLatencyTM9999OutlierAlarm?: Record; + readonly addLatencyAverageAlarm?: Record; readonly addIntegrationLatencyP50Alarm?: Record; @@ -75,6 +82,7 @@ export interface ApiGatewayV2MonitoringOptions extends BaseMonitoringProps { readonly addIntegrationLatencyP999Alarm?: Record; readonly addIntegrationLatencyP9999Alarm?: Record; readonly addIntegrationLatencyP100Alarm?: Record; + readonly addIntegrationLatencyTM50Alarm?: Record; readonly addIntegrationLatencyTM70Alarm?: Record; readonly addIntegrationLatencyTM90Alarm?: Record; @@ -82,6 +90,24 @@ export interface ApiGatewayV2MonitoringOptions extends BaseMonitoringProps { readonly addIntegrationLatencyTM99Alarm?: Record; readonly addIntegrationLatencyTM999Alarm?: Record; readonly addIntegrationLatencyTM9999Alarm?: Record; + + readonly addIntegrationLatencyTM95OutlierAlarm?: Record< + string, + LatencyThreshold + >; + readonly addIntegrationLatencyTM99OutlierAlarm?: Record< + string, + LatencyThreshold + >; + readonly addIntegrationLatencyTM999OutlierAlarm?: Record< + string, + LatencyThreshold + >; + readonly addIntegrationLatencyTM9999OutlierAlarm?: Record< + string, + LatencyThreshold + >; + readonly addIntegrationLatencyAverageAlarm?: Record; readonly addLowTpsAlarm?: Record; @@ -200,6 +226,10 @@ export class ApiGatewayV2HttpApiMonitoring extends Monitoring { [LatencyType.TM99]: props.addLatencyTM99Alarm, [LatencyType.TM999]: props.addLatencyTM999Alarm, [LatencyType.TM9999]: props.addLatencyTM9999Alarm, + [LatencyType.TM95_TOP]: props.addLatencyTM95OutlierAlarm, + [LatencyType.TM99_TOP]: props.addLatencyTM99OutlierAlarm, + [LatencyType.TM999_TOP]: props.addLatencyTM999OutlierAlarm, + [LatencyType.TM9999_TOP]: props.addLatencyTM999OutlierAlarm, [LatencyType.AVERAGE]: props.addLatencyAverageAlarm, }; @@ -219,6 +249,10 @@ export class ApiGatewayV2HttpApiMonitoring extends Monitoring { [LatencyType.TM99]: props.addIntegrationLatencyTM99Alarm, [LatencyType.TM999]: props.addIntegrationLatencyTM999Alarm, [LatencyType.TM9999]: props.addIntegrationLatencyTM9999Alarm, + [LatencyType.TM95_TOP]: props.addIntegrationLatencyTM95OutlierAlarm, + [LatencyType.TM99_TOP]: props.addIntegrationLatencyTM99OutlierAlarm, + [LatencyType.TM999_TOP]: props.addIntegrationLatencyTM999OutlierAlarm, + [LatencyType.TM9999_TOP]: props.addIntegrationLatencyTM9999OutlierAlarm, [LatencyType.AVERAGE]: props.addIntegrationLatencyAverageAlarm, }; diff --git a/test/monitoring/aws-apigateway/ApiGatewayMonitoring.test.ts b/test/monitoring/aws-apigateway/ApiGatewayMonitoring.test.ts index f958df50..b18eba93 100644 --- a/test/monitoring/aws-apigateway/ApiGatewayMonitoring.test.ts +++ b/test/monitoring/aws-apigateway/ApiGatewayMonitoring.test.ts @@ -150,6 +150,30 @@ test("snapshot test: all alarms", () => { datapointsToAlarm: 29999, }, }, + addLatencyTM95OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM99OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM9999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, addLatencyAverageAlarm: { Warning: { maxLatency: Duration.millis(20), @@ -170,7 +194,7 @@ test("snapshot test: all alarms", () => { }); addMonitoringDashboardsToStack(stack, monitoring); - expect(numAlarmsCreated).toStrictEqual(22); + expect(numAlarmsCreated).toStrictEqual(26); expect(Template.fromStack(stack)).toMatchSnapshot(); }); @@ -304,6 +328,30 @@ test("snapshot test: all alarms using interface", () => { datapointsToAlarm: 29999, }, }, + addLatencyTM95OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM99OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM9999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, addLatencyAverageAlarm: { Warning: { maxLatency: Duration.millis(20), @@ -324,6 +372,6 @@ test("snapshot test: all alarms using interface", () => { }); addMonitoringDashboardsToStack(stack, monitoring); - expect(numAlarmsCreated).toStrictEqual(22); + expect(numAlarmsCreated).toStrictEqual(26); expect(Template.fromStack(stack)).toMatchSnapshot(); }); diff --git a/test/monitoring/aws-apigateway/__snapshots__/ApiGatewayMonitoring.test.ts.snap b/test/monitoring/aws-apigateway/__snapshots__/ApiGatewayMonitoring.test.ts.snap index d7ab47a2..473849bf 100644 --- a/test/monitoring/aws-apigateway/__snapshots__/ApiGatewayMonitoring.test.ts.snap +++ b/test/monitoring/aws-apigateway/__snapshots__/ApiGatewayMonitoring.test.ts.snap @@ -216,7 +216,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiLatencyAverageWarning27D59767", + "ScopeTestDummyApiLatencyTM95100Warning206C89FE", "Arn", ], }, @@ -227,7 +227,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultCountWarning6270BEC0", + "ScopeTestDummyApiLatencyTM99100Warning38223F80", "Arn", ], }, @@ -238,7 +238,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorCountWarning11BE36AF", + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6", "Arn", ], }, @@ -249,7 +249,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorRateWarningD181D1C6", + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF", "Arn", ], }, @@ -260,7 +260,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "ScopeTestDummyApiLatencyAverageWarning27D59767", "Arn", ], }, @@ -271,7 +271,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "ScopeTestDummyApiFaultCountWarning6270BEC0", "Arn", ], }, @@ -280,6 +280,50 @@ Object { "Ref": "AWS::Region", }, "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorCountWarning11BE36AF", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":12,\\"y\\":20,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorRateWarningD181D1C6", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":18,\\"y\\":20,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":0,\\"y\\":24,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":6,\\"y\\":24,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ "ScopeTestDummyApiMaxTPSWarning62732F2B", @@ -408,7 +452,7 @@ Object { Object { "Ref": "AWS::Region", }, - "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", + "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", }, @@ -1031,6 +1075,44 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM95100Warning206C89FE": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(95%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(95%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(95%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "DummyApi", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(95%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM95WarningFFD46CB8": Object { "Properties": Object { "ActionsEnabled": true, @@ -1069,6 +1151,120 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM99100Warning38223F80": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "DummyApi", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.9%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.9%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.9%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "DummyApi", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.9%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "DummyApi", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM9999Warning4181DE97": Object { "Properties": Object { "ActionsEnabled": true, @@ -1283,7 +1479,7 @@ Object { Object { "Ref": "AWS::Region", }, - "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", + "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"DummyApi\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", }, @@ -1513,7 +1709,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiLatencyAverageWarning27D59767", + "ScopeTestDummyApiLatencyTM95100Warning206C89FE", "Arn", ], }, @@ -1524,7 +1720,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultCountWarning6270BEC0", + "ScopeTestDummyApiLatencyTM99100Warning38223F80", "Arn", ], }, @@ -1535,7 +1731,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorCountWarning11BE36AF", + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6", "Arn", ], }, @@ -1546,7 +1742,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorRateWarningD181D1C6", + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF", "Arn", ], }, @@ -1557,7 +1753,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "ScopeTestDummyApiLatencyAverageWarning27D59767", "Arn", ], }, @@ -1568,7 +1764,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "ScopeTestDummyApiFaultCountWarning6270BEC0", "Arn", ], }, @@ -1577,6 +1773,50 @@ Object { "Ref": "AWS::Region", }, "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorCountWarning11BE36AF", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":12,\\"y\\":20,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorRateWarningD181D1C6", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":18,\\"y\\":20,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":0,\\"y\\":24,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":6,\\"y\\":24,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ "ScopeTestDummyApiMaxTPSWarning62732F2B", @@ -1604,7 +1844,7 @@ Object { Object { "Ref": "AWS::Region", }, - "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", + "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", }, @@ -2227,6 +2467,44 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM95100Warning206C89FE": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(95%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(95%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(95%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "ThisShouldBeTheApiName", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(95%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM95WarningFFD46CB8": Object { "Properties": Object { "ActionsEnabled": true, @@ -2265,6 +2543,120 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM99100Warning38223F80": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "ThisShouldBeTheApiName", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.9%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.9%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.9%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "ThisShouldBeTheApiName", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.9%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiName", + "Value": "ThisShouldBeTheApiName", + }, + Object { + "Name": "Stage", + "Value": "prod", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM9999Warning4181DE97": Object { "Properties": Object { "ActionsEnabled": true, @@ -2479,7 +2871,7 @@ Object { Object { "Ref": "AWS::Region", }, - "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", + "\\",\\"metrics\\":[[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"Average\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P100 (avg: \${AVG})\\",\\"stat\\":\\"p100\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P50 (avg: \${AVG})\\",\\"stat\\":\\"p50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P70 (avg: \${AVG})\\",\\"stat\\":\\"p70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P90 (avg: \${AVG})\\",\\"stat\\":\\"p90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P95 (avg: \${AVG})\\",\\"stat\\":\\"p95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99 (avg: \${AVG})\\",\\"stat\\":\\"p99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.9 (avg: \${AVG})\\",\\"stat\\":\\"p99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"P99.99 (avg: \${AVG})\\",\\"stat\\":\\"p99.99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM70 (avg: \${AVG})\\",\\"stat\\":\\"tm70\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM90 (avg: \${AVG})\\",\\"stat\\":\\"tm90\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM95 (avg: \${AVG})\\",\\"stat\\":\\"tm95\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99 (avg: \${AVG})\\",\\"stat\\":\\"tm99\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.9 (avg: \${AVG})\\",\\"stat\\":\\"tm99.9\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiName\\",\\"ThisShouldBeTheApiName\\",\\"Stage\\",\\"prod\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", }, diff --git a/test/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.test.ts b/test/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.test.ts index fc832222..a3166174 100644 --- a/test/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.test.ts +++ b/test/monitoring/aws-apigatewayv2/ApiGatewayV2HttpApiMonitoring.test.ts @@ -133,6 +133,30 @@ test("snapshot test: all alarms", () => { datapointsToAlarm: 29999, }, }, + addLatencyTM95OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM99OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addLatencyTM9999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, addLatencyAverageAlarm: { Warning: { maxLatency: Duration.millis(20), @@ -229,6 +253,30 @@ test("snapshot test: all alarms", () => { datapointsToAlarm: 29999, }, }, + addIntegrationLatencyTM95OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addIntegrationLatencyTM99OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addIntegrationLatencyTM999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, + addIntegrationLatencyTM9999OutlierAlarm: { + Warning: { + maxLatency: Duration.millis(29999), + datapointsToAlarm: 29999, + }, + }, addIntegrationLatencyAverageAlarm: { Warning: { maxLatency: Duration.millis(20), @@ -273,6 +321,6 @@ test("snapshot test: all alarms", () => { }); addMonitoringDashboardsToStack(stack, monitoring); - expect(numAlarmsCreated).toStrictEqual(38); + expect(numAlarmsCreated).toStrictEqual(46); expect(Template.fromStack(stack)).toMatchSnapshot(); }); diff --git a/test/monitoring/aws-apigatewayv2/__snapshots__/ApiGatewayV2HttpApiMonitoring.test.ts.snap b/test/monitoring/aws-apigatewayv2/__snapshots__/ApiGatewayV2HttpApiMonitoring.test.ts.snap index 40bb0cb5..b66e0c57 100644 --- a/test/monitoring/aws-apigatewayv2/__snapshots__/ApiGatewayV2HttpApiMonitoring.test.ts.snap +++ b/test/monitoring/aws-apigatewayv2/__snapshots__/ApiGatewayV2HttpApiMonitoring.test.ts.snap @@ -188,7 +188,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiLatencyAverageWarning27D59767", + "ScopeTestDummyApiLatencyTM95100Warning206C89FE", "Arn", ], }, @@ -199,7 +199,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP50WarningB23B4040", + "ScopeTestDummyApiLatencyTM99100Warning38223F80", "Arn", ], }, @@ -210,7 +210,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP70Warning3CC3EBD5", + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6", "Arn", ], }, @@ -221,7 +221,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP90WarningF259FC77", + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF", "Arn", ], }, @@ -232,7 +232,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP95WarningD9A4B89B", + "ScopeTestDummyApiLatencyAverageWarning27D59767", "Arn", ], }, @@ -243,7 +243,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP99WarningC8929BAD", + "ScopeTestDummyApiIntegrationLatencyP50WarningB23B4040", "Arn", ], }, @@ -254,7 +254,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP999Warning9F27E61C", + "ScopeTestDummyApiIntegrationLatencyP70Warning3CC3EBD5", "Arn", ], }, @@ -265,7 +265,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP9999WarningA7C40063", + "ScopeTestDummyApiIntegrationLatencyP90WarningF259FC77", "Arn", ], }, @@ -276,7 +276,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyP100Warning347C1F98", + "ScopeTestDummyApiIntegrationLatencyP95WarningD9A4B89B", "Arn", ], }, @@ -287,7 +287,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM50Warning6B4229D0", + "ScopeTestDummyApiIntegrationLatencyP99WarningC8929BAD", "Arn", ], }, @@ -298,7 +298,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM70WarningB60BC024", + "ScopeTestDummyApiIntegrationLatencyP999Warning9F27E61C", "Arn", ], }, @@ -309,7 +309,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM90Warning2A0B535F", + "ScopeTestDummyApiIntegrationLatencyP9999WarningA7C40063", "Arn", ], }, @@ -320,7 +320,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM95WarningCA30746B", + "ScopeTestDummyApiIntegrationLatencyP100Warning347C1F98", "Arn", ], }, @@ -331,7 +331,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM99WarningACB026E2", + "ScopeTestDummyApiIntegrationLatencyTM50Warning6B4229D0", "Arn", ], }, @@ -342,7 +342,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM999Warning08B604B1", + "ScopeTestDummyApiIntegrationLatencyTM70WarningB60BC024", "Arn", ], }, @@ -353,7 +353,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyTM9999Warning26E553E4", + "ScopeTestDummyApiIntegrationLatencyTM90Warning2A0B535F", "Arn", ], }, @@ -364,7 +364,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiIntegrationLatencyAverageWarning1FB2E797", + "ScopeTestDummyApiIntegrationLatencyTM95WarningCA30746B", "Arn", ], }, @@ -375,7 +375,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorCountWarning11BE36AF", + "ScopeTestDummyApiIntegrationLatencyTM99WarningACB026E2", "Arn", ], }, @@ -386,7 +386,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiErrorRateWarningD181D1C6", + "ScopeTestDummyApiIntegrationLatencyTM999Warning08B604B1", "Arn", ], }, @@ -397,7 +397,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultCountWarning6270BEC0", + "ScopeTestDummyApiIntegrationLatencyTM9999Warning26E553E4", "Arn", ], }, @@ -408,7 +408,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "ScopeTestDummyApiIntegrationLatencyTM95100WarningDB62B359", "Arn", ], }, @@ -419,7 +419,7 @@ Object { "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ - "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "ScopeTestDummyApiIntegrationLatencyTM99100Warning304E790F", "Arn", ], }, @@ -428,6 +428,94 @@ Object { "Ref": "AWS::Region", }, "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiIntegrationLatencyTM999100WarningE199BD2E", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":12,\\"y\\":36,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiIntegrationLatencyTM9999100Warning3D3FA4F3", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":18,\\"y\\":36,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiIntegrationLatencyAverageWarning1FB2E797", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":0,\\"y\\":40,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorCountWarning11BE36AF", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":6,\\"y\\":40,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiErrorRateWarningD181D1C6", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":12,\\"y\\":40,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiFaultCountWarning6270BEC0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":18,\\"y\\":40,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiFaultRateWarning63CFB7F0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":0,\\"y\\":44,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", + Object { + "Fn::GetAtt": Array [ + "ScopeTestDummyApiMinTPSWarning4E8DB4D0", + "Arn", + ], + }, + "\\"]},\\"yAxis\\":{}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":4,\\"x\\":6,\\"y\\":44,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"region\\":\\"", + Object { + "Ref": "AWS::Region", + }, + "\\",\\"annotations\\":{\\"alarms\\":[\\"", Object { "Fn::GetAtt": Array [ "ScopeTestDummyApiMaxTPSWarning62732F2B", @@ -535,6 +623,38 @@ Object { Object { "Ref": "testHttpApiC57B300F", }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", Object { "Ref": "testHttpApiC57B300F", @@ -587,7 +707,7 @@ Object { Object { "Ref": "testHttpApiC57B300F", }, - "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":6,\\"height\\":5,\\"x\\":12,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", }, @@ -1258,6 +1378,46 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiIntegrationLatencyTM95100WarningDB62B359": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(95%:100%) integration latency is too high.", + "AlarmName": "Test-DummyApi-IntegrationLatency-TM(95%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(95%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "IntegrationLatency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(95%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiIntegrationLatencyTM95WarningCA30746B": Object { "Properties": Object { "ActionsEnabled": true, @@ -1298,6 +1458,126 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiIntegrationLatencyTM99100Warning304E790F": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99%:100%) integration latency is too high.", + "AlarmName": "Test-DummyApi-IntegrationLatency-TM(99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "IntegrationLatency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiIntegrationLatencyTM999100WarningE199BD2E": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.9%:100%) integration latency is too high.", + "AlarmName": "Test-DummyApi-IntegrationLatency-TM(99.9%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.9%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "IntegrationLatency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.9%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiIntegrationLatencyTM9999100Warning3D3FA4F3": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.99%:100%) integration latency is too high.", + "AlarmName": "Test-DummyApi-IntegrationLatency-TM(99.99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "IntegrationLatency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiIntegrationLatencyTM9999Warning26E553E4": Object { "Properties": Object { "ActionsEnabled": true, @@ -1898,6 +2178,46 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM95100Warning206C89FE": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(95%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(95%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(95%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(95%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM95WarningFFD46CB8": Object { "Properties": Object { "ActionsEnabled": true, @@ -1938,6 +2258,126 @@ Object { }, "Type": "AWS::CloudWatch::Alarm", }, + "ScopeTestDummyApiLatencyTM99100Warning38223F80": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM999100Warning20E62DC6": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.9%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.9%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.9%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.9%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, + "ScopeTestDummyApiLatencyTM9999100Warning800AFBBF": Object { + "Properties": Object { + "ActionsEnabled": true, + "AlarmDescription": "TM(99.99%:100%) latency is too high.", + "AlarmName": "Test-DummyApi-Latency-TM(99.99%:100%)-Warning", + "ComparisonOperator": "GreaterThanThreshold", + "DatapointsToAlarm": 29999, + "EvaluationPeriods": 29999, + "Metrics": Array [ + Object { + "Id": "m1", + "Label": "TM(99.99%:100%)", + "MetricStat": Object { + "Metric": Object { + "Dimensions": Array [ + Object { + "Name": "ApiId", + "Value": Object { + "Ref": "testHttpApiC57B300F", + }, + }, + Object { + "Name": "Stage", + "Value": "$default", + }, + ], + "MetricName": "Latency", + "Namespace": "AWS/ApiGateway", + }, + "Period": 300, + "Stat": "TM(99.99%:100%)", + }, + "ReturnData": true, + }, + ], + "Threshold": 29999, + "TreatMissingData": "notBreaching", + }, + "Type": "AWS::CloudWatch::Alarm", + }, "ScopeTestDummyApiLatencyTM9999Warning4181DE97": Object { "Properties": Object { "ActionsEnabled": true, @@ -2242,6 +2682,38 @@ Object { Object { "Ref": "testHttpApiC57B300F", }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(95%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(95%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.9%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.9%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM(99.99%:100%) (avg: \${AVG})\\",\\"stat\\":\\"TM(99.99%:100%)\\"}],[\\"AWS/ApiGateway\\",\\"Latency\\",\\"ApiId\\",\\"", + Object { + "Ref": "testHttpApiC57B300F", + }, "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM50 (avg: \${AVG})\\",\\"stat\\":\\"tm50\\"}],[\\"AWS/ApiGateway\\",\\"IntegrationLatency\\",\\"ApiId\\",\\"", Object { "Ref": "testHttpApiC57B300F", @@ -2294,7 +2766,7 @@ Object { Object { "Ref": "testHttpApiC57B300F", }, - "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", + "\\",\\"Stage\\",\\"$default\\",{\\"label\\":\\"TM99.99 (avg: \${AVG})\\",\\"stat\\":\\"tm99.99\\"}]],\\"annotations\\":{\\"horizontal\\":[{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P50 > 150 for 150 datapoints within 750 minutes\\",\\"value\\":150,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P70 > 170 for 170 datapoints within 850 minutes\\",\\"value\\":170,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P90 > 190 for 190 datapoints within 950 minutes\\",\\"value\\":190,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P95 > 195 for 195 datapoints within 975 minutes\\",\\"value\\":195,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99 > 199 for 199 datapoints within 995 minutes\\",\\"value\\":199,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.9 > 1999 for 1999 datapoints within 9995 minutes\\",\\"value\\":1999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P99.99 > 19999 for 19999 datapoints within 99995 minutes\\",\\"value\\":19999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"P100 > 1100 for 1100 datapoints within 5500 minutes\\",\\"value\\":1100,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM50 > 250 for 250 datapoints within 1250 minutes\\",\\"value\\":250,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM70 > 270 for 270 datapoints within 1350 minutes\\",\\"value\\":270,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM90 > 290 for 290 datapoints within 1450 minutes\\",\\"value\\":290,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM95 > 295 for 295 datapoints within 1475 minutes\\",\\"value\\":295,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99 > 299 for 299 datapoints within 1495 minutes\\",\\"value\\":299,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.9 > 2999 for 2999 datapoints within 14995 minutes\\",\\"value\\":2999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM99.99 > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(95%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.9%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"TM(99.99%:100%) > 29999 for 29999 datapoints within 149995 minutes\\",\\"value\\":29999,\\"yAxis\\":\\"left\\"},{\\"label\\":\\"Average > 20 for 20 datapoints within 100 minutes\\",\\"value\\":20,\\"yAxis\\":\\"left\\"}]},\\"yAxis\\":{\\"left\\":{\\"min\\":0,\\"label\\":\\"ms\\",\\"showUnits\\":false}}}},{\\"type\\":\\"metric\\",\\"width\\":8,\\"height\\":6,\\"x\\":16,\\"y\\":1,\\"properties\\":{\\"view\\":\\"timeSeries\\",\\"title\\":\\"Errors (rate)\\",\\"region\\":\\"", Object { "Ref": "AWS::Region", },