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 22 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 = 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: "10.0.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhc2hib2FyZEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEZWZhdWx0RGFzaGJvYXJkRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QywrREFLb0M7QUFDcEMsMkNBQXVDO0FBQ3ZDLHVEQUFvRDtBQUNwRCxpRkFBOEU7QUFDOUUsdUVBQW9FO0FBbUVwRSxJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsc0NBQWlCLENBQUE7SUFDakIsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSTVCO0FBRUQsTUFBYSx1QkFDWCxTQUFRLHNCQUFTO0lBWWpCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUpuQiwyQkFBMkI7UUFDbEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFLbEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDO1FBQ3JFLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUMxQixlQUFlLElBQUksb0JBQW9CLElBQUksc0JBQXNCLENBQUM7UUFFcEUsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sS0FBSyxDQUNULDZFQUE2RSxDQUM5RSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQ3ZCLEtBQUssQ0FBQyxtQkFBbUI7WUFDekIsMkRBQTRCLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdB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Z0I7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVk7UUFDdkIsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDL0IsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDeEIsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDOztBQXRKSCwwREF1SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkLFxuICBEYXNoYm9hcmRQcm9wcyxcbiAgUGVyaW9kT3ZlcnJpZGUsXG4gIElWYXJpYWJsZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQml0bWFwRGFzaGJvYXJkIH0gZnJvbSBcIi4vQml0bWFwRGFzaGJvYXJkXCI7XG5pbXBvcnQgeyBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlIH0gZnJvbSBcIi4vRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZVwiO1xuaW1wb3J0IHsgRGFzaGJvYXJkV2l0aEJpdG1hcENvcHkgfSBmcm9tIFwiLi9EYXNoYm9hcmRXaXRoQml0bWFwQ29weVwiO1xuaW1wb3J0IHsgSUR5bmFtaWNEYXNoYm9hcmRTZWdtZW50IH0gZnJvbSBcIi4vRHluYW1pY0Rhc2hib2FyZFNlZ21lbnRcIjtcbmltcG9ydCB7IElEYXNoYm9hcmRGYWN0b3J5LCBJRGFzaGJvYXJkRmFjdG9yeVByb3BzIH0gZnJvbSBcIi4vSURhc2hib2FyZEZhY3RvcnlcIjtcbmltcG9ydCB7IElEeW5hbWljRGFzaGJvYXJkRmFjdG9yeSB9IGZyb20gXCIuL0lEeW5hbWljRGFzaGJvYXJkRmFjdG9yeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JpbmdEYXNoYm9hcmRzUHJvcHMge1xuICAvKipcbiAgICogUHJlZml4IGFkZGVkIHRvIGVhY2ggZGFzaGJvYXJkIG5hbWUuXG4gICAqIFRoaXMgYWxsb3dzIHRvIGhhdmUgYWxsIGRhc2hib2FyZHMgc29ydGVkIGNsb3NlIHRvIGVhY2ggb3RoZXIgYW5kIGFsc28gc2VwYXJhdGUgbXVsdGlwbGUgbW9uaXRvcmluZyBmYWNhZGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGFzaGJvYXJkTmFtZVByZWZpeDogc3RyaW5nO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgdGhlIGRldGFpbCBkYXNoYm9hcmQgKGFuZCBvdGhlciBhdXhpbGlhcnkgZGFzaGJvYXJkcykuXG4gICAqIEBkZWZhdWx0IC0gOCBob3Vyc1xuICAgKiBAc2VlIERlZmF1bHREZXRhaWxEYXNoYm9hcmRSYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlsRGFzaGJvYXJkUmFuZ2U/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFBlcmlvZCBvdmVycmlkZSBmb3IgdGhlIGRldGFpbCBkYXNoYm9hcmQgKGFuZCBvdGhlciBhdXhpbGlhcnkgZGFzaGJvYXJkcykuXG4gICAqIEBkZWZhdWx0IC0gcmVzcGVjdCBpbmRpdmlkdWFsIGdyYXBocyAoUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVClcbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbERhc2hib2FyZFBlcmlvZE92ZXJyaWRlPzogUGVyaW9kT3ZlcnJpZGU7XG4gIC8qKlxuICAgKiBSYW5nZSBvZiB0aGUgc3VtbWFyeSBkYXNoYm9hcmQuXG4gICAqIEBkZWZhdWx0IC0gMTQgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZFJhbmdlPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBQZXJpb2Qgb3ZlcnJpZGUgZm9yIHRoZSBzdW1tYXJ5IGRhc2hib2FyZC5cbiAgICogQGRlZmF1bHQgLSByZXNwZWN0IGluZGl2aWR1YWwgZ3JhcGhzIChQZXJpb2RPdmVycmlkZS5JTkhFUklUKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZFBlcmlvZE92ZXJyaWRlPzogUGVyaW9kT3ZlcnJpZGU7XG4gIC8qKlxuICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgZGVmYXVsdCBkYXNoYm9hcmQgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb24gb3RoZXIgY3JlYXRlIGRhc2hib2FyZCBmbGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVEYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN1bW1hcnkgZGFzaGJvYXJkIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9uIG90aGVyIGNyZWF0ZSBkYXNoYm9hcmQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGFsYXJtIGRhc2hib2FyZCBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogVGhpcyBpcyBpbmRlcGVuZGVudCBvbiBvdGhlciBjcmVhdGUgZGFzaGJvYXJkIGZsYWdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVBbGFybURhc2hib2FyZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEYXNoYm9hcmQgcmVuZGVyaW5nIHByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZXG4gICAqL1xuICByZWFkb25seSByZW5kZXJpbmdQcmVmZXJlbmNlPzogRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZTtcbiAgLyoqXG4gICAqIERhc2hib2FyZCB2YXJpYWJsZXMgdG8gaW5jbHVkZSBpbiB0aGUgZGFzaGJvYXJkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IElWYXJpYWJsZVtdO1xufVxuXG5leHBvcnQgZW51bSBEZWZhdWx0RGFzaGJvYXJkcyB7XG4gIFNVTU1BUlkgPSBcIlN1bW1hcnlcIixcbiAgREVUQUlMID0gXCJEZXRhaWxcIixcbiAgQUxBUk1TID0gXCJBbGFybXNcIixcbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHREYXNoYm9hcmRGYWN0b3J5XG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgSURhc2hib2FyZEZhY3RvcnksIElEeW5hbWljRGFzaGJvYXJkRmFjdG9yeVxue1xuICAvLyBMZWdhY3kgRGFzaGJvYXJkIEZpZWxkc1xuICByZWFkb25seSBkYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IGFsYXJtRGFzaGJvYXJkPzogRGFzaGJvYXJkO1xuICByZWFkb25seSBhbnlEYXNoYm9hcmRDcmVhdGVkOiBib29sZWFuO1xuXG4gIC8vIER5bmFtaWMgRGFzaGJvYXJkIEZpZWxkc1xuICByZWFkb25seSBkYXNoYm9hcmRzOiBSZWNvcmQ8c3RyaW5nLCBEYXNoYm9hcmQ+ID0ge307XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1vbml0b3JpbmdEYXNoYm9hcmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY3JlYXRlRGFzaGJvYXJkID0gcHJvcHMuY3JlYXRlRGFzaGJvYXJkID8/IHRydWU7XG4gICAgY29uc3QgY3JlYXRlU3VtbWFyeURhc2hib2FyZCA9IHByb3BzLmNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQgPz8gZmFsc2U7XG4gICAgY29uc3QgY3JlYXRlQWxhcm1EYXNoYm9hcmQgPSBwcm9wcy5jcmVhdGVBbGFybURhc2hib2FyZCA/PyBmYWxzZTtcbiAgICBjb25zdCBzaG91bGRDcmVhdGVEYXNoYm9hcmRzID1cbiAgICAgIGNyZWF0ZURhc2hib2FyZCB8fCBjcmVhdGVBbGFybURhc2hib2FyZCB8fCBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkO1xuXG4gICAgaWYgKHNob3VsZENyZWF0ZURhc2hib2FyZHMgJiYgIXByb3BzLmRhc2hib2FyZE5hbWVQcmVmaXgpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkEgbm9uLWVtcHR5IGRhc2hib2FyZE5hbWVQcmVmaXggaXMgcmVxdWlyZWQgaWYgZGFzaGJvYXJkcyBhcmUgYmVpbmcgY3JlYXRlZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJpbmdQcmVmZXJlbmNlID1cbiAgICAgIHByb3BzLnJlbmRlcmluZ1ByZWZlcmVuY2UgPz9cbiAgICAgIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWTtcbiAgICBjb25zdCBkZXRhaWxTdGFydDogc3RyaW5nID1cbiAgICAgIFwiLVwiICsgKHByb3BzLmRldGFpbERhc2hib2FyZFJhbmdlID8/IER1cmF0aW9uLmhvdXJzKDgpKS50b0lzb1N0cmluZygpO1xuICAgIGNvbnN0IHN1bW1hcnlTdGFydDogc3RyaW5nID1cbiAgICAgIFwiLVwiICsgKHByb3BzLnN1bW1hcnlEYXNoYm9hcmRSYW5nZSA/PyBEdXJhdGlvbi5kYXlzKDE0KSkudG9Jc29TdHJpbmcoKTtcbiAgICBsZXQgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGNyZWF0ZURhc2hib2FyZCkge1xuICAgICAgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IHRoaXMuY3JlYXRlRGFzaGJvYXJkKHJlbmRlcmluZ1ByZWZlcmVuY2UsIFwiRGFzaGJvYXJkXCIsIHtcbiAgICAgICAgZGFzaGJvYXJkTmFtZTogcHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeCxcbiAgICAgICAgc3RhcnQ6IGRldGFpbFN0YXJ0LFxuICAgICAgICBwZXJpb2RPdmVycmlkZTpcbiAgICAgICAgICBwcm9wcy5kZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICB2YXJpYWJsZXM6IHByb3BzLnZhcmlhYmxlcyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXNoYm9hcmRzW0RlZmF1bHREYXNoYm9hcmRzLkRFVEFJTF0gPSB0aGlzLmRhc2hib2FyZDtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQpIHtcbiAgICAgIGFueURhc2hib2FyZENyZWF0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zdW1tYXJ5RGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQoXG4gICAgICAgIHJlbmRlcmluZ1ByZWZlcmVuY2UsXG4gICAgICAgIFwiU3VtbWFyeURhc2hib2FyZFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFzaGJvYXJkTmFtZTogYCR7cHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeH0tU3VtbWFyeWAsXG4gICAgICAgICAgc3RhcnQ6IHN1bW1hcnlTdGFydCxcbiAgICAgICAgICBwZXJpb2RPdmVycmlkZTpcbiAgICAgICAgICAgIHByb3BzLnN1bW1hcnlEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICAgIHZhcmlhYmxlczogcHJvcHMudmFyaWFibGVzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5TVU1NQVJZXSA9IHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZUFsYXJtRGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxhcm1EYXNoYm9hcmQgPSB0aGlzLmNyZWF0ZURhc2hib2FyZChcbiAgICAgICAgcmVuZGVyaW5nUHJlZmVyZW5jZSxcbiAgICAgICAgXCJBbGFybURhc2hib2FyZFwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGFzaGJvYXJkTmFtZTogYCR7cHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeH0tQWxhcm1zYCxcbiAgICAgICAgICBzdGFydDogZGV0YWlsU3RhcnQsXG4gICAgICAgICAgcGVyaW9kT3ZlcnJpZGU6XG4gICAgICAgICAgICBwcm9wcy5kZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZSA/PyBQZXJpb2RPdmVycmlkZS5JTkhFUklULFxuICAgICAgICAgIHZhcmlhYmxlczogcHJvcHMudmFyaWFibGVzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5BTEFSTVNdID0gdGhpcy5hbGFybURhc2hib2FyZDtcbiAgICB9XG5cbiAgICB0aGlzLmFueURhc2hib2FyZENyZWF0ZWQgPSBhbnlEYXNoYm9hcmRDcmVhdGVkO1xuICB9XG5cbiAgYWRkU2VnbWVudChwcm9wczogSURhc2hib2FyZEZhY3RvcnlQcm9wcykge1xuICAgIGlmICgocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9EZXRhaWxEYXNoYm9hcmQgPz8gdHJ1ZSkgJiYgdGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmFkZFdpZGdldHMoLi4ucHJvcHMuc2VnbWVudC53aWRnZXRzKCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9TdW1tYXJ5RGFzaGJvYXJkID8/IHRydWUpICYmXG4gICAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmRcbiAgICApIHtcbiAgICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQuc3VtbWFyeVdpZGdldHMoKSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChwcm9wcy5vdmVycmlkZVByb3BzPy5hZGRUb0FsYXJtRGFzaGJvYXJkID8/IHRydWUpICYmXG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkXG4gICAgKSB7XG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkLmFkZFdpZGdldHMoLi4ucHJvcHMuc2VnbWVudC5hbGFybVdpZGdldHMoKSk7XG4gICAgfVxuICB9XG5cbiAgYWRkRHluYW1pY1NlZ21lbnQoc2VnbWVudDogSUR5bmFtaWNEYXNoYm9hcmRTZWdtZW50KTogdm9pZCB7XG4gICAgdGhpcy5kYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuREVUQUlMKSxcbiAgICApO1xuICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZD8uYWRkV2lkZ2V0cyhcbiAgICAgIC4uLnNlZ21lbnQud2lkZ2V0c0ZvckRhc2hib2FyZChEZWZhdWx0RGFzaGJvYXJkcy5TVU1NQVJZKSxcbiAgICApO1xuICAgIHRoaXMuYWxhcm1EYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuQUxBUk1TKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZURhc2hib2FyZChcbiAgICByZW5kZXJpbmdQcmVmZXJlbmNlOiBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERhc2hib2FyZFByb3BzLFxuICApIHtcbiAgICBzd2l0Y2ggKHJlbmRlcmluZ1ByZWZlcmVuY2UpIHtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZOlxuICAgICAgICByZXR1cm4gbmV3IERhc2hib2FyZCh0aGlzLCBpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLkJJVE1BUF9PTkxZOlxuICAgICAgICByZXR1cm4gbmV3IEJpdG1hcERhc2hib2FyZCh0aGlzLCBpZCwgcHJvcHMpO1xuICAgICAgY2FzZSBEYXNoYm9hcmRSZW5kZXJpbmdQcmVmZXJlbmNlLklOVEVSQUNUSVZFX0FORF9CSVRNQVA6XG4gICAgICAgIHJldHVybiBuZXcgRGFzaGJvYXJkV2l0aEJpdG1hcENvcHkodGhpcywgaWQsIHByb3BzKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVkRGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkO1xuICB9XG5cbiAgY3JlYXRlZFN1bW1hcnlEYXNoYm9hcmQoKTogRGFzaGJvYXJkIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdW1tYXJ5RGFzaGJvYXJkO1xuICB9XG5cbiAgY3JlYXRlZEFsYXJtRGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gIH1cblxuICBnZXREYXNoYm9hcmQobmFtZTogc3RyaW5nKTogRGFzaGJvYXJkIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgICAgIGNhc2UgRGVmYXVsdERhc2hib2FyZHMuREVUQUlMOlxuICAgICAgICByZXR1cm4gdGhpcy5kYXNoYm9hcmQ7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLkFMQVJNUzpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGRhc2hib2FyZCBuYW1lIVwiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==