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

78 lines 11.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.BillingMonitoring = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch"); const BillingMetricFactory_1 = require("./BillingMetricFactory"); const common_1 = require("../../common"); const dashboard_1 = require("../../dashboard"); class BillingMonitoring extends common_1.Monitoring { constructor(scope, props) { super(scope); const namingStrategy = new dashboard_1.MonitoringNamingStrategy({ ...props, fallbackConstructName: "Billing", }); this.title = namingStrategy.resolveHumanReadableName(); this.alarmFactory = scope.createAlarmFactory(namingStrategy.resolveAlarmFriendlyName()); this.anomalyDetectingAlarmFactory = new common_1.AnomalyDetectingAlarmFactory(this.alarmFactory); const metricFactory = new BillingMetricFactory_1.BillingMetricFactory(); this.costByServiceMetric = metricFactory.metricSearchTopCostByServiceInUsd(); this.totalCostMetric = metricFactory.metricTotalCostInUsd(); for (const disambiguator in props.addTotalCostAnomalyAlarm) { const alarmProps = props.addTotalCostAnomalyAlarm[disambiguator]; const createdAlarm = this.anomalyDetectingAlarmFactory.addAlarmWhenOutOfBand(this.totalCostMetric, "Cost-Anomaly", disambiguator, alarmProps); this.addAlarm(createdAlarm); } props.useCreatedAlarms?.consume(this.createdAlarms()); } summaryWidgets() { return [ this.createTitleWidget(), this.createTotalChargesWidget(common_1.FullWidth, common_1.DefaultSummaryWidgetHeight), ]; } widgets() { return [ this.createTitleWidget(), this.createChargesByServiceWidget(common_1.ThreeQuartersWidth, common_1.DefaultGraphWidgetHeight), this.createTotalChargesWidget(common_1.QuarterWidth, common_1.DefaultGraphWidgetHeight), ]; } createTitleWidget() { return new dashboard_1.MonitoringHeaderWidget({ family: "AWS Account Billing", title: this.title, }); } createChargesByServiceWidget(width, height) { return new aws_cloudwatch_1.GraphWidget({ width, height, title: "Most Expensive Services (" + BillingMetricFactory_1.BillingCurrency + ")", left: [this.costByServiceMetric], leftYAxis: common_1.CurrencyAxisUsdFromZero, view: aws_cloudwatch_1.GraphWidgetView.BAR, // billing is global but resides in single region region: BillingMetricFactory_1.BillingRegion, }); } createTotalChargesWidget(width, height) { return new aws_cloudwatch_1.SingleValueWidget({ width, height, title: "Total Cost (" + BillingMetricFactory_1.BillingCurrency + ")", metrics: [this.totalCostMetric], fullPrecision: false, setPeriodToTimeRange: false, // billing is global but resides in single region region: BillingMetricFactory_1.BillingRegion, }); } } exports.BillingMonitoring = BillingMonitoring; _a = JSII_RTTI_SYMBOL_1; BillingMonitoring[_a] = { fqn: "cdk-monitoring-constructs.BillingMonitoring", version: "10.0.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmlsbGluZ01vbml0b3JpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJCaWxsaW5nTW9uaXRvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtEQU1vQztBQUVwQyxpRUFJZ0M7QUFDaEMseUNBY3NCO0FBQ3RCLCtDQUd5QjtBQVF6QixNQUFhLGlCQUFrQixTQUFRLG1CQUFVO0lBUy9DLFlBQVksS0FBc0IsRUFBRSxLQUE2QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixNQUFNLGNBQWMsR0FBRyxJQUFJLG9DQUF3QixDQUFDO1lBQ2xELEdBQUcsS0FBSztZQUNSLHFCQUFxQixFQUFFLFNBQVM7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FDMUMsY0FBYyxDQUFDLHdCQUF3QixFQUFFLENBQzFDLENBQUM7UUFDRixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxxQ0FBNEIsQ0FDbEUsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksMkNBQW9CLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsbUJBQW1CO1lBQ3RCLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUQsS0FBSyxNQUFNLGFBQWEsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxxQkFBcUIsQ0FDckQsSUFBSSxDQUFDLGVBQWUsRUFDcEIsY0FBYyxFQUNkLGFBQWEsRUFDYixVQUFVLENBQ1gsQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBUyxFQUFFLG1DQUEwQixDQUFDO1NBQ3JFLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU87WUFDTCxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLDRCQUE0QixDQUMvQiwyQkFBa0IsRUFDbEIsaUNBQXdCLENBQ3pCO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHFCQUFZLEVBQUUsaUNBQXdCLENBQUM7U0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksa0NBQXNCLENBQUM7WUFDaEMsTUFBTSxFQUFFLHFCQUFxQjtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDRCQUE0QixDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3hELE9BQU8sSUFBSSw0QkFBVyxDQUFDO1lBQ3JCLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSyxFQUFFLDJCQUEyQixHQUFHLHNDQUFlLEdBQUcsR0FBRztZQUMxRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDaEMsU0FBUyxFQUFFLGdDQUF1QjtZQUNsQyxJQUFJLEVBQUUsZ0NBQWUsQ0FBQyxHQUFHO1lBQ3pCLGlEQUFpRDtZQUNqRCxNQUFNLEVBQUUsb0NBQWE7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3BELE9BQU8sSUFBSSxrQ0FBaUIsQ0FBQztZQUMzQixLQUFLO1lBQ0wsTUFBTTtZQUNOLEtBQUssRUFBRSxjQUFjLEdBQUcsc0NBQWUsR0FBRyxHQUFHO1lBQzdDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDL0IsYUFBYSxFQUFFLEtBQUs7WUFDcEIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixpREFBaUQ7WUFDakQsTUFBTSxFQUFFLG9DQUFhO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBNUZILDhDQTZGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEdyYXBoV2lkZ2V0LFxuICBHcmFwaFdpZGdldFZpZXcsXG4gIElNZXRyaWMsXG4gIElXaWRnZXQsXG4gIFNpbmdsZVZhbHVlV2lkZ2V0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuaW1wb3J0IHtcbiAgQmlsbGluZ0N1cnJlbmN5LFxuICBCaWxsaW5nTWV0cmljRmFjdG9yeSxcbiAgQmlsbGluZ1JlZ2lvbixcbn0gZnJvbSBcIi4vQmlsbGluZ01ldHJpY0ZhY3RvcnlcIjtcbmltcG9ydCB7XG4gIEFsYXJtRmFjdG9yeSxcbiAgQW5vbWFseURldGVjdGluZ0FsYXJtRmFjdG9yeSxcbiAgQW5vbWFseURldGVjdGlvblRocmVzaG9sZCxcbiAgQmFzZU1vbml0b3JpbmdQcm9wcyxcbiAgQ3VycmVuY3lBeGlzVXNkRnJvbVplcm8sXG4gIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCxcbiAgRGVmYXVsdFN1bW1hcnlXaWRnZXRIZWlnaHQsXG4gIEZ1bGxXaWR0aCxcbiAgTWV0cmljV2l0aEFsYXJtU3VwcG9ydCxcbiAgTW9uaXRvcmluZyxcbiAgTW9uaXRvcmluZ1Njb3BlLFxuICBRdWFydGVyV2lkdGgsXG4gIFRocmVlUXVhcnRlcnNXaWR0aCxcbn0gZnJvbSBcIi4uLy4uL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgTW9uaXRvcmluZ0hlYWRlcldpZGdldCxcbiAgTW9uaXRvcmluZ05hbWluZ1N0cmF0ZWd5LFxufSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ01vbml0b3JpbmdPcHRpb25zIGV4dGVuZHMgQmFzZU1vbml0b3JpbmdQcm9wcyB7XG4gIHJlYWRvbmx5IGFkZFRvdGFsQ29zdEFub21hbHlBbGFybT86IFJlY29yZDxzdHJpbmcsIEFub21hbHlEZXRlY3Rpb25UaHJlc2hvbGQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJpbGxpbmdNb25pdG9yaW5nUHJvcHMgZXh0ZW5kcyBCaWxsaW5nTW9uaXRvcmluZ09wdGlvbnMge31cblxuZXhwb3J0IGNsYXNzIEJpbGxpbmdNb25pdG9yaW5nIGV4dGVuZHMgTW9uaXRvcmluZyB7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgYWxhcm1GYWN0b3J5OiBBbGFybUZhY3Rvcnk7XG4gIHJlYWRvbmx5IGFub21hbHlEZXRlY3RpbmdBbGFybUZhY3Rvcnk6IEFub21hbHlEZXRlY3RpbmdBbGFybUZhY3Rvcnk7XG5cbiAgcmVhZG9ubHkgY29zdEJ5U2VydmljZU1ldHJpYzogSU1ldHJpYztcbiAgcmVhZG9ubHkgdG90YWxDb3N0TWV0cmljOiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBNb25pdG9yaW5nU2NvcGUsIHByb3BzOiBCaWxsaW5nTW9uaXRvcmluZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUpO1xuXG4gICAgY29uc3QgbmFtaW5nU3RyYXRlZ3kgPSBuZXcgTW9uaXRvcmluZ05hbWluZ1N0cmF0ZWd5KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZmFsbGJhY2tDb25zdHJ1Y3ROYW1lOiBcIkJpbGxpbmdcIixcbiAgICB9KTtcbiAgICB0aGlzLnRpdGxlID0gbmFtaW5nU3RyYXRlZ3kucmVzb2x2ZUh1bWFuUmVhZGFibGVOYW1lKCk7XG4gICAgdGhpcy5hbGFybUZhY3RvcnkgPSBzY29wZS5jcmVhdGVBbGFybUZhY3RvcnkoXG4gICAgICBuYW1pbmdTdHJhdGVneS5yZXNvbHZlQWxhcm1GcmllbmRseU5hbWUoKSxcbiAgICApO1xuICAgIHRoaXMuYW5vbWFseURldGVjdGluZ0FsYXJtRmFjdG9yeSA9IG5ldyBBbm9tYWx5RGV0ZWN0aW5nQWxhcm1GYWN0b3J5KFxuICAgICAgdGhpcy5hbGFybUZhY3RvcnksXG4gICAgKTtcbiAgICBjb25zdCBtZXRyaWNGYWN0b3J5ID0gbmV3IEJpbGxpbmdNZXRyaWNGYWN0b3J5KCk7XG4gICAgdGhpcy5jb3N0QnlTZXJ2aWNlTWV0cmljID1cbiAgICAgIG1ldHJpY0ZhY3RvcnkubWV0cmljU2VhcmNoVG9wQ29zdEJ5U2VydmljZUluVXNkKCk7XG4gICAgdGhpcy50b3RhbENvc3RNZXRyaWMgPSBtZXRyaWNGYWN0b3J5Lm1ldHJpY1RvdGFsQ29zdEluVXNkKCk7XG5cbiAgICBmb3IgKGNvbnN0IGRpc2FtYmlndWF0b3IgaW4gcHJvcHMuYWRkVG90YWxDb3N0QW5vbWFseUFsYXJtKSB7XG4gICAgICBjb25zdCBhbGFybVByb3BzID0gcHJvcHMuYWRkVG90YWxDb3N0QW5vbWFseUFsYXJtW2Rpc2FtYmlndWF0b3JdO1xuICAgICAgY29uc3QgY3JlYXRlZEFsYXJtID1cbiAgICAgICAgdGhpcy5hbm9tYWx5RGV0ZWN0aW5nQWxhcm1GYWN0b3J5LmFkZEFsYXJtV2hlbk91dE9mQmFuZChcbiAgICAgICAgICB0aGlzLnRvdGFsQ29zdE1ldHJpYyxcbiAgICAgICAgICBcIkNvc3QtQW5vbWFseVwiLFxuICAgICAgICAgIGRpc2FtYmlndWF0b3IsXG4gICAgICAgICAgYWxhcm1Qcm9wcyxcbiAgICAgICAgKTtcbiAgICAgIHRoaXMuYWRkQWxhcm0oY3JlYXRlZEFsYXJtKTtcbiAgICB9XG5cbiAgICBwcm9wcy51c2VDcmVhdGVkQWxhcm1zPy5jb25zdW1lKHRoaXMuY3JlYXRlZEFsYXJtcygpKTtcbiAgfVxuXG4gIHN1bW1hcnlXaWRnZXRzKCk6IElXaWRnZXRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY3JlYXRlVGl0bGVXaWRnZXQoKSxcbiAgICAgIHRoaXMuY3JlYXRlVG90YWxDaGFyZ2VzV2lkZ2V0KEZ1bGxXaWR0aCwgRGVmYXVsdFN1bW1hcnlXaWRnZXRIZWlnaHQpLFxuICAgIF07XG4gIH1cblxuICB3aWRnZXRzKCk6IElXaWRnZXRbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY3JlYXRlVGl0bGVXaWRnZXQoKSxcbiAgICAgIHRoaXMuY3JlYXRlQ2hhcmdlc0J5U2VydmljZVdpZGdldChcbiAgICAgICAgVGhyZWVRdWFydGVyc1dpZHRoLFxuICAgICAgICBEZWZhdWx0R3JhcGhXaWRnZXRIZWlnaHQsXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUb3RhbENoYXJnZXNXaWRnZXQoUXVhcnRlcldpZHRoLCBEZWZhdWx0R3JhcGhXaWRnZXRIZWlnaHQpLFxuICAgIF07XG4gIH1cblxuICBjcmVhdGVUaXRsZVdpZGdldCgpIHtcbiAgICByZXR1cm4gbmV3IE1vbml0b3JpbmdIZWFkZXJXaWRnZXQoe1xuICAgICAgZmFtaWx5OiBcIkFXUyBBY2NvdW50IEJpbGxpbmdcIixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQ2hhcmdlc0J5U2VydmljZVdpZGdldCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB0aXRsZTogXCJNb3N0IEV4cGVuc2l2ZSBTZXJ2aWNlcyAoXCIgKyBCaWxsaW5nQ3VycmVuY3kgKyBcIilcIixcbiAgICAgIGxlZnQ6IFt0aGlzLmNvc3RCeVNlcnZpY2VNZXRyaWNdLFxuICAgICAgbGVmdFlBeGlzOiBDdXJyZW5jeUF4aXNVc2RGcm9tWmVybyxcbiAgICAgIHZpZXc6IEdyYXBoV2lkZ2V0Vmlldy5CQVIsXG4gICAgICAvLyBiaWxsaW5nIGlzIGdsb2JhbCBidXQgcmVzaWRlcyBpbiBzaW5nbGUgcmVnaW9uXG4gICAgICByZWdpb246IEJpbGxpbmdSZWdpb24sXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVUb3RhbENoYXJnZXNXaWRnZXQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFNpbmdsZVZhbHVlV2lkZ2V0KHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiVG90YWwgQ29zdCAoXCIgKyBCaWxsaW5nQ3VycmVuY3kgKyBcIilcIixcbiAgICAgIG1ldHJpY3M6IFt0aGlzLnRvdGFsQ29zdE1ldHJpY10sXG4gICAgICBmdWxsUHJlY2lzaW9uOiBmYWxzZSxcbiAgICAgIHNldFBlcmlvZFRvVGltZVJhbmdlOiBmYWxzZSxcbiAgICAgIC8vIGJpbGxpbmcgaXMgZ2xvYmFsIGJ1dCByZXNpZGVzIGluIHNpbmdsZSByZWdpb25cbiAgICAgIHJlZ2lvbjogQmlsbGluZ1JlZ2lvbixcbiAgICB9KTtcbiAgfVxufVxuIl19