cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
117 lines • 21.3 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,
});
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdERhc2hib2FyZEZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJEZWZhdWx0RGFzaGJvYXJkRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF1QztBQUN2QywrREFJb0M7QUFDcEMsMkNBQXVDO0FBQ3ZDLHVEQUFvRDtBQUNwRCxpRkFBOEU7QUFDOUUsdUVBQW9FO0FBNkRwRSxJQUFZLGlCQUlYO0FBSkQsV0FBWSxpQkFBaUI7SUFDM0Isd0NBQW1CLENBQUE7SUFDbkIsc0NBQWlCLENBQUE7SUFDakIsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGlCQUFpQixHQUFqQix5QkFBaUIsS0FBakIseUJBQWlCLFFBSTVCO0FBRUQsTUFBYSx1QkFDWCxTQUFRLHNCQUFTO0lBWWpCLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUpuQiwyQkFBMkI7UUFDbEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFLbEQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFDdEQsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDO1FBQ3JFLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUNqRSxNQUFNLHNCQUFzQixHQUMxQixlQUFlLElBQUksb0JBQW9CLElBQUksc0JBQXNCLENBQUM7UUFFcEUsSUFBSSxzQkFBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRTtZQUN4RCxNQUFNLEtBQUssQ0FDVCw2RUFBNkUsQ0FDOUUsQ0FBQztTQUNIO1FBRUQsTUFBTSxtQkFBbUIsR0FDdkIsS0FBSyxDQUFDLG1CQUFtQjtZQUN6QiwyREFBNEIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FDZixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFlBQVksR0FDaEIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLHFCQUFxQixJQUFJLHNCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekUsSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFaEMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUU7Z0JBQ3RFLGFBQWEsRUFBRSxLQUFLLENBQUMsbUJBQW1CO2dCQUN4QyxLQUFLLEVBQUUsV0FBVztnQkFDbEIsY0FBYyxFQUNaLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSwrQkFBYyxDQUFDLE9BQU87YUFDaEUsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQzVEO1FBQ0QsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixtQkFBbUIsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzFDLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEI7Z0JBQ0UsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixVQUFVO2dCQUNyRCxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsY0FBYyxFQUNaLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSwrQkFBYyxDQUFDLE9BQU87YUFDakUsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDcEU7UUFDRCxJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQ3hDLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEI7Z0JBQ0UsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixTQUFTO2dCQUNwRCxLQUFLLEVBQUUsV0FBVztnQkFDbEIsY0FBYyxFQUNaLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSwrQkFBYyxDQUFDLE9BQU87YUFDaEUsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQ0UsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLHFCQUFxQixJQUFJLElBQUksQ0FBQztZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCO1lBQ0EsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUNELElBQ0UsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLG1CQUFtQixJQUFJLElBQUksQ0FBQztZQUNsRCxJQUFJLENBQUMsY0FBYyxFQUNuQjtZQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLE9BQWlDO1FBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUN4QixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FDekQsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQy9CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUMxRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQzdCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FDdkIsbUJBQWlELEVBQ2pELEVBQVUsRUFDVixLQUFxQjtRQUVyQixRQUFRLG1CQUFtQixFQUFFO1lBQzNCLEtBQUssMkRBQTRCLENBQUMsZ0JBQWdCO2dCQUNoRCxPQUFPLElBQUksMEJBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLEtBQUssMkRBQTRCLENBQUMsV0FBVztnQkFDM0MsT0FBTyxJQUFJLGlDQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxLQUFLLDJEQUE0QixDQUFDLHNCQUFzQjtnQkFDdEQsT0FBTyxJQUFJLGlEQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxpQkFBaUIsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMvQixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN4QixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUM3QjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDOztBQW5KSCwwREFvSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkLFxuICBEYXNoYm9hcmRQcm9wcyxcbiAgUGVyaW9kT3ZlcnJpZGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEJpdG1hcERhc2hib2FyZCB9IGZyb20gXCIuL0JpdG1hcERhc2hib2FyZFwiO1xuaW1wb3J0IHsgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZSB9IGZyb20gXCIuL0Rhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2VcIjtcbmltcG9ydCB7IERhc2hib2FyZFdpdGhCaXRtYXBDb3B5IH0gZnJvbSBcIi4vRGFzaGJvYXJkV2l0aEJpdG1hcENvcHlcIjtcbmltcG9ydCB7IElEeW5hbWljRGFzaGJvYXJkU2VnbWVudCB9IGZyb20gXCIuL0R5bmFtaWNEYXNoYm9hcmRTZWdtZW50XCI7XG5pbXBvcnQgeyBJRGFzaGJvYXJkRmFjdG9yeSwgSURhc2hib2FyZEZhY3RvcnlQcm9wcyB9IGZyb20gXCIuL0lEYXNoYm9hcmRGYWN0b3J5XCI7XG5pbXBvcnQgeyBJRHluYW1pY0Rhc2hib2FyZEZhY3RvcnkgfSBmcm9tIFwiLi9JRHluYW1pY0Rhc2hib2FyZEZhY3RvcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nRGFzaGJvYXJkc1Byb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCBhZGRlZCB0byBlYWNoIGRhc2hib2FyZCBuYW1lLlxuICAgKiBUaGlzIGFsbG93cyB0byBoYXZlIGFsbCBkYXNoYm9hcmRzIHNvcnRlZCBjbG9zZSB0byBlYWNoIG90aGVyIGFuZCBhbHNvIHNlcGFyYXRlIG11bHRpcGxlIG1vbml0b3JpbmcgZmFjYWRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRhc2hib2FyZE5hbWVQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJhbmdlIG9mIHRoZSBkZXRhaWwgZGFzaGJvYXJkIChhbmQgb3RoZXIgYXV4aWxpYXJ5IGRhc2hib2FyZHMpLlxuICAgKiBAZGVmYXVsdCAtIDggaG91cnNcbiAgICogQHNlZSBEZWZhdWx0RGV0YWlsRGFzaGJvYXJkUmFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGRldGFpbERhc2hib2FyZFJhbmdlPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBQZXJpb2Qgb3ZlcnJpZGUgZm9yIHRoZSBkZXRhaWwgZGFzaGJvYXJkIChhbmQgb3RoZXIgYXV4aWxpYXJ5IGRhc2hib2FyZHMpLlxuICAgKiBAZGVmYXVsdCAtIHJlc3BlY3QgaW5kaXZpZHVhbCBncmFwaHMgKFBlcmlvZE92ZXJyaWRlLklOSEVSSVQpXG4gICAqL1xuICByZWFkb25seSBkZXRhaWxEYXNoYm9hcmRQZXJpb2RPdmVycmlkZT86IFBlcmlvZE92ZXJyaWRlO1xuICAvKipcbiAgICogUmFuZ2Ugb2YgdGhlIHN1bW1hcnkgZGFzaGJvYXJkLlxuICAgKiBAZGVmYXVsdCAtIDE0IGRheXNcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmRSYW5nZT86IER1cmF0aW9uO1xuICAvKipcbiAgICogUGVyaW9kIG92ZXJyaWRlIGZvciB0aGUgc3VtbWFyeSBkYXNoYm9hcmQuXG4gICAqIEBkZWZhdWx0IC0gcmVzcGVjdCBpbmRpdmlkdWFsIGdyYXBocyAoUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVClcbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnlEYXNoYm9hcmRQZXJpb2RPdmVycmlkZT86IFBlcmlvZE92ZXJyaWRlO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRlZmF1bHQgZGFzaGJvYXJkIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBUaGlzIGlzIGluZGVwZW5kZW50IG9uIG90aGVyIGNyZWF0ZSBkYXNoYm9hcmQgZmxhZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlRGFzaGJvYXJkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdW1tYXJ5IGRhc2hib2FyZCBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogVGhpcyBpcyBpbmRlcGVuZGVudCBvbiBvdGhlciBjcmVhdGUgZGFzaGJvYXJkIGZsYWdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhbGFybSBkYXNoYm9hcmQgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIFRoaXMgaXMgaW5kZXBlbmRlbnQgb24gb3RoZXIgY3JlYXRlIGRhc2hib2FyZCBmbGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlQWxhcm1EYXNoYm9hcmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRGFzaGJvYXJkIHJlbmRlcmluZyBwcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyaW5nUHJlZmVyZW5jZT86IERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2U7XG59XG5cbmV4cG9ydCBlbnVtIERlZmF1bHREYXNoYm9hcmRzIHtcbiAgU1VNTUFSWSA9IFwiU3VtbWFyeVwiLFxuICBERVRBSUwgPSBcIkRldGFpbFwiLFxuICBBTEFSTVMgPSBcIkFsYXJtc1wiLFxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERhc2hib2FyZEZhY3RvcnlcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJRGFzaGJvYXJkRmFjdG9yeSwgSUR5bmFtaWNEYXNoYm9hcmRGYWN0b3J5XG57XG4gIC8vIExlZ2FjeSBEYXNoYm9hcmQgRmllbGRzXG4gIHJlYWRvbmx5IGRhc2hib2FyZD86IERhc2hib2FyZDtcbiAgcmVhZG9ubHkgc3VtbWFyeURhc2hib2FyZD86IERhc2hib2FyZDtcbiAgcmVhZG9ubHkgYWxhcm1EYXNoYm9hcmQ/OiBEYXNoYm9hcmQ7XG4gIHJlYWRvbmx5IGFueURhc2hib2FyZENyZWF0ZWQ6IGJvb2xlYW47XG5cbiAgLy8gRHluYW1pYyBEYXNoYm9hcmQgRmllbGRzXG4gIHJlYWRvbmx5IGRhc2hib2FyZHM6IFJlY29yZDxzdHJpbmcsIERhc2hib2FyZD4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTW9uaXRvcmluZ0Rhc2hib2FyZHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjcmVhdGVEYXNoYm9hcmQgPSBwcm9wcy5jcmVhdGVEYXNoYm9hcmQgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkID0gcHJvcHMuY3JlYXRlU3VtbWFyeURhc2hib2FyZCA/PyBmYWxzZTtcbiAgICBjb25zdCBjcmVhdGVBbGFybURhc2hib2FyZCA9IHByb3BzLmNyZWF0ZUFsYXJtRGFzaGJvYXJkID8/IGZhbHNlO1xuICAgIGNvbnN0IHNob3VsZENyZWF0ZURhc2hib2FyZHMgPVxuICAgICAgY3JlYXRlRGFzaGJvYXJkIHx8IGNyZWF0ZUFsYXJtRGFzaGJvYXJkIHx8IGNyZWF0ZVN1bW1hcnlEYXNoYm9hcmQ7XG5cbiAgICBpZiAoc2hvdWxkQ3JlYXRlRGFzaGJvYXJkcyAmJiAhcHJvcHMuZGFzaGJvYXJkTmFtZVByZWZpeCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiQSBub24tZW1wdHkgZGFzaGJvYXJkTmFtZVByZWZpeCBpcyByZXF1aXJlZCBpZiBkYXNoYm9hcmRzIGFyZSBiZWluZyBjcmVhdGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmluZ1ByZWZlcmVuY2UgPVxuICAgICAgcHJvcHMucmVuZGVyaW5nUHJlZmVyZW5jZSA/P1xuICAgICAgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9PTkxZO1xuICAgIGNvbnN0IGRldGFpbFN0YXJ0OiBzdHJpbmcgPVxuICAgICAgXCItXCIgKyAocHJvcHMuZGV0YWlsRGFzaGJvYXJkUmFuZ2UgPz8gRHVyYXRpb24uaG91cnMoOCkpLnRvSXNvU3RyaW5nKCk7XG4gICAgY29uc3Qgc3VtbWFyeVN0YXJ0OiBzdHJpbmcgPVxuICAgICAgXCItXCIgKyAocHJvcHMuc3VtbWFyeURhc2hib2FyZFJhbmdlID8/IER1cmF0aW9uLmRheXMoMTQpKS50b0lzb1N0cmluZygpO1xuICAgIGxldCBhbnlEYXNoYm9hcmRDcmVhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAoY3JlYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQocmVuZGVyaW5nUHJlZmVyZW5jZSwgXCJEYXNoYm9hcmRcIiwge1xuICAgICAgICBkYXNoYm9hcmROYW1lOiBwcm9wcy5kYXNoYm9hcmROYW1lUHJlZml4LFxuICAgICAgICBzdGFydDogZGV0YWlsU3RhcnQsXG4gICAgICAgIHBlcmlvZE92ZXJyaWRlOlxuICAgICAgICAgIHByb3BzLmRldGFpbERhc2hib2FyZFBlcmlvZE92ZXJyaWRlID8/IFBlcmlvZE92ZXJyaWRlLklOSEVSSVQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkc1tEZWZhdWx0RGFzaGJvYXJkcy5ERVRBSUxdID0gdGhpcy5kYXNoYm9hcmQ7XG4gICAgfVxuICAgIGlmIChjcmVhdGVTdW1tYXJ5RGFzaGJvYXJkKSB7XG4gICAgICBhbnlEYXNoYm9hcmRDcmVhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3VtbWFyeURhc2hib2FyZCA9IHRoaXMuY3JlYXRlRGFzaGJvYXJkKFxuICAgICAgICByZW5kZXJpbmdQcmVmZXJlbmNlLFxuICAgICAgICBcIlN1bW1hcnlEYXNoYm9hcmRcIixcbiAgICAgICAge1xuICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGAke3Byb3BzLmRhc2hib2FyZE5hbWVQcmVmaXh9LVN1bW1hcnlgLFxuICAgICAgICAgIHN0YXJ0OiBzdW1tYXJ5U3RhcnQsXG4gICAgICAgICAgcGVyaW9kT3ZlcnJpZGU6XG4gICAgICAgICAgICBwcm9wcy5zdW1tYXJ5RGFzaGJvYXJkUGVyaW9kT3ZlcnJpZGUgPz8gUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZHNbRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWV0gPSB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ7XG4gICAgfVxuICAgIGlmIChjcmVhdGVBbGFybURhc2hib2FyZCkge1xuICAgICAgYW55RGFzaGJvYXJkQ3JlYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmFsYXJtRGFzaGJvYXJkID0gdGhpcy5jcmVhdGVEYXNoYm9hcmQoXG4gICAgICAgIHJlbmRlcmluZ1ByZWZlcmVuY2UsXG4gICAgICAgIFwiQWxhcm1EYXNoYm9hcmRcIixcbiAgICAgICAge1xuICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGAke3Byb3BzLmRhc2hib2FyZE5hbWVQcmVmaXh9LUFsYXJtc2AsXG4gICAgICAgICAgc3RhcnQ6IGRldGFpbFN0YXJ0LFxuICAgICAgICAgIHBlcmlvZE92ZXJyaWRlOlxuICAgICAgICAgICAgcHJvcHMuZGV0YWlsRGFzaGJvYXJkUGVyaW9kT3ZlcnJpZGUgPz8gUGVyaW9kT3ZlcnJpZGUuSU5IRVJJVCxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICB0aGlzLmRhc2hib2FyZHNbRGVmYXVsdERhc2hib2FyZHMuQUxBUk1TXSA9IHRoaXMuYWxhcm1EYXNoYm9hcmQ7XG4gICAgfVxuXG4gICAgdGhpcy5hbnlEYXNoYm9hcmRDcmVhdGVkID0gYW55RGFzaGJvYXJkQ3JlYXRlZDtcbiAgfVxuXG4gIGFkZFNlZ21lbnQocHJvcHM6IElEYXNoYm9hcmRGYWN0b3J5UHJvcHMpIHtcbiAgICBpZiAoKHByb3BzLm92ZXJyaWRlUHJvcHM/LmFkZFRvRGV0YWlsRGFzaGJvYXJkID8/IHRydWUpICYmIHRoaXMuZGFzaGJvYXJkKSB7XG4gICAgICB0aGlzLmRhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQud2lkZ2V0cygpKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKHByb3BzLm92ZXJyaWRlUHJvcHM/LmFkZFRvU3VtbWFyeURhc2hib2FyZCA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5zdW1tYXJ5RGFzaGJvYXJkXG4gICAgKSB7XG4gICAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmQuYWRkV2lkZ2V0cyguLi5wcm9wcy5zZWdtZW50LnN1bW1hcnlXaWRnZXRzKCkpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAocHJvcHMub3ZlcnJpZGVQcm9wcz8uYWRkVG9BbGFybURhc2hib2FyZCA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5hbGFybURhc2hib2FyZFxuICAgICkge1xuICAgICAgdGhpcy5hbGFybURhc2hib2FyZC5hZGRXaWRnZXRzKC4uLnByb3BzLnNlZ21lbnQuYWxhcm1XaWRnZXRzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFkZER5bmFtaWNTZWdtZW50KHNlZ21lbnQ6IElEeW5hbWljRGFzaGJvYXJkU2VnbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZGFzaGJvYXJkPy5hZGRXaWRnZXRzKFxuICAgICAgLi4uc2VnbWVudC53aWRnZXRzRm9yRGFzaGJvYXJkKERlZmF1bHREYXNoYm9hcmRzLkRFVEFJTCksXG4gICAgKTtcbiAgICB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ/LmFkZFdpZGdldHMoXG4gICAgICAuLi5zZWdtZW50LndpZGdldHNGb3JEYXNoYm9hcmQoRGVmYXVsdERhc2hib2FyZHMuU1VNTUFSWSksXG4gICAgKTtcbiAgICB0aGlzLmFsYXJtRGFzaGJvYXJkPy5hZGRXaWRnZXRzKFxuICAgICAgLi4uc2VnbWVudC53aWRnZXRzRm9yRGFzaGJvYXJkKERlZmF1bHREYXNoYm9hcmRzLkFMQVJNUyksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVEYXNoYm9hcmQoXG4gICAgcmVuZGVyaW5nUHJlZmVyZW5jZTogRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZSxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBEYXNoYm9hcmRQcm9wcyxcbiAgKSB7XG4gICAgc3dpdGNoIChyZW5kZXJpbmdQcmVmZXJlbmNlKSB7XG4gICAgICBjYXNlIERhc2hib2FyZFJlbmRlcmluZ1ByZWZlcmVuY2UuSU5URVJBQ1RJVkVfT05MWTpcbiAgICAgICAgcmV0dXJuIG5ldyBEYXNoYm9hcmQodGhpcywgaWQsIHByb3BzKTtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5CSVRNQVBfT05MWTpcbiAgICAgICAgcmV0dXJuIG5ldyBCaXRtYXBEYXNoYm9hcmQodGhpcywgaWQsIHByb3BzKTtcbiAgICAgIGNhc2UgRGFzaGJvYXJkUmVuZGVyaW5nUHJlZmVyZW5jZS5JTlRFUkFDVElWRV9BTkRfQklUTUFQOlxuICAgICAgICByZXR1cm4gbmV3IERhc2hib2FyZFdpdGhCaXRtYXBDb3B5KHRoaXMsIGlkLCBwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlZERhc2hib2FyZCgpOiBEYXNoYm9hcmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmRhc2hib2FyZDtcbiAgfVxuXG4gIGNyZWF0ZWRTdW1tYXJ5RGFzaGJvYXJkKCk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3VtbWFyeURhc2hib2FyZDtcbiAgfVxuXG4gIGNyZWF0ZWRBbGFybURhc2hib2FyZCgpOiBEYXNoYm9hcmQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFsYXJtRGFzaGJvYXJkO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkKG5hbWU6IHN0cmluZyk6IERhc2hib2FyZCB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLlNVTU1BUlk6XG4gICAgICAgIHJldHVybiB0aGlzLnN1bW1hcnlEYXNoYm9hcmQ7XG4gICAgICBjYXNlIERlZmF1bHREYXNoYm9hcmRzLkRFVEFJTDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkO1xuICAgICAgY2FzZSBEZWZhdWx0RGFzaGJvYXJkcy5BTEFSTVM6XG4gICAgICAgIHJldHVybiB0aGlzLmFsYXJtRGFzaGJvYXJkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkYXNoYm9hcmQgbmFtZSFcIik7XG4gICAgfVxuICB9XG59XG4iXX0=