UNPKG

cdk-monitoring-constructs

Version:

[![NPM version](https://badge.fury.io/js/cdk-monitoring-constructs.svg)](https://badge.fury.io/js/cdk-monitoring-constructs) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.cdklabs/cdkmonitoringconstructs/badge.svg)](https://m

76 lines 10.4 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.Route53HealthCheckMetricAdjuster = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch"); const metric_1 = require("../../metric"); /** * The supported statistics by Route53 Health Checks. * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-types.html */ const SUPPORTED_STATS = new Set([ metric_1.MetricStatistic.AVERAGE, metric_1.MetricStatistic.MIN, metric_1.MetricStatistic.MAX, metric_1.MetricStatistic.SUM, metric_1.MetricStatistic.N, ]); /** * Adjusts a metric so that alarms created from it can be used in Route53 Health Checks. * The metric will be validated to ensure it satisfies Route53 Health Check alarm requirements, otherwise it will throw an {@link Error}. * @see https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-types.html */ class Route53HealthCheckMetricAdjuster { /** @inheritdoc */ adjustMetric(metric, alarmScope, props) { // Route53 health checks do not support composite alarms if (props.minMetricSamplesToAlarm) { throw new Error("Alarms with 'minMetricSamplesToAlarm' are not supported."); } // Route53 health checks do to support metric math if (!(metric instanceof aws_cloudwatch_1.Metric)) { throw new Error("The specified metric must be a Metric instance."); } const { account, period, statistic } = metric; if (account && account !== aws_cdk_lib_1.Stack.of(alarmScope).account) { throw new Error("Cross-account metrics are not supported."); } // Route53 health checks do not support high-resolution metrics if (period && period.toSeconds() < 60) { throw new Error("High resolution metrics are not supported."); } // Route53 health checks only support a subset of statistics if (!SUPPORTED_STATS.has(statistic)) { throw new Error(`Metrics with statistic '${statistic}' are not supported.`); } // Can't use `metric.with()` to remove the label, only change it // See: https://github.com/aws/aws-cdk/blob/v2.65.0/packages/%40aws-cdk/aws-cloudwatch/lib/metric.ts#L314-L342 return new aws_cloudwatch_1.Metric({ ...metric, // all fields except dimensions have the same names dimensionsMap: metric.dimensions, /* * `AWS::CloudWatch::Alarm` CFN resource types have two variants: * - Based on a single metric: Uses `MetricName` property. * - Based on metric math: Uses `Metrics` property. * * If the `label` of a `Metric` instance is defined, when an * alarm is created from it, even if it doesn't use metric math, * it will use the `Metrics` property. Since Route53 does not * support metric math it assumes any alarm created using the * `Metrics` property must use metric math, thus it must be removed. * * See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudwatch-alarm.html * See: https://github.com/aws/aws-cdk/blob/v2.65.0/packages/@aws-cdk/aws-cloudwatch/lib/alarm.ts#L262-L298 */ label: undefined, }); } } exports.Route53HealthCheckMetricAdjuster = Route53HealthCheckMetricAdjuster; _a = JSII_RTTI_SYMBOL_1; Route53HealthCheckMetricAdjuster[_a] = { fqn: "cdk-monitoring-constructs.Route53HealthCheckMetricAdjuster", version: "10.0.0" }; Route53HealthCheckMetricAdjuster.INSTANCE = new Route53HealthCheckMetricAdjuster(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGU1M0hlYWx0aENoZWNrTWV0cmljQWRqdXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJSb3V0ZTUzSGVhbHRoQ2hlY2tNZXRyaWNBZGp1c3Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFvQztBQUNwQywrREFBb0Q7QUFHcEQseUNBQXVFO0FBR3ZFOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFTO0lBQ3RDLHdCQUFlLENBQUMsT0FBTztJQUN2Qix3QkFBZSxDQUFDLEdBQUc7SUFDbkIsd0JBQWUsQ0FBQyxHQUFHO0lBQ25CLHdCQUFlLENBQUMsR0FBRztJQUNuQix3QkFBZSxDQUFDLENBQUM7Q0FDbEIsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILE1BQWEsZ0NBQWdDO0lBRzNDLGtCQUFrQjtJQUNsQixZQUFZLENBQ1YsTUFBOEIsRUFDOUIsVUFBcUIsRUFDckIsS0FBb0I7UUFFcEIsd0RBQXdEO1FBQ3hELElBQUksS0FBSyxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLHVCQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRTlDLElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELCtEQUErRDtRQUMvRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLDJCQUEyQixTQUFTLHNCQUFzQixDQUMzRCxDQUFDO1FBQ0osQ0FBQztRQUVELGdFQUFnRTtRQUNoRSw4R0FBOEc7UUFDOUcsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsR0FBRyxNQUFNO1lBQ1QsbURBQW1EO1lBQ25ELGFBQWEsRUFBRSxNQUFNLENBQUMsVUFBVTtZQUNoQzs7Ozs7Ozs7Ozs7OztlQWFHO1lBQ0gsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE3REgsNEVBOERDOzs7QUE3RGlCLHlDQUFRLEdBQUcsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IE1ldHJpYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElNZXRyaWNBZGp1c3RlciB9IGZyb20gXCIuL0lNZXRyaWNBZGp1c3RlclwiO1xuaW1wb3J0IHsgTWV0cmljU3RhdGlzdGljLCBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0IH0gZnJvbSBcIi4uLy4uL21ldHJpY1wiO1xuaW1wb3J0IHsgQWRkQWxhcm1Qcm9wcyB9IGZyb20gXCIuLi9BbGFybUZhY3RvcnlcIjtcblxuLyoqXG4gKiBUaGUgc3VwcG9ydGVkIHN0YXRpc3RpY3MgYnkgUm91dGU1MyBIZWFsdGggQ2hlY2tzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvaGVhbHRoLWNoZWNrcy10eXBlcy5odG1sXG4gKi9cbmNvbnN0IFNVUFBPUlRFRF9TVEFUUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICBNZXRyaWNTdGF0aXN0aWMuTUlOLFxuICBNZXRyaWNTdGF0aXN0aWMuTUFYLFxuICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICBNZXRyaWNTdGF0aXN0aWMuTixcbl0pO1xuXG4vKipcbiAqIEFkanVzdHMgYSBtZXRyaWMgc28gdGhhdCBhbGFybXMgY3JlYXRlZCBmcm9tIGl0IGNhbiBiZSB1c2VkIGluIFJvdXRlNTMgSGVhbHRoIENoZWNrcy5cbiAqIFRoZSBtZXRyaWMgd2lsbCBiZSB2YWxpZGF0ZWQgdG8gZW5zdXJlIGl0IHNhdGlzZmllcyBSb3V0ZTUzIEhlYWx0aCBDaGVjayBhbGFybSByZXF1aXJlbWVudHMsIG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGFuIHtAbGluayBFcnJvcn0uXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9oZWFsdGgtY2hlY2tzLXR5cGVzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlNTNIZWFsdGhDaGVja01ldHJpY0FkanVzdGVyIGltcGxlbWVudHMgSU1ldHJpY0FkanVzdGVyIHtcbiAgc3RhdGljIHJlYWRvbmx5IElOU1RBTkNFID0gbmV3IFJvdXRlNTNIZWFsdGhDaGVja01ldHJpY0FkanVzdGVyKCk7XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGFkanVzdE1ldHJpYyhcbiAgICBtZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQsXG4gICAgYWxhcm1TY29wZTogQ29uc3RydWN0LFxuICAgIHByb3BzOiBBZGRBbGFybVByb3BzLFxuICApOiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0IHtcbiAgICAvLyBSb3V0ZTUzIGhlYWx0aCBjaGVja3MgZG8gbm90IHN1cHBvcnQgY29tcG9zaXRlIGFsYXJtc1xuICAgIGlmIChwcm9wcy5taW5NZXRyaWNTYW1wbGVzVG9BbGFybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkFsYXJtcyB3aXRoICdtaW5NZXRyaWNTYW1wbGVzVG9BbGFybScgYXJlIG5vdCBzdXBwb3J0ZWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJvdXRlNTMgaGVhbHRoIGNoZWNrcyBkbyB0byBzdXBwb3J0IG1ldHJpYyBtYXRoXG4gICAgaWYgKCEobWV0cmljIGluc3RhbmNlb2YgTWV0cmljKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNwZWNpZmllZCBtZXRyaWMgbXVzdCBiZSBhIE1ldHJpYyBpbnN0YW5jZS5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBhY2NvdW50LCBwZXJpb2QsIHN0YXRpc3RpYyB9ID0gbWV0cmljO1xuXG4gICAgaWYgKGFjY291bnQgJiYgYWNjb3VudCAhPT0gU3RhY2sub2YoYWxhcm1TY29wZSkuYWNjb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3Jvc3MtYWNjb3VudCBtZXRyaWNzIGFyZSBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICB9XG5cbiAgICAvLyBSb3V0ZTUzIGhlYWx0aCBjaGVja3MgZG8gbm90IHN1cHBvcnQgaGlnaC1yZXNvbHV0aW9uIG1ldHJpY3NcbiAgICBpZiAocGVyaW9kICYmIHBlcmlvZC50b1NlY29uZHMoKSA8IDYwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIaWdoIHJlc29sdXRpb24gbWV0cmljcyBhcmUgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgfVxuXG4gICAgLy8gUm91dGU1MyBoZWFsdGggY2hlY2tzIG9ubHkgc3VwcG9ydCBhIHN1YnNldCBvZiBzdGF0aXN0aWNzXG4gICAgaWYgKCFTVVBQT1JURURfU1RBVFMuaGFzKHN0YXRpc3RpYykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1ldHJpY3Mgd2l0aCBzdGF0aXN0aWMgJyR7c3RhdGlzdGljfScgYXJlIG5vdCBzdXBwb3J0ZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2FuJ3QgdXNlIGBtZXRyaWMud2l0aCgpYCB0byByZW1vdmUgdGhlIGxhYmVsLCBvbmx5IGNoYW5nZSBpdFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuNjUuMC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1jbG91ZHdhdGNoL2xpYi9tZXRyaWMudHMjTDMxNC1MMzQyXG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgLi4ubWV0cmljLFxuICAgICAgLy8gYWxsIGZpZWxkcyBleGNlcHQgZGltZW5zaW9ucyBoYXZlIHRoZSBzYW1lIG5hbWVzXG4gICAgICBkaW1lbnNpb25zTWFwOiBtZXRyaWMuZGltZW5zaW9ucyxcbiAgICAgIC8qXG4gICAgICAgKiBgQVdTOjpDbG91ZFdhdGNoOjpBbGFybWAgQ0ZOIHJlc291cmNlIHR5cGVzIGhhdmUgdHdvIHZhcmlhbnRzOlxuICAgICAgICogLSBCYXNlZCBvbiBhIHNpbmdsZSBtZXRyaWM6IFVzZXMgYE1ldHJpY05hbWVgIHByb3BlcnR5LlxuICAgICAgICogLSBCYXNlZCBvbiBtZXRyaWMgbWF0aDogVXNlcyBgTWV0cmljc2AgcHJvcGVydHkuXG4gICAgICAgKlxuICAgICAgICogSWYgdGhlIGBsYWJlbGAgb2YgYSBgTWV0cmljYCBpbnN0YW5jZSBpcyBkZWZpbmVkLCB3aGVuIGFuXG4gICAgICAgKiBhbGFybSBpcyBjcmVhdGVkIGZyb20gaXQsIGV2ZW4gaWYgaXQgZG9lc24ndCB1c2UgbWV0cmljIG1hdGgsXG4gICAgICAgKiBpdCB3aWxsIHVzZSB0aGUgYE1ldHJpY3NgIHByb3BlcnR5LiBTaW5jZSBSb3V0ZTUzIGRvZXMgbm90XG4gICAgICAgKiBzdXBwb3J0IG1ldHJpYyBtYXRoIGl0IGFzc3VtZXMgYW55IGFsYXJtIGNyZWF0ZWQgdXNpbmcgdGhlXG4gICAgICAgKiBgTWV0cmljc2AgcHJvcGVydHkgbXVzdCB1c2UgbWV0cmljIG1hdGgsIHRodXMgaXQgbXVzdCBiZSByZW1vdmVkLlxuICAgICAgICpcbiAgICAgICAqIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxuICAgICAgICogU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi42NS4wL3BhY2thZ2VzL0Bhd3MtY2RrL2F3cy1jbG91ZHdhdGNoL2xpYi9hbGFybS50cyNMMjYyLUwyOThcbiAgICAgICAqL1xuICAgICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfVxufVxuIl19