cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
120 lines • 21.9 kB
JavaScript
"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==