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

117 lines 21.3 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, }); 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, }); 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, }); 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.7.1" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhc2hib2FyZEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEZWZhdWx0RGFzaGJvYXJkRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QywrREFJb0M7QUFDcEMsMkNBQXVDO0FBQ3ZDLHVEQUFvRDtBQUNwRCxpRkFBOEU7QUFDOUUsdUVBQW9FO0FBNkRwRSxJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsc0NBQWlCLENBQUE7SUFDakIsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSTVCO0FBRUQsTUFBYSx1QkFDWCxTQUFRLHNCQUFTO0lBWWpCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUpuQiwyQkFBMkI7UUFDbEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFLbEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDO1FBQ3JFLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUMxQixlQUFlLElBQUksb0JBQW9CLElBQUksc0JBQXNCLENBQUM7UUFFcEUsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtZQUN4RCxNQUFNLEtBQUssQ0FDVCw2RUFBNkUsQ0FDOUUsQ0FBQztTQUNIO1FBRUQsTUFBTSxtQkFBbUIsR0FDdkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QiwyREFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxNQUFNLFdBQVcs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Q0FBQyxJQUFZO1FBQ3ZCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN4QixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDOztBQW5KSCwwREFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkLFxuICBEYXNoYm9hcmRQcm9wcyxcbiAgUGVyaW9kT3ZlcnJpZGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEJpdG1hcERhc2hib2FyZCB9IGZyb20gXCIuL0JpdG1hcERhc2hib2FyZFwiO1xuaW1wb3J0IHsgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZSB9IGZyb20gXCIuL0Rhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2VcIjtcbmltcG9ydCB7IERhc2hib2FyZFdpdGhCaXRtYXBDb3B5IH0gZnJvbSBcIi4vRGFzaGJvYXJkV2l0aEJpdG1hcENvcHlcIjtcbmltcG9ydCB7IElEeW5hbWljRGFzaGJvYXJkU2VnbWVudCB9IGZyb20gXCIuL0R5bmFtaWNEYXNoYm9hcmRTZWdtZW50XCI7XG5pbXBvcnQgeyBJRGFzaGJvYXJkRmFjdG9yeSwgSURhc2hib2FyZEZhY3RvcnlQcm9wcyB9IGZyb20gXCIuL0lEYXNoYm9hcmRGYWN0b3J5XCI7XG5pbXBvcnQgeyBJRHluYW1pY0Rhc2hib2FyZEZhY3RvcnkgfSBmcm9tIFwiLi9JRHluYW1pY0Rhc2hib2FyZEZhY3RvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nRGFzaGJvYXJkc1Byb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCBhZGRlZCB0byBlYWNoIGRhc2hib2FyZCBuYW1lLlxuICAgKiBUaGlzIGFsbG93cyB0byBoYXZlIGFsbCBkYXNoYm9hcmRzIHNvcnRlZCBjbG9zZSB0byBlYWNoIG90aGVyIGFuZCBhbHNvIHNlcGFyYXRlIG11bHRpcGxlIG1vbml0b3JpbmcgZmFjYWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRhc2hib2FyZE5hbWVQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJhbmdlIG9mIHRoZSBkZXRhaWwgZGFzaGJvYXJkIChhbmQgb3RoZXIgYXV4aWxpYXJ5IGRhc2hib2FyZHMpLlxuICAgKiBAZGVmYXVsdCAtIDggaG91cnNcbiAgICogQHNlZSBEZWZhdWx0RGV0YWlsRGFzaGJvYXJkUmFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbERhc2hib2FyZFJhbmdlPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBQZXJpb2Qgb3ZlcnJpZGUgZm9yIHRoZSBkZXRhaWwgZGFzaGJvYXJkIChhbmQgb3RoZXIgYXV4aWxpYXJ5IGRhc2hib2FyZHMpLlxuICAgKiBAZGVmYXVsdCAtIHJlc3BlY3QgaW5kaXZpZHVhbCBncmFwaHMgKFBlcmlvZE92ZXJyaWRlLklOSEVSSVQpXG4gICAqL1xuICByZWFkb25seSBkZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZT86IFBlcmlvZE92ZXJyaWRlO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgdGhlIHN1bW1hcnkgZGFzaGJvYXJkLlxuICAgKiBAZGVmYXVsdCAtIDE0IGRheXNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmRSYW5nZT86IER1cmF0aW9uO1xuICAvKipcbiAgICogUGVyaW9kIG92ZXJyaWRlIGZvciB0aGUgc3VtbWFyeSBkYXNoYm9hcmQuXG4gICAqIEBkZWZhdWx0IC0gcmVzcGVjdCBpbmRpdmlkdWFsIGdyYXBocyAoUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVClcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmRQZXJpb2RPdmVycmlkZT86IFBlcmlvZE92ZXJyaWRlO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRlZmF1bHQgZGFzaGJvYXJkIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9uIG90aGVyIGNyZWF0ZSBkYXNoYm9hcmQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlRGFzaGJvYXJkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdW1tYXJ5IGRhc2hib2FyZCBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogVGhpcyBpcyBpbmRlcGVuZGVudCBvbiBvdGhlciBjcmVhdGUgZGFzaGJvYXJkIGZsYWdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhbGFybSBkYXNoYm9hcmQgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb24gb3RoZXIgY3JlYXRlIGRhc2hib2FyZCBmbGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlQWxhcm1EYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRGFzaGJvYXJkIHJlbmRlcmluZyBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyaW5nUHJlZmVyZW5jZT86IERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBlbnVtIERlZmF1bHREYXNoYm9hcmRzIHtcbiAgU1VNTUFSWSA9IFwiU3VtbWFyeVwiLFxuICBERVRBSUwgPSBcIkRldGFpbFwiLFxuICBBTEFSTVMgPSBcIkFsYXJtc1wiLFxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERhc2hib2FyZEZhY3RvcnlcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJRGFzaGJvYXJkRmFjdG9yeSwgSUR5bmFtaWNEYXNoYm9hcmRGYWN0b3J5XG57XG4gIC8vIExlZ2FjeSBEYXNoYm9hcmQgRmllbGRzXG4gIHJlYWRvbmx5IGRhc2hib2FyZD86IERhc2hib2FyZDtcbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZD86IERhc2hib2FyZDtcbiAgcmVhZG9ubHkgYWxhcm1EYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IGFueURhc2hib2FyZENyZWF0ZWQ6IGJvb2xlYW47XG5cbiAgLy8gRHluYW1pYyBEYXNoYm9hcmQgRmllbGRzXG4gIHJlYWRvbmx5IGRhc2hib2FyZHM6IFJlY29yZDxzdHJpbmcsIERhc2hib2FyZD4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTW9uaXRvcmluZ0Rhc2hib2FyZHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjcmVhdGVEYXNoYm9hcmQgPSBwcm9wcy5jcmVhdGVEYXNoYm9hcmQgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkID0gcHJvcHMuY3JlYXRlU3VtbWFyeURhc2hib2FyZCA/PyBmYWxzZTtcbiAgICBjb25zdCBjcmVhdGVBbGFybURhc2hib2FyZCA9IHByb3BzLmNyZWF0ZUFsYXJtRGFzaGJvYXJkID8/IGZhbHNlO1xuICAgIGNvbnN0IHNob3VsZENyZWF0ZURhc2hib2FyZHMgPVxuICAgICAgY3JlYXRlRGFzaGJvYXJkIHx8IGNyZWF0ZUFsYXJtRGFzaGJvYXJkIHx8IGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQ7XG5cbiAgICBpZiAoc2hvdWxkQ3JlYXRlRGFzaGJvYXJkcyAmJiAhcHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiQSBub24tZW1wdHkgZGFzaGJvYXJkTmFtZVByZWZpeCBpcyByZXF1aXJlZCBpZiBkYXNoYm9hcmRzIGFyZSBiZWluZyBjcmVhdGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmluZ1ByZWZlcmVuY2UgPVxuICAgICAgcHJvcHMucmVuZGVyaW5nUHJlZmVyZW5jZSA/P1xuICAgICAgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZO1xuICAgIGNvbnN0IGRldGFpbFN0YXJ0OiBzdHJpbmcgPVxuICAgICAgXCItXCIgKyAocHJvcHMuZGV0YWlsRGFzaGJvYXJkUmFuZ2UgPz8gRHVyYXRpb24uaG91cnMoOCkpLnRvSXNvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3VtbWFyeVN0YXJ0OiBzdHJpbmcgPVxuICAgICAgXCItXCIgKyAocHJvcHMuc3VtbWFyeURhc2hib2FyZFJhbmdlID8/IER1cmF0aW9uLmRheXMoMTQpKS50b0lzb1N0cmluZygpO1xuICAgIGxldCBhbnlEYXNoYm9hcmRDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAoY3JlYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQocmVuZGVyaW5nUHJlZmVyZW5jZSwgXCJEYXNoYm9hcmRcIiwge1xuICAgICAgICBkYXNoYm9hcmROYW1lOiBwcm9wcy5kYXNoYm9hcmROYW1lUHJlZml4LFxuICAgICAgICBzdGFydDogZGV0YWlsU3RhcnQsXG4gICAgICAgIHBlcmlvZE92ZXJyaWRlOlxuICAgICAgICAgIHByb3BzLmRldGFpbERhc2hib2FyZFBlcmlvZE92ZXJyaWRlID8/IFBlcmlvZE92ZXJyaWRlLklOSEVSSVQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5ERVRBSUxdID0gdGhpcy5kYXNoYm9hcmQ7XG4gICAgfVxuICAgIGlmIChjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZCA9IHRoaXMuY3JlYXRlRGFzaGJvYXJkKFxuICAgICAgICByZW5kZXJpbmdQcmVmZXJlbmNlLFxuICAgICAgICBcIlN1bW1hcnlEYXNoYm9hcmRcIixcbiAgICAgICAge1xuICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGAke3Byb3BzLmRhc2hib2FyZE5hbWVQcmVmaXh9LVN1bW1hcnlgLFxuICAgICAgICAgIHN0YXJ0OiBzdW1tYXJ5U3RhcnQsXG4gICAgICAgICAgcGVyaW9kT3ZlcnJpZGU6XG4gICAgICAgICAgICBwcm9wcy5zdW1tYXJ5RGFzaGJvYXJkUGVyaW9kT3ZlcnJpZGUgPz8gUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZHNbRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWV0gPSB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ7XG4gICAgfVxuICAgIGlmIChjcmVhdGVBbGFybURhc2hib2FyZCkge1xuICAgICAgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQoXG4gICAgICAgIHJlbmRlcmluZ1ByZWZlcmVuY2UsXG4gICAgICAgIFwiQWxhcm1EYXNoYm9hcmRcIixcbiAgICAgICAge1xuICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGAke3Byb3BzLmRhc2hib2FyZE5hbWVQcmVmaXh9LUFsYXJtc2AsXG4gICAgICAgICAgc3RhcnQ6IGRldGFpbFN0YXJ0LFxuICAgICAgICAgIHBlcmlvZE92ZXJyaWRlOlxuICAgICAgICAgICAgcHJvcHMuZGV0YWlsRGFzaGJvYXJkUGVyaW9kT3ZlcnJpZGUgPz8gUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZHNbRGVmYXVsdERhc2hib2FyZHMuQUxBUk1TXSA9IHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gICAgfVxuXG4gICAgdGhpcy5hbnlEYXNoYm9hcmRDcmVhdGVkID0gYW55RGFzaGJvYXJkQ3JlYXRlZDtcbiAgfVxuXG4gIGFkZFNlZ21lbnQocHJvcHM6IElEYXNoYm9hcmRGYWN0b3J5UHJvcHMpIHtcbiAgICBpZiAoKHByb3BzLm92ZXJyaWRlUHJvcHM/LmFkZFRvRGV0YWlsRGFzaGJvYXJkID8/IHRydWUpICYmIHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQud2lkZ2V0cygpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKHByb3BzLm92ZXJyaWRlUHJvcHM/LmFkZFRvU3VtbWFyeURhc2hib2FyZCA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5zdW1tYXJ5RGFzaGJvYXJkXG4gICAgKSB7XG4gICAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmQuYWRkV2lkZ2V0cyguLi5wcm9wcy5zZWdtZW50LnN1bW1hcnlXaWRnZXRzKCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9BbGFybURhc2hib2FyZCA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5hbGFybURhc2hib2FyZFxuICAgICkge1xuICAgICAgdGhpcy5hbGFybURhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQuYWxhcm1XaWRnZXRzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNTZWdtZW50KHNlZ21lbnQ6IElEeW5hbWljRGFzaGJvYXJkU2VnbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZGFzaGJvYXJkPy5hZGRXaWRnZXRzKFxuICAgICAgLi4uc2VnbWVudC53aWRnZXRzRm9yRGFzaGJvYXJkKERlZmF1bHREYXNoYm9hcmRzLkRFVEFJTCksXG4gICAgKTtcbiAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWSksXG4gICAgKTtcbiAgICB0aGlzLmFsYXJtRGFzaGJvYXJkPy5hZGRXaWRnZXRzKFxuICAgICAgLi4uc2VnbWVudC53aWRnZXRzRm9yRGFzaGJvYXJkKERlZmF1bHREYXNoYm9hcmRzLkFMQVJNUyksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVEYXNoYm9hcmQoXG4gICAgcmVuZGVyaW5nUHJlZmVyZW5jZTogRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZSxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEYXNoYm9hcmRQcm9wcyxcbiAgKSB7XG4gICAgc3dpdGNoIChyZW5kZXJpbmdQcmVmZXJlbmNlKSB7XG4gICAgICBjYXNlIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWTpcbiAgICAgICAgcmV0dXJuIG5ldyBEYXNoYm9hcmQodGhpcywgaWQsIHByb3BzKTtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5CSVRNQVBfT05MWTpcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBEYXNoYm9hcmQodGhpcywgaWQsIHByb3BzKTtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9BTkRfQklUTUFQOlxuICAgICAgICByZXR1cm4gbmV3IERhc2hib2FyZFdpdGhCaXRtYXBDb3B5KHRoaXMsIGlkLCBwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlZERhc2hib2FyZCgpOiBEYXNoYm9hcmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhc2hib2FyZDtcbiAgfVxuXG4gIGNyZWF0ZWRTdW1tYXJ5RGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgfVxuXG4gIGNyZWF0ZWRBbGFybURhc2hib2FyZCgpOiBEYXNoYm9hcmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFsYXJtRGFzaGJvYXJkO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkKG5hbWU6IHN0cmluZyk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLlNVTU1BUlk6XG4gICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLkRFVEFJTDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkO1xuICAgICAgY2FzZSBEZWZhdWx0RGFzaGJvYXJkcy5BTEFSTVM6XG4gICAgICAgIHJldHVybiB0aGlzLmFsYXJtRGFzaGJvYXJkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkYXNoYm9hcmQgbmFtZSFcIik7XG4gICAgfVxuICB9XG59XG4iXX0=