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

54 lines 7.85 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AnomalyDetectionMathExpression = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch"); /** * Captures specific MathExpression for anomaly detection, for which alarm generation is different. * Added to overcome certain CDK limitations at the time of writing. * @see https://github.com/aws/aws-cdk/issues/10540 */ class AnomalyDetectionMathExpression extends aws_cloudwatch_1.MathExpression { constructor(props) { super(props); } with(props) { return new AnomalyDetectionMathExpression({ expression: this.expression, usingMetrics: this.usingMetrics, label: props.label ?? this.label, color: props.color ?? this.color, period: props.period ?? this.period, }); } createAlarm(scope, id, props) { const alarm = super.createAlarm(scope, id, props); // `usingMetrics` of an anomaly detection alarm can only ever have one entry. // Should the entry be a math expression, the math expression can have its own `usingMetrics`. const finalExpressionId = Object.keys(this.usingMetrics)[0]; // https://github.com/aws/aws-cdk/issues/10540#issuecomment-725222564 const cfnAlarm = alarm.node.defaultChild; cfnAlarm.addPropertyDeletionOverride("Threshold"); cfnAlarm.metrics.forEach((metric, index) => { // To create an anomaly detection alarm, returned data should be set to true on two MetricDataQueryProperty(s): // 1. The metric or math expression that is being evaluated for anomaly detection (eg. expr_1) // 2. The actual expression of anomaly detection (eg. ANOMALY_DETECTION_BAND(expr_1, 1)) let returnData = false; if (metric.expression?.includes("ANOMALY_DETECTION_BAND")) { // thresholdMetricId is the ID of the ANOMALY_DETECTION_BAND function used as the threshold for the alarm. cfnAlarm.thresholdMetricId = metric.id; returnData = true; } else if (metric.id === finalExpressionId) { returnData = true; } cfnAlarm.addPropertyOverride(`Metrics.${index}.ReturnData`, returnData); }); return alarm; } } exports.AnomalyDetectionMathExpression = AnomalyDetectionMathExpression; _a = JSII_RTTI_SYMBOL_1; AnomalyDetectionMathExpression[_a] = { fqn: "cdk-monitoring-constructs.AnomalyDetectionMathExpression", version: "10.0.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5vbWFseURldGVjdGlvbk1hdGhFeHByZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQW5vbWFseURldGVjdGlvbk1hdGhFeHByZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0RBT29DO0FBR3BDOzs7O0dBSUc7QUFDSCxNQUFhLDhCQUErQixTQUFRLCtCQUFjO0lBQ2hFLFlBQVksS0FBMEI7UUFDcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxLQUE0QjtRQUMvQixPQUFPLElBQUksOEJBQThCLENBQUM7WUFDeEMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztZQUNoQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztZQUNoQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTTtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsRCw2RUFBNkU7UUFDN0UsOEZBQThGO1FBQzlGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQscUVBQXFFO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQztRQUNyRCxRQUFRLENBQUMsMkJBQTJCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsUUFBUSxDQUFDLE9BQThDLENBQUMsT0FBTyxDQUM5RCxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQiwrR0FBK0c7WUFDL0csOEZBQThGO1lBQzlGLHdGQUF3RjtZQUN4RixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELDBHQUEwRztnQkFDMUcsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0MsVUFBVSxHQUFHLElBQUksQ0FBQztZQUNwQixDQUFDO1lBRUQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O0FBN0NILHdFQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsYXJtLFxuICBDZm5BbGFybSxcbiAgQ3JlYXRlQWxhcm1PcHRpb25zLFxuICBNYXRoRXhwcmVzc2lvbixcbiAgTWF0aEV4cHJlc3Npb25PcHRpb25zLFxuICBNYXRoRXhwcmVzc2lvblByb3BzLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogQ2FwdHVyZXMgc3BlY2lmaWMgTWF0aEV4cHJlc3Npb24gZm9yIGFub21hbHkgZGV0ZWN0aW9uLCBmb3Igd2hpY2ggYWxhcm0gZ2VuZXJhdGlvbiBpcyBkaWZmZXJlbnQuXG4gKiBBZGRlZCB0byBvdmVyY29tZSBjZXJ0YWluIENESyBsaW1pdGF0aW9ucyBhdCB0aGUgdGltZSBvZiB3cml0aW5nLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzEwNTQwXG4gKi9cbmV4cG9ydCBjbGFzcyBBbm9tYWx5RGV0ZWN0aW9uTWF0aEV4cHJlc3Npb24gZXh0ZW5kcyBNYXRoRXhwcmVzc2lvbiB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBNYXRoRXhwcmVzc2lvblByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgd2l0aChwcm9wczogTWF0aEV4cHJlc3Npb25PcHRpb25zKTogTWF0aEV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQW5vbWFseURldGVjdGlvbk1hdGhFeHByZXNzaW9uKHtcbiAgICAgIGV4cHJlc3Npb246IHRoaXMuZXhwcmVzc2lvbixcbiAgICAgIHVzaW5nTWV0cmljczogdGhpcy51c2luZ01ldHJpY3MsXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgPz8gdGhpcy5sYWJlbCxcbiAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciA/PyB0aGlzLmNvbG9yLFxuICAgICAgcGVyaW9kOiBwcm9wcy5wZXJpb2QgPz8gdGhpcy5wZXJpb2QsXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVBbGFybShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ3JlYXRlQWxhcm1PcHRpb25zKTogQWxhcm0ge1xuICAgIGNvbnN0IGFsYXJtID0gc3VwZXIuY3JlYXRlQWxhcm0oc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBgdXNpbmdNZXRyaWNzYCBvZiBhbiBhbm9tYWx5IGRldGVjdGlvbiBhbGFybSBjYW4gb25seSBldmVyIGhhdmUgb25lIGVudHJ5LlxuICAgIC8vIFNob3VsZCB0aGUgZW50cnkgYmUgYSBtYXRoIGV4cHJlc3Npb24sIHRoZSBtYXRoIGV4cHJlc3Npb24gY2FuIGhhdmUgaXRzIG93biBgdXNpbmdNZXRyaWNzYC5cbiAgICBjb25zdCBmaW5hbEV4cHJlc3Npb25JZCA9IE9iamVjdC5rZXlzKHRoaXMudXNpbmdNZXRyaWNzKVswXTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTA1NDAjaXNzdWVjb21tZW50LTcyNTIyMjU2NFxuICAgIGNvbnN0IGNmbkFsYXJtID0gYWxhcm0ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuQWxhcm07XG4gICAgY2ZuQWxhcm0uYWRkUHJvcGVydHlEZWxldGlvbk92ZXJyaWRlKFwiVGhyZXNob2xkXCIpO1xuICAgIChjZm5BbGFybS5tZXRyaWNzIGFzIENmbkFsYXJtLk1ldHJpY0RhdGFRdWVyeVByb3BlcnR5W10pLmZvckVhY2goXG4gICAgICAobWV0cmljLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBUbyBjcmVhdGUgYW4gYW5vbWFseSBkZXRlY3Rpb24gYWxhcm0sIHJldHVybmVkIGRhdGEgc2hvdWxkIGJlIHNldCB0byB0cnVlIG9uIHR3byBNZXRyaWNEYXRhUXVlcnlQcm9wZXJ0eShzKTpcbiAgICAgICAgLy8gMS4gVGhlIG1ldHJpYyBvciBtYXRoIGV4cHJlc3Npb24gdGhhdCBpcyBiZWluZyBldmFsdWF0ZWQgZm9yIGFub21hbHkgZGV0ZWN0aW9uIChlZy4gZXhwcl8xKVxuICAgICAgICAvLyAyLiBUaGUgYWN0dWFsIGV4cHJlc3Npb24gb2YgYW5vbWFseSBkZXRlY3Rpb24gKGVnLiBBTk9NQUxZX0RFVEVDVElPTl9CQU5EKGV4cHJfMSwgMSkpXG4gICAgICAgIGxldCByZXR1cm5EYXRhID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG1ldHJpYy5leHByZXNzaW9uPy5pbmNsdWRlcyhcIkFOT01BTFlfREVURUNUSU9OX0JBTkRcIikpIHtcbiAgICAgICAgICAvLyB0aHJlc2hvbGRNZXRyaWNJZCBpcyB0aGUgSUQgb2YgdGhlIEFOT01BTFlfREVURUNUSU9OX0JBTkQgZnVuY3Rpb24gdXNlZCBhcyB0aGUgdGhyZXNob2xkIGZvciB0aGUgYWxhcm0uXG4gICAgICAgICAgY2ZuQWxhcm0udGhyZXNob2xkTWV0cmljSWQgPSBtZXRyaWMuaWQ7XG4gICAgICAgICAgcmV0dXJuRGF0YSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0cmljLmlkID09PSBmaW5hbEV4cHJlc3Npb25JZCkge1xuICAgICAgICAgIHJldHVybkRhdGEgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2ZuQWxhcm0uYWRkUHJvcGVydHlPdmVycmlkZShgTWV0cmljcy4ke2luZGV4fS5SZXR1cm5EYXRhYCwgcmV0dXJuRGF0YSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gYWxhcm07XG4gIH1cbn1cbiJdfQ==