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

120 lines 21.9 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultDashboardFactory = exports.DefaultDashboards = 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 constructs_1 = require("constructs"); const BitmapDashboard_1 = require("./BitmapDashboard"); const DashboardRenderingPreference_1 = require("./DashboardRenderingPreference"); const DashboardWithBitmapCopy_1 = require("./DashboardWithBitmapCopy"); var DefaultDashboards; (function (DefaultDashboards) { DefaultDashboards["SUMMARY"] = "Summary"; DefaultDashboards["DETAIL"] = "Detail"; DefaultDashboards["ALARMS"] = "Alarms"; })(DefaultDashboards = exports.DefaultDashboards || (exports.DefaultDashboards = {})); class DefaultDashboardFactory extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); // Dynamic Dashboard Fields this.dashboards = {}; const createDashboard = props.createDashboard ?? true; const createSummaryDashboard = props.createSummaryDashboard ?? false; const createAlarmDashboard = props.createAlarmDashboard ?? false; const shouldCreateDashboards = createDashboard || createAlarmDashboard || createSummaryDashboard; if (shouldCreateDashboards && !props.dashboardNamePrefix) { throw Error("A non-empty dashboardNamePrefix is required if dashboards are being created"); } const renderingPreference = props.renderingPreference ?? DashboardRenderingPreference_1.DashboardRenderingPreference.INTERACTIVE_ONLY; const detailStart = "-" + (props.detailDashboardRange ?? aws_cdk_lib_1.Duration.hours(8)).toIsoString(); const summaryStart = "-" + (props.summaryDashboardRange ?? aws_cdk_lib_1.Duration.days(14)).toIsoString(); let anyDashboardCreated = false; if (createDashboard) { anyDashboardCreated = true; this.dashboard = this.createDashboard(renderingPreference, "Dashboard", { dashboardName: props.dashboardNamePrefix, start: detailStart, periodOverride: props.detailDashboardPeriodOverride ?? aws_cloudwatch_1.PeriodOverride.INHERIT, variables: props.variables, }); this.dashboards[DefaultDashboards.DETAIL] = this.dashboard; } if (createSummaryDashboard) { anyDashboardCreated = true; this.summaryDashboard = this.createDashboard(renderingPreference, "SummaryDashboard", { dashboardName: `${props.dashboardNamePrefix}-Summary`, start: summaryStart, periodOverride: props.summaryDashboardPeriodOverride ?? aws_cloudwatch_1.PeriodOverride.INHERIT, variables: props.variables, }); this.dashboards[DefaultDashboards.SUMMARY] = this.summaryDashboard; } if (createAlarmDashboard) { anyDashboardCreated = true; this.alarmDashboard = this.createDashboard(renderingPreference, "AlarmDashboard", { dashboardName: `${props.dashboardNamePrefix}-Alarms`, start: detailStart, periodOverride: props.detailDashboardPeriodOverride ?? aws_cloudwatch_1.PeriodOverride.INHERIT, variables: props.variables, }); this.dashboards[DefaultDashboards.ALARMS] = this.alarmDashboard; } this.anyDashboardCreated = anyDashboardCreated; } addSegment(props) { if ((props.overrideProps?.addToDetailDashboard ?? true) && this.dashboard) { this.dashboard.addWidgets(...props.segment.widgets()); } if ((props.overrideProps?.addToSummaryDashboard ?? true) && this.summaryDashboard) { this.summaryDashboard.addWidgets(...props.segment.summaryWidgets()); } if ((props.overrideProps?.addToAlarmDashboard ?? true) && this.alarmDashboard) { this.alarmDashboard.addWidgets(...props.segment.alarmWidgets()); } } addDynamicSegment(segment) { this.dashboard?.addWidgets(...segment.widgetsForDashboard(DefaultDashboards.DETAIL)); this.summaryDashboard?.addWidgets(...segment.widgetsForDashboard(DefaultDashboards.SUMMARY)); this.alarmDashboard?.addWidgets(...segment.widgetsForDashboard(DefaultDashboards.ALARMS)); } createDashboard(renderingPreference, id, props) { switch (renderingPreference) { case DashboardRenderingPreference_1.DashboardRenderingPreference.INTERACTIVE_ONLY: return new aws_cloudwatch_1.Dashboard(this, id, props); case DashboardRenderingPreference_1.DashboardRenderingPreference.BITMAP_ONLY: return new BitmapDashboard_1.BitmapDashboard(this, id, props); case DashboardRenderingPreference_1.DashboardRenderingPreference.INTERACTIVE_AND_BITMAP: return new DashboardWithBitmapCopy_1.DashboardWithBitmapCopy(this, id, props); } } createdDashboard() { return this.dashboard; } createdSummaryDashboard() { return this.summaryDashboard; } createdAlarmDashboard() { return this.alarmDashboard; } getDashboard(name) { switch (name) { case DefaultDashboards.SUMMARY: return this.summaryDashboard; case DefaultDashboards.DETAIL: return this.dashboard; case DefaultDashboards.ALARMS: return this.alarmDashboard; default: throw new Error("Unexpected dashboard name!"); } } } exports.DefaultDashboardFactory = DefaultDashboardFactory; _a = JSII_RTTI_SYMBOL_1; DefaultDashboardFactory[_a] = { fqn: "cdk-monitoring-constructs.DefaultDashboardFactory", version: "9.15.2" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhc2hib2FyZEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEZWZhdWx0RGFzaGJvYXJkRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QywrREFLb0M7QUFDcEMsMkNBQXVDO0FBQ3ZDLHVEQUFvRDtBQUNwRCxpRkFBOEU7QUFDOUUsdUVBQW9FO0FBbUVwRSxJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsc0NBQWlCLENBQUE7SUFDakIsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSTVCO0FBRUQsTUFBYSx1QkFDWCxTQUFRLHNCQUFTO0lBWWpCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUpuQiwyQkFBMkI7UUFDbEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFLbEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDO1FBQ3JFLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUMxQixlQUFlLElBQUksb0JBQW9CLElBQUksc0JBQXNCLENBQUM7UUFFcEUsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtZQUN4RCxNQUFNLEtBQUssQ0FDVCw2RUFBNkUsQ0FDOUUsQ0FBQztTQUNIO1FBRUQsTUFBTSxtQkFBbUIsR0FDdkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QiwyREFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxNQUFNLFdBQVcs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QUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN4QixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDOztBQXRKSCwwREF1SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkLFxuICBEYXNoYm9hcmRQcm9wcyxcbiAgUGVyaW9kT3ZlcnJpZGUsXG4gIElWYXJpYWJsZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQml0bWFwRGFzaGJvYXJkIH0gZnJvbSBcIi4vQml0bWFwRGFzaGJvYXJkXCI7XG5pbXBvcnQgeyBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlIH0gZnJvbSBcIi4vRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZVwiO1xuaW1wb3J0IHsgRGFzaGJvYXJkV2l0aEJpdG1hcENvcHkgfSBmcm9tIFwiLi9EYXNoYm9hcmRXaXRoQml0bWFwQ29weVwiO1xuaW1wb3J0IHsgSUR5bmFtaWNEYXNoYm9hcmRTZWdtZW50IH0gZnJvbSBcIi4vRHluYW1pY0Rhc2hib2FyZFNlZ21lbnRcIjtcbmltcG9ydCB7IElEYXNoYm9hcmRGYWN0b3J5LCBJRGFzaGJvYXJkRmFjdG9yeVByb3BzIH0gZnJvbSBcIi4vSURhc2hib2FyZEZhY3RvcnlcIjtcbmltcG9ydCB7IElEeW5hbWljRGFzaGJvYXJkRmFjdG9yeSB9IGZyb20gXCIuL0lEeW5hbWljRGFzaGJvYXJkRmFjdG9yeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JpbmdEYXNoYm9hcmRzUHJvcHMge1xuICAvKipcbiAgICogUHJlZml4IGFkZGVkIHRvIGVhY2ggZGFzaGJvYXJkIG5hbWUuXG4gICAqIFRoaXMgYWxsb3dzIHRvIGhhdmUgYWxsIGRhc2hib2FyZHMgc29ydGVkIGNsb3NlIHRvIGVhY2ggb3RoZXIgYW5kIGFsc28gc2VwYXJhdGUgbXVsdGlwbGUgbW9uaXRvcmluZyBmYWNhZGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGFzaGJvYXJkTmFtZVByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgdGhlIGRldGFpbCBkYXNoYm9hcmQgKGFuZCBvdGhlciBhdXhpbGlhcnkgZGFzaGJvYXJkcykuXG4gICAqIEBkZWZhdWx0IC0gOCBob3Vyc1xuICAgKiBAc2VlIERlZmF1bHREZXRhaWxEYXNoYm9hcmRSYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlsRGFzaGJvYXJkUmFuZ2U/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFBlcmlvZCBvdmVycmlkZSBmb3IgdGhlIGRldGFpbCBkYXNoYm9hcmQgKGFuZCBvdGhlciBhdXhpbGlhcnkgZGFzaGJvYXJkcykuXG4gICAqIEBkZWZhdWx0IC0gcmVzcGVjdCBpbmRpdmlkdWFsIGdyYXBocyAoUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVClcbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbERhc2hib2FyZFBlcmlvZE92ZXJyaWRlPzogUGVyaW9kT3ZlcnJpZGU7XG4gIC8qKlxuICAgKiBSYW5nZSBvZiB0aGUgc3VtbWFyeSBkYXNoYm9hcmQuXG4gICAqIEBkZWZhdWx0IC0gMTQgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZFJhbmdlPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBQZXJpb2Qgb3ZlcnJpZGUgZm9yIHRoZSBzdW1tYXJ5IGRhc2hib2FyZC5cbiAgICogQGRlZmF1bHQgLSByZXNwZWN0IGluZGl2aWR1YWwgZ3JhcGhzIChQZXJpb2RPdmVycmlkZS5JTkhFUklUKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZFBlcmlvZE92ZXJyaWRlPzogUGVyaW9kT3ZlcnJpZGU7XG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGVmYXVsdCBkYXNoYm9hcmQgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb24gb3RoZXIgY3JlYXRlIGRhc2hib2FyZCBmbGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVEYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN1bW1hcnkgZGFzaGJvYXJkIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9uIG90aGVyIGNyZWF0ZSBkYXNoYm9hcmQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFsYXJtIGRhc2hib2FyZCBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogVGhpcyBpcyBpbmRlcGVuZGVudCBvbiBvdGhlciBjcmVhdGUgZGFzaGJvYXJkIGZsYWdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVBbGFybURhc2hib2FyZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEYXNoYm9hcmQgcmVuZGVyaW5nIHByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZXG4gICAqL1xuICByZWFkb25seSByZW5kZXJpbmdQcmVmZXJlbmNlPzogRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZTtcbiAgLyoqXG4gICAqIERhc2hib2FyZCB2YXJpYWJsZXMgdG8gaW5jbHVkZSBpbiB0aGUgZGFzaGJvYXJkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IElWYXJpYWJsZVtdO1xufVxuXG5leHBvcnQgZW51bSBEZWZhdWx0RGFzaGJvYXJkcyB7XG4gIFNVTU1BUlkgPSBcIlN1bW1hcnlcIixcbiAgREVUQUlMID0gXCJEZXRhaWxcIixcbiAgQUxBUk1TID0gXCJBbGFybXNcIixcbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHREYXNoYm9hcmRGYWN0b3J5XG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSURhc2hib2FyZEZhY3RvcnksIElEeW5hbWljRGFzaGJvYXJkRmFjdG9yeVxue1xuICAvLyBMZWdhY3kgRGFzaGJvYXJkIEZpZWxkc1xuICByZWFkb25seSBkYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IGFsYXJtRGFzaGJvYXJkPzogRGFzaGJvYXJkO1xuICByZWFkb25seSBhbnlEYXNoYm9hcmRDcmVhdGVkOiBib29sZWFuO1xuXG4gIC8vIER5bmFtaWMgRGFzaGJvYXJkIEZpZWxkc1xuICByZWFkb25seSBkYXNoYm9hcmRzOiBSZWNvcmQ8c3RyaW5nLCBEYXNoYm9hcmQ+ID0ge307XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1vbml0b3JpbmdEYXNoYm9hcmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY3JlYXRlRGFzaGJvYXJkID0gcHJvcHMuY3JlYXRlRGFzaGJvYXJkID8/IHRydWU7XG4gICAgY29uc3QgY3JlYXRlU3VtbWFyeURhc2hib2FyZCA9IHByb3BzLmNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQgPz8gZmFsc2U7XG4gICAgY29uc3QgY3JlYXRlQWxhcm1EYXNoYm9hcmQgPSBwcm9wcy5jcmVhdGVBbGFybURhc2hib2FyZCA/PyBmYWxzZTtcbiAgICBjb25zdCBzaG91bGRDcmVhdGVEYXNoYm9hcmRzID1cbiAgICAgIGNyZWF0ZURhc2hib2FyZCB8fCBjcmVhdGVBbGFybURhc2hib2FyZCB8fCBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkO1xuXG4gICAgaWYgKHNob3VsZENyZWF0ZURhc2hib2FyZHMgJiYgIXByb3BzLmRhc2hib2FyZE5hbWVQcmVmaXgpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkEgbm9uLWVtcHR5IGRhc2hib2FyZE5hbWVQcmVmaXggaXMgcmVxdWlyZWQgaWYgZGFzaGJvYXJkcyBhcmUgYmVpbmcgY3JlYXRlZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJpbmdQcmVmZXJlbmNlID1cbiAgICAgIHByb3BzLnJlbmRlcmluZ1ByZWZlcmVuY2UgPz9cbiAgICAgIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWTtcbiAgICBjb25zdCBkZXRhaWxTdGFydDogc3RyaW5nID1cbiAgICAgIFwiLVwiICsgKHByb3BzLmRldGFpbERhc2hib2FyZFJhbmdlID8/IER1cmF0aW9uLmhvdXJzKDgpKS50b0lzb1N0cmluZygpO1xuICAgIGNvbnN0IHN1bW1hcnlTdGFydDogc3RyaW5nID1cbiAgICAgIFwiLVwiICsgKHByb3BzLnN1bW1hcnlEYXNoYm9hcmRSYW5nZSA/PyBEdXJhdGlvbi5kYXlzKDE0KSkudG9Jc29TdHJpbmcoKTtcbiAgICBsZXQgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGNyZWF0ZURhc2hib2FyZCkge1xuICAgICAgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMuY3JlYXRlRGFzaGJvYXJkKHJlbmRlcmluZ1ByZWZlcmVuY2UsIFwiRGFzaGJvYXJkXCIsIHtcbiAgICAgICAgZGFzaGJvYXJkTmFtZTogcHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeCxcbiAgICAgICAgc3RhcnQ6IGRldGFpbFN0YXJ0LFxuICAgICAgICBwZXJpb2RPdmVycmlkZTpcbiAgICAgICAgICBwcm9wcy5kZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICB2YXJpYWJsZXM6IHByb3BzLnZhcmlhYmxlcyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXNoYm9hcmRzW0RlZmF1bHREYXNoYm9hcmRzLkRFVEFJTF0gPSB0aGlzLmRhc2hib2FyZDtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQpIHtcbiAgICAgIGFueURhc2hib2FyZENyZWF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zdW1tYXJ5RGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQoXG4gICAgICAgIHJlbmRlcmluZ1ByZWZlcmVuY2UsXG4gICAgICAgIFwiU3VtbWFyeURhc2hib2FyZFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFzaGJvYXJkTmFtZTogYCR7cHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeH0tU3VtbWFyeWAsXG4gICAgICAgICAgc3RhcnQ6IHN1bW1hcnlTdGFydCxcbiAgICAgICAgICBwZXJpb2RPdmVycmlkZTpcbiAgICAgICAgICAgIHByb3BzLnN1bW1hcnlEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICAgIHZhcmlhYmxlczogcHJvcHMudmFyaWFibGVzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5TVU1NQVJZXSA9IHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZUFsYXJtRGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxhcm1EYXNoYm9hcmQgPSB0aGlzLmNyZWF0ZURhc2hib2FyZChcbiAgICAgICAgcmVuZGVyaW5nUHJlZmVyZW5jZSxcbiAgICAgICAgXCJBbGFybURhc2hib2FyZFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFzaGJvYXJkTmFtZTogYCR7cHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeH0tQWxhcm1zYCxcbiAgICAgICAgICBzdGFydDogZGV0YWlsU3RhcnQsXG4gICAgICAgICAgcGVyaW9kT3ZlcnJpZGU6XG4gICAgICAgICAgICBwcm9wcy5kZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICAgIHZhcmlhYmxlczogcHJvcHMudmFyaWFibGVzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5BTEFSTVNdID0gdGhpcy5hbGFybURhc2hib2FyZDtcbiAgICB9XG5cbiAgICB0aGlzLmFueURhc2hib2FyZENyZWF0ZWQgPSBhbnlEYXNoYm9hcmRDcmVhdGVkO1xuICB9XG5cbiAgYWRkU2VnbWVudChwcm9wczogSURhc2hib2FyZEZhY3RvcnlQcm9wcykge1xuICAgIGlmICgocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9EZXRhaWxEYXNoYm9hcmQgPz8gdHJ1ZSkgJiYgdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmFkZFdpZGdldHMoLi4ucHJvcHMuc2VnbWVudC53aWRnZXRzKCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9TdW1tYXJ5RGFzaGJvYXJkID8/IHRydWUpICYmXG4gICAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmRcbiAgICApIHtcbiAgICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQuc3VtbWFyeVdpZGdldHMoKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwcm9wcy5vdmVycmlkZVByb3BzPy5hZGRUb0FsYXJtRGFzaGJvYXJkID8/IHRydWUpICYmXG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkXG4gICAgKSB7XG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkLmFkZFdpZGdldHMoLi4ucHJvcHMuc2VnbWVudC5hbGFybVdpZGdldHMoKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY1NlZ21lbnQoc2VnbWVudDogSUR5bmFtaWNEYXNoYm9hcmRTZWdtZW50KTogdm9pZCB7XG4gICAgdGhpcy5kYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuREVUQUlMKSxcbiAgICApO1xuICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZD8uYWRkV2lkZ2V0cyhcbiAgICAgIC4uLnNlZ21lbnQud2lkZ2V0c0ZvckRhc2hib2FyZChEZWZhdWx0RGFzaGJvYXJkcy5TVU1NQVJZKSxcbiAgICApO1xuICAgIHRoaXMuYWxhcm1EYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuQUxBUk1TKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZURhc2hib2FyZChcbiAgICByZW5kZXJpbmdQcmVmZXJlbmNlOiBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERhc2hib2FyZFByb3BzLFxuICApIHtcbiAgICBzd2l0Y2ggKHJlbmRlcmluZ1ByZWZlcmVuY2UpIHtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZOlxuICAgICAgICByZXR1cm4gbmV3IERhc2hib2FyZCh0aGlzLCBpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLkJJVE1BUF9PTkxZOlxuICAgICAgICByZXR1cm4gbmV3IEJpdG1hcERhc2hib2FyZCh0aGlzLCBpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLklOVEVSQUNUSVZFX0FORF9CSVRNQVA6XG4gICAgICAgIHJldHVybiBuZXcgRGFzaGJvYXJkV2l0aEJpdG1hcENvcHkodGhpcywgaWQsIHByb3BzKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVkRGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkO1xuICB9XG5cbiAgY3JlYXRlZFN1bW1hcnlEYXNoYm9hcmQoKTogRGFzaGJvYXJkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdW1tYXJ5RGFzaGJvYXJkO1xuICB9XG5cbiAgY3JlYXRlZEFsYXJtRGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gIH1cblxuICBnZXREYXNoYm9hcmQobmFtZTogc3RyaW5nKTogRGFzaGJvYXJkIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgICAgIGNhc2UgRGVmYXVsdERhc2hib2FyZHMuREVUQUlMOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXNoYm9hcmQ7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLkFMQVJNUzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGRhc2hib2FyZCBuYW1lIVwiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==