diff --git a/packages/aws-cdk-lib/aws-cloudwatch/lib/private/statistic.ts b/packages/aws-cdk-lib/aws-cloudwatch/lib/private/statistic.ts index 395f347e97ebf..80e05f26488d7 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch/lib/private/statistic.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch/lib/private/statistic.ts @@ -34,6 +34,10 @@ export interface PercentileStatistic extends SingleStatistic { statName: 'percentile'; } +export interface PercentileRankStatistic extends PairStatistic { + statName: 'percentileRank'; +} + export interface TrimmedMeanStatistic extends PairStatistic { statName: 'trimmedMean'; } @@ -154,6 +158,7 @@ export function parseStatistic( ): | SimpleStatistic | PercentileStatistic + | PercentileRankStatistic | TrimmedMeanStatistic | WinsorizedMeanStatistic | TrimmedCountStatistic @@ -188,6 +193,10 @@ export function parseStatistic( m = parseSingleStatistic(stat, 'p'); if (m) return { ...m, statName: 'percentile' } as PercentileStatistic; + // Percentile Rank statistics + m = parsePairStatistic(stat, 'pr'); + if (m) return { ...m, statName: 'percentileRank' } as PercentileRankStatistic; + // Trimmed mean statistics m = parseSingleStatistic(stat, 'tm') || parsePairStatistic(stat, 'tm'); if (m) return { ...m, statName: 'trimmedMean' } as TrimmedMeanStatistic; diff --git a/packages/aws-cdk-lib/aws-cloudwatch/test/stats.test.ts b/packages/aws-cdk-lib/aws-cloudwatch/test/stats.test.ts index 0a65ae2e143de..f2b399e243c79 100644 --- a/packages/aws-cdk-lib/aws-cloudwatch/test/stats.test.ts +++ b/packages/aws-cdk-lib/aws-cloudwatch/test/stats.test.ts @@ -1,5 +1,20 @@ +import { Metric, Stats } from '../../aws-cloudwatch'; import * as cloudwatch from '../lib'; +it.each([ + Stats.percentileRank(0), + Stats.percentileRank(0, 1), + Stats.percentileRank(0, undefined), +])('Stats can create valid statistics %s without causing warnings', (statistic) => { + const metric = new Metric({ + namespace: 'example', + metricName: 'example', + statistic, + }); + + expect(metric.warningsV2).toEqual(undefined); +}); + test('spot check some constants', () => { expect(cloudwatch.Stats.AVERAGE).toEqual('Average'); expect(cloudwatch.Stats.IQM).toEqual('IQM');