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: "9.15.2" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmlsbGluZ01vbml0b3JpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJCaWxsaW5nTW9uaXRvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtEQU1vQztBQUVwQyxpRUFJZ0M7QUFDaEMseUNBY3NCO0FBQ3RCLCtDQUd5QjtBQVF6QixNQUFhLGlCQUFrQixTQUFRLG1CQUFVO0lBUy9DLFlBQVksS0FBc0IsRUFBRSxLQUE2QjtRQUMvRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixNQUFNLGNBQWMsR0FBRyxJQUFJLG9DQUF3QixDQUFDO1lBQ2xELEdBQUcsS0FBSztZQUNSLHFCQUFxQixFQUFFLFNBQVM7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FDMUMsY0FBYyxDQUFDLHdCQUF3QixFQUFFLENBQzFDLENBQUM7UUFDRixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxxQ0FBNEIsQ0FDbEUsSUFBSSxDQUFDLFlBQVksQ0FDbEIsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksMkNBQW9CLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsbUJBQW1CO1lBQ3RCLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUQsS0FBSyxNQUFNLGFBQWEsSUFBSSxLQUFLLENBQUMsd0JBQXdCLEVBQUU7WUFDMUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsNEJBQTRCLENBQUMscUJBQXFCLENBQ3JELElBQUksQ0FBQyxlQUFlLEVBQ3BCLGNBQWMsRUFDZCxhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdCO1FBRUQsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU87WUFDTCxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGtCQUFTLEVBQUUsbUNBQTBCLENBQUM7U0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTztZQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsNEJBQTRCLENBQy9CLDJCQUFrQixFQUNsQixpQ0FBd0IsQ0FDekI7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMscUJBQVksRUFBRSxpQ0FBd0IsQ0FBQztTQUN0RSxDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxrQ0FBc0IsQ0FBQztZQUNoQyxNQUFNLEVBQUUscUJBQXFCO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDeEQsT0FBTyxJQUFJLDRCQUFXLENBQUM7WUFDckIsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLLEVBQUUsMkJBQTJCLEdBQUcsc0NBQWUsR0FBRyxHQUFHO1lBQzFELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUNoQyxTQUFTLEVBQUUsZ0NBQXVCO1lBQ2xDLElBQUksRUFBRSxnQ0FBZSxDQUFDLEdBQUc7WUFDekIsaURBQWlEO1lBQ2pELE1BQU0sRUFBRSxvQ0FBYTtTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDcEQsT0FBTyxJQUFJLGtDQUFpQixDQUFDO1lBQzNCLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSyxFQUFFLGNBQWMsR0FBRyxzQ0FBZSxHQUFHLEdBQUc7WUFDN0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUMvQixhQUFhLEVBQUUsS0FBSztZQUNwQixvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLGlEQUFpRDtZQUNqRCxNQUFNLEVBQUUsb0NBQWE7U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1RkgsOENBNkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgR3JhcGhXaWRnZXQsXG4gIEdyYXBoV2lkZ2V0VmlldyxcbiAgSU1ldHJpYyxcbiAgSVdpZGdldCxcbiAgU2luZ2xlVmFsdWVXaWRnZXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuXG5pbXBvcnQge1xuICBCaWxsaW5nQ3VycmVuY3ksXG4gIEJpbGxpbmdNZXRyaWNGYWN0b3J5LFxuICBCaWxsaW5nUmVnaW9uLFxufSBmcm9tIFwiLi9CaWxsaW5nTWV0cmljRmFjdG9yeVwiO1xuaW1wb3J0IHtcbiAgQWxhcm1GYWN0b3J5LFxuICBBbm9tYWx5RGV0ZWN0aW5nQWxhcm1GYWN0b3J5LFxuICBBbm9tYWx5RGV0ZWN0aW9uVGhyZXNob2xkLFxuICBCYXNlTW9uaXRvcmluZ1Byb3BzLFxuICBDdXJyZW5jeUF4aXNVc2RGcm9tWmVybyxcbiAgRGVmYXVsdEdyYXBoV2lkZ2V0SGVpZ2h0LFxuICBEZWZhdWx0U3VtbWFyeVdpZGdldEhlaWdodCxcbiAgRnVsbFdpZHRoLFxuICBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0LFxuICBNb25pdG9yaW5nLFxuICBNb25pdG9yaW5nU2NvcGUsXG4gIFF1YXJ0ZXJXaWR0aCxcbiAgVGhyZWVRdWFydGVyc1dpZHRoLFxufSBmcm9tIFwiLi4vLi4vY29tbW9uXCI7XG5pbXBvcnQge1xuICBNb25pdG9yaW5nSGVhZGVyV2lkZ2V0LFxuICBNb25pdG9yaW5nTmFtaW5nU3RyYXRlZ3ksXG59IGZyb20gXCIuLi8uLi9kYXNoYm9hcmRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCaWxsaW5nTW9uaXRvcmluZ09wdGlvbnMgZXh0ZW5kcyBCYXNlTW9uaXRvcmluZ1Byb3BzIHtcbiAgcmVhZG9ubHkgYWRkVG90YWxDb3N0QW5vbWFseUFsYXJtPzogUmVjb3JkPHN0cmluZywgQW5vbWFseURldGVjdGlvblRocmVzaG9sZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmlsbGluZ01vbml0b3JpbmdQcm9wcyBleHRlbmRzIEJpbGxpbmdNb25pdG9yaW5nT3B0aW9ucyB7fVxuXG5leHBvcnQgY2xhc3MgQmlsbGluZ01vbml0b3JpbmcgZXh0ZW5kcyBNb25pdG9yaW5nIHtcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcblxuICByZWFkb25seSBhbGFybUZhY3Rvcnk6IEFsYXJtRmFjdG9yeTtcbiAgcmVhZG9ubHkgYW5vbWFseURldGVjdGluZ0FsYXJtRmFjdG9yeTogQW5vbWFseURldGVjdGluZ0FsYXJtRmFjdG9yeTtcblxuICByZWFkb25seSBjb3N0QnlTZXJ2aWNlTWV0cmljOiBJTWV0cmljO1xuICByZWFkb25seSB0b3RhbENvc3RNZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IE1vbml0b3JpbmdTY29wZSwgcHJvcHM6IEJpbGxpbmdNb25pdG9yaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSk7XG5cbiAgICBjb25zdCBuYW1pbmdTdHJhdGVneSA9IG5ldyBNb25pdG9yaW5nTmFtaW5nU3RyYXRlZ3koe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBmYWxsYmFja0NvbnN0cnVjdE5hbWU6IFwiQmlsbGluZ1wiLFxuICAgIH0pO1xuICAgIHRoaXMudGl0bGUgPSBuYW1pbmdTdHJhdGVneS5yZXNvbHZlSHVtYW5SZWFkYWJsZU5hbWUoKTtcbiAgICB0aGlzLmFsYXJtRmFjdG9yeSA9IHNjb3BlLmNyZWF0ZUFsYXJtRmFjdG9yeShcbiAgICAgIG5hbWluZ1N0cmF0ZWd5LnJlc29sdmVBbGFybUZyaWVuZGx5TmFtZSgpLFxuICAgICk7XG4gICAgdGhpcy5hbm9tYWx5RGV0ZWN0aW5nQWxhcm1GYWN0b3J5ID0gbmV3IEFub21hbHlEZXRlY3RpbmdBbGFybUZhY3RvcnkoXG4gICAgICB0aGlzLmFsYXJtRmFjdG9yeSxcbiAgICApO1xuICAgIGNvbnN0IG1ldHJpY0ZhY3RvcnkgPSBuZXcgQmlsbGluZ01ldHJpY0ZhY3RvcnkoKTtcbiAgICB0aGlzLmNvc3RCeVNlcnZpY2VNZXRyaWMgPVxuICAgICAgbWV0cmljRmFjdG9yeS5tZXRyaWNTZWFyY2hUb3BDb3N0QnlTZXJ2aWNlSW5Vc2QoKTtcbiAgICB0aGlzLnRvdGFsQ29zdE1ldHJpYyA9IG1ldHJpY0ZhY3RvcnkubWV0cmljVG90YWxDb3N0SW5Vc2QoKTtcblxuICAgIGZvciAoY29uc3QgZGlzYW1iaWd1YXRvciBpbiBwcm9wcy5hZGRUb3RhbENvc3RBbm9tYWx5QWxhcm0pIHtcbiAgICAgIGNvbnN0IGFsYXJtUHJvcHMgPSBwcm9wcy5hZGRUb3RhbENvc3RBbm9tYWx5QWxhcm1bZGlzYW1iaWd1YXRvcl07XG4gICAgICBjb25zdCBjcmVhdGVkQWxhcm0gPVxuICAgICAgICB0aGlzLmFub21hbHlEZXRlY3RpbmdBbGFybUZhY3RvcnkuYWRkQWxhcm1XaGVuT3V0T2ZCYW5kKFxuICAgICAgICAgIHRoaXMudG90YWxDb3N0TWV0cmljLFxuICAgICAgICAgIFwiQ29zdC1Bbm9tYWx5XCIsXG4gICAgICAgICAgZGlzYW1iaWd1YXRvcixcbiAgICAgICAgICBhbGFybVByb3BzLFxuICAgICAgICApO1xuICAgICAgdGhpcy5hZGRBbGFybShjcmVhdGVkQWxhcm0pO1xuICAgIH1cblxuICAgIHByb3BzLnVzZUNyZWF0ZWRBbGFybXM/LmNvbnN1bWUodGhpcy5jcmVhdGVkQWxhcm1zKCkpO1xuICB9XG5cbiAgc3VtbWFyeVdpZGdldHMoKTogSVdpZGdldFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5jcmVhdGVUaXRsZVdpZGdldCgpLFxuICAgICAgdGhpcy5jcmVhdGVUb3RhbENoYXJnZXNXaWRnZXQoRnVsbFdpZHRoLCBEZWZhdWx0U3VtbWFyeVdpZGdldEhlaWdodCksXG4gICAgXTtcbiAgfVxuXG4gIHdpZGdldHMoKTogSVdpZGdldFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5jcmVhdGVUaXRsZVdpZGdldCgpLFxuICAgICAgdGhpcy5jcmVhdGVDaGFyZ2VzQnlTZXJ2aWNlV2lkZ2V0KFxuICAgICAgICBUaHJlZVF1YXJ0ZXJzV2lkdGgsXG4gICAgICAgIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCxcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRvdGFsQ2hhcmdlc1dpZGdldChRdWFydGVyV2lkdGgsIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCksXG4gICAgXTtcbiAgfVxuXG4gIGNyZWF0ZVRpdGxlV2lkZ2V0KCkge1xuICAgIHJldHVybiBuZXcgTW9uaXRvcmluZ0hlYWRlcldpZGdldCh7XG4gICAgICBmYW1pbHk6IFwiQVdTIEFjY291bnQgQmlsbGluZ1wiLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVDaGFyZ2VzQnlTZXJ2aWNlV2lkZ2V0KHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBHcmFwaFdpZGdldCh7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodCxcbiAgICAgIHRpdGxlOiBcIk1vc3QgRXhwZW5zaXZlIFNlcnZpY2VzIChcIiArIEJpbGxpbmdDdXJyZW5jeSArIFwiKVwiLFxuICAgICAgbGVmdDogW3RoaXMuY29zdEJ5U2VydmljZU1ldHJpY10sXG4gICAgICBsZWZ0WUF4aXM6IEN1cnJlbmN5QXhpc1VzZEZyb21aZXJvLFxuICAgICAgdmlldzogR3JhcGhXaWRnZXRWaWV3LkJBUixcbiAgICAgIC8vIGJpbGxpbmcgaXMgZ2xvYmFsIGJ1dCByZXNpZGVzIGluIHNpbmdsZSByZWdpb25cbiAgICAgIHJlZ2lvbjogQmlsbGluZ1JlZ2lvbixcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVRvdGFsQ2hhcmdlc1dpZGdldCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgU2luZ2xlVmFsdWVXaWRnZXQoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB0aXRsZTogXCJUb3RhbCBDb3N0IChcIiArIEJpbGxpbmdDdXJyZW5jeSArIFwiKVwiLFxuICAgICAgbWV0cmljczogW3RoaXMudG90YWxDb3N0TWV0cmljXSxcbiAgICAgIGZ1bGxQcmVjaXNpb246IGZhbHNlLFxuICAgICAgc2V0UGVyaW9kVG9UaW1lUmFuZ2U6IGZhbHNlLFxuICAgICAgLy8gYmlsbGluZyBpcyBnbG9iYWwgYnV0IHJlc2lkZXMgaW4gc2luZ2xlIHJlZ2lvblxuICAgICAgcmVnaW9uOiBCaWxsaW5nUmVnaW9uLFxuICAgIH0pO1xuICB9XG59XG4iXX0=