cdk-monitoring-constructs
Version:
[](https://gitpod.io/#https://github.com/cdklabs/cdk-monitoring-constructs) [](https://badge
117 lines • 18.6 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KinesisFirehoseMonitoring = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
const common_1 = require("../../common");
const dashboard_1 = require("../../dashboard");
const KinesisFirehoseMetricFactory_1 = require("./KinesisFirehoseMetricFactory");
class KinesisFirehoseMonitoring extends common_1.Monitoring {
constructor(scope, props) {
super(scope);
const namingStrategy = new dashboard_1.MonitoringNamingStrategy({
...props,
fallbackConstructName: props.deliveryStreamName,
});
this.title = namingStrategy.resolveHumanReadableName();
this.streamUrl = scope
.createAwsConsoleUrlFactory()
.getKinesisFirehoseDeliveryStreamUrl(props.deliveryStreamName);
const metricFactory = new KinesisFirehoseMetricFactory_1.KinesisFirehoseMetricFactory(scope.createMetricFactory(), props);
const alarmFactory = this.createAlarmFactory(namingStrategy.resolveAlarmFriendlyName());
this.kinesisAlarmFactory = new common_1.KinesisAlarmFactory(alarmFactory);
this.recordCountAnnotations = [];
this.incomingBytesMetric = metricFactory.metricIncomingBytes();
this.incomingRecordsMetric = metricFactory.metricIncomingRecordCount();
this.throttledRecordsMetric = metricFactory.metricThrottledRecordCount();
this.successfulConversionMetric =
metricFactory.metricSuccessfulConversionCount();
this.failedConversionMetric = metricFactory.metricFailedConversionCount();
this.putRecordLatency = metricFactory.metricPutRecordLatencyP90InMillis();
this.putRecordBatchLatency =
metricFactory.metricPutRecordBatchLatencyP90InMillis();
this.incomingBytesToLimitRate =
metricFactory.metricIncomingBytesToLimitRate();
this.incomingRecordsToLimitRate =
metricFactory.metricIncomingRecordsToLimitRate();
this.incomingPutRequestsToLimitRate =
metricFactory.metricIncomingPutRequestsToLimitRate();
for (const disambiguator in props.addRecordsThrottledAlarm) {
const alarmProps = props.addRecordsThrottledAlarm[disambiguator];
const createdAlarm = this.kinesisAlarmFactory.addPutRecordsThrottledAlarm(this.throttledRecordsMetric, alarmProps, disambiguator);
this.recordCountAnnotations.push(createdAlarm.annotation);
this.addAlarm(createdAlarm);
}
props.useCreatedAlarms?.consume(this.createdAlarms());
}
summaryWidgets() {
return [
this.createTitleWidget(),
this.createIncomingRecordWidget(common_1.HalfWidth, common_1.DefaultSummaryWidgetHeight),
this.createConversionWidget(common_1.HalfWidth, common_1.DefaultSummaryWidgetHeight),
];
}
widgets() {
return [
this.createTitleWidget(),
this.createIncomingRecordWidget(common_1.QuarterWidth, common_1.DefaultGraphWidgetHeight),
this.createLatencyWidget(common_1.QuarterWidth, common_1.DefaultGraphWidgetHeight),
this.createConversionWidget(common_1.QuarterWidth, common_1.DefaultGraphWidgetHeight),
this.createLimitWidget(common_1.QuarterWidth, common_1.DefaultGraphWidgetHeight),
];
}
createTitleWidget() {
return new dashboard_1.MonitoringHeaderWidget({
family: "Firehose Delivery Stream",
title: this.title,
goToLinkUrl: this.streamUrl,
});
}
createIncomingRecordWidget(width, height) {
return new aws_cloudwatch_1.GraphWidget({
width,
height,
title: "Records",
left: [this.incomingRecordsMetric, this.throttledRecordsMetric],
leftYAxis: common_1.CountAxisFromZero,
leftAnnotations: this.recordCountAnnotations,
});
}
createLatencyWidget(width, height) {
return new aws_cloudwatch_1.GraphWidget({
width,
height,
title: "Latency (P90)",
left: [this.putRecordLatency, this.putRecordBatchLatency],
leftYAxis: common_1.TimeAxisMillisFromZero,
});
}
createConversionWidget(width, height) {
return new aws_cloudwatch_1.GraphWidget({
width,
height,
title: "Conversions",
left: [this.successfulConversionMetric, this.failedConversionMetric],
leftYAxis: common_1.CountAxisFromZero,
});
}
createLimitWidget(width, height) {
return new aws_cloudwatch_1.GraphWidget({
width,
height,
title: "Limits (rate)",
left: [
this.incomingBytesToLimitRate.with({ label: "Bytes" }),
this.incomingRecordsToLimitRate.with({ label: "Records" }),
this.incomingPutRequestsToLimitRate.with({ label: "PutRequests" }),
],
leftYAxis: common_1.RateAxisFromZero,
leftAnnotations: [{ value: 1, label: "100% usage" }],
});
}
}
exports.KinesisFirehoseMonitoring = KinesisFirehoseMonitoring;
_a = JSII_RTTI_SYMBOL_1;
KinesisFirehoseMonitoring[_a] = { fqn: "cdk-monitoring-constructs.KinesisFirehoseMonitoring", version: "1.21.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2luZXNpc0ZpcmVob3NlTW9uaXRvcmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIktpbmVzaXNGaXJlaG9zZU1vbml0b3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrREFJb0M7QUFFcEMseUNBY3NCO0FBQ3RCLCtDQUd5QjtBQUN6QixpRkFHd0M7QUFVeEMsTUFBYSx5QkFBMEIsU0FBUSxtQkFBVTtJQWtCdkQsWUFBWSxLQUFzQixFQUFFLEtBQXFDO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLE1BQU0sY0FBYyxHQUFHLElBQUksb0NBQXdCLENBQUM7WUFDbEQsR0FBRyxLQUFLO1lBQ1IscUJBQXFCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtTQUNoRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSzthQUNuQiwwQkFBMEIsRUFBRTthQUM1QixtQ0FBbUMsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVqRSxNQUFNLGFBQWEsR0FBRyxJQUFJLDJEQUE0QixDQUNwRCxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFDM0IsS0FBSyxDQUNOLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzFDLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxDQUMxQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksNEJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxhQUFhLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsMEJBQTBCO1lBQzdCLGFBQWEsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxhQUFhLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUMxRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLHFCQUFxQjtZQUN4QixhQUFhLENBQUMsc0NBQXNDLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsd0JBQXdCO1lBQzNCLGFBQWEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQywwQkFBMEI7WUFDN0IsYUFBYSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLDhCQUE4QjtZQUNqQyxhQUFhLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztRQUV2RCxLQUFLLE1BQU0sYUFBYSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDJCQUEyQixDQUN2RSxJQUFJLENBQUMsc0JBQXNCLEVBQzNCLFVBQVUsRUFDVixhQUFhLENBQ2QsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDN0I7UUFFRCxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTztZQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixJQUFJLENBQUMsMEJBQTBCLENBQUMsa0JBQVMsRUFBRSxtQ0FBMEIsQ0FBQztZQUN0RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQVMsRUFBRSxtQ0FBMEIsQ0FBQztTQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxxQkFBWSxFQUFFLGlDQUF3QixDQUFDO1lBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBWSxFQUFFLGlDQUF3QixDQUFDO1lBQ2hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBWSxFQUFFLGlDQUF3QixDQUFDO1lBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBWSxFQUFFLGlDQUF3QixDQUFDO1NBQy9ELENBQUM7SUFDSixDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLE9BQU8sSUFBSSxrQ0FBc0IsQ0FBQztZQUNoQyxNQUFNLEVBQUUsMEJBQTBCO1lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLDBCQUEwQixDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ2hFLE9BQU8sSUFBSSw0QkFBVyxDQUFDO1lBQ3JCLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUMvRCxTQUFTLEVBQUUsMEJBQWlCO1lBQzVCLGVBQWUsRUFBRSxJQUFJLENBQUMsc0JBQXNCO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUN6RCxPQUFPLElBQUksNEJBQVcsQ0FBQztZQUNyQixLQUFLO1lBQ0wsTUFBTTtZQUNOLEtBQUssRUFBRSxlQUFlO1lBQ3RCLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDekQsU0FBUyxFQUFFLCtCQUFzQjtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsc0JBQXNCLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDNUQsT0FBTyxJQUFJLDRCQUFXLENBQUM7WUFDckIsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLLEVBQUUsYUFBYTtZQUNwQixJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3BFLFNBQVMsRUFBRSwwQkFBaUI7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQ3ZELE9BQU8sSUFBSSw0QkFBVyxDQUFDO1lBQ3JCLEtBQUs7WUFDTCxNQUFNO1lBQ04sS0FBSyxFQUFFLGVBQWU7WUFDdEIsSUFBSSxFQUFFO2dCQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzFELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDbkU7WUFDRCxTQUFTLEVBQUUseUJBQWdCO1lBQzNCLGVBQWUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUM7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1SUgsOERBNklDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgR3JhcGhXaWRnZXQsXG4gIEhvcml6b250YWxBbm5vdGF0aW9uLFxuICBJV2lkZ2V0LFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuaW1wb3J0IHtcbiAgQmFzZU1vbml0b3JpbmdQcm9wcyxcbiAgQ291bnRBeGlzRnJvbVplcm8sXG4gIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCxcbiAgRGVmYXVsdFN1bW1hcnlXaWRnZXRIZWlnaHQsXG4gIEhhbGZXaWR0aCxcbiAgS2luZXNpc0FsYXJtRmFjdG9yeSxcbiAgTWV0cmljV2l0aEFsYXJtU3VwcG9ydCxcbiAgTW9uaXRvcmluZyxcbiAgTW9uaXRvcmluZ1Njb3BlLFxuICBRdWFydGVyV2lkdGgsXG4gIFJhdGVBeGlzRnJvbVplcm8sXG4gIFJlY29yZHNUaHJvdHRsZWRUaHJlc2hvbGQsXG4gIFRpbWVBeGlzTWlsbGlzRnJvbVplcm8sXG59IGZyb20gXCIuLi8uLi9jb21tb25cIjtcbmltcG9ydCB7XG4gIE1vbml0b3JpbmdIZWFkZXJXaWRnZXQsXG4gIE1vbml0b3JpbmdOYW1pbmdTdHJhdGVneSxcbn0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZFwiO1xuaW1wb3J0IHtcbiAgS2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeSxcbiAgS2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeVByb3BzLFxufSBmcm9tIFwiLi9LaW5lc2lzRmlyZWhvc2VNZXRyaWNGYWN0b3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc0ZpcmVob3NlTW9uaXRvcmluZ09wdGlvbnMgZXh0ZW5kcyBCYXNlTW9uaXRvcmluZ1Byb3BzIHtcbiAgcmVhZG9ubHkgYWRkUmVjb3Jkc1Rocm90dGxlZEFsYXJtPzogUmVjb3JkPHN0cmluZywgUmVjb3Jkc1Rocm90dGxlZFRocmVzaG9sZD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc0ZpcmVob3NlTW9uaXRvcmluZ1Byb3BzXG4gIGV4dGVuZHMgS2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeVByb3BzLFxuICAgIEtpbmVzaXNGaXJlaG9zZU1vbml0b3JpbmdPcHRpb25zIHt9XG5cbmV4cG9ydCBjbGFzcyBLaW5lc2lzRmlyZWhvc2VNb25pdG9yaW5nIGV4dGVuZHMgTW9uaXRvcmluZyB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RyZWFtVXJsPzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBraW5lc2lzQWxhcm1GYWN0b3J5OiBLaW5lc2lzQWxhcm1GYWN0b3J5O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVjb3JkQ291bnRBbm5vdGF0aW9uczogSG9yaXpvbnRhbEFubm90YXRpb25bXTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5jb21pbmdCeXRlc01ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGluY29taW5nUmVjb3Jkc01ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRocm90dGxlZFJlY29yZHNNZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWNjZXNzZnVsQ29udmVyc2lvbk1ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhaWxlZENvbnZlcnNpb25NZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBwdXRSZWNvcmRMYXRlbmN5OiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHV0UmVjb3JkQmF0Y2hMYXRlbmN5OiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5jb21pbmdCeXRlc1RvTGltaXRSYXRlOiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5jb21pbmdSZWNvcmRzVG9MaW1pdFJhdGU6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbmNvbWluZ1B1dFJlcXVlc3RzVG9MaW1pdFJhdGU6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IE1vbml0b3JpbmdTY29wZSwgcHJvcHM6IEtpbmVzaXNGaXJlaG9zZU1vbml0b3JpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IG5hbWluZ1N0cmF0ZWd5ID0gbmV3IE1vbml0b3JpbmdOYW1pbmdTdHJhdGVneSh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGZhbGxiYWNrQ29uc3RydWN0TmFtZTogcHJvcHMuZGVsaXZlcnlTdHJlYW1OYW1lLFxuICAgIH0pO1xuICAgIHRoaXMudGl0bGUgPSBuYW1pbmdTdHJhdGVneS5yZXNvbHZlSHVtYW5SZWFkYWJsZU5hbWUoKTtcbiAgICB0aGlzLnN0cmVhbVVybCA9IHNjb3BlXG4gICAgICAuY3JlYXRlQXdzQ29uc29sZVVybEZhY3RvcnkoKVxuICAgICAgLmdldEtpbmVzaXNGaXJlaG9zZURlbGl2ZXJ5U3RyZWFtVXJsKHByb3BzLmRlbGl2ZXJ5U3RyZWFtTmFtZSk7XG5cbiAgICBjb25zdCBtZXRyaWNGYWN0b3J5ID0gbmV3IEtpbmVzaXNGaXJlaG9zZU1ldHJpY0ZhY3RvcnkoXG4gICAgICBzY29wZS5jcmVhdGVNZXRyaWNGYWN0b3J5KCksXG4gICAgICBwcm9wc1xuICAgICk7XG4gICAgY29uc3QgYWxhcm1GYWN0b3J5ID0gdGhpcy5jcmVhdGVBbGFybUZhY3RvcnkoXG4gICAgICBuYW1pbmdTdHJhdGVneS5yZXNvbHZlQWxhcm1GcmllbmRseU5hbWUoKVxuICAgICk7XG4gICAgdGhpcy5raW5lc2lzQWxhcm1GYWN0b3J5ID0gbmV3IEtpbmVzaXNBbGFybUZhY3RvcnkoYWxhcm1GYWN0b3J5KTtcbiAgICB0aGlzLnJlY29yZENvdW50QW5ub3RhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMuaW5jb21pbmdCeXRlc01ldHJpYyA9IG1ldHJpY0ZhY3RvcnkubWV0cmljSW5jb21pbmdCeXRlcygpO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRzTWV0cmljID0gbWV0cmljRmFjdG9yeS5tZXRyaWNJbmNvbWluZ1JlY29yZENvdW50KCk7XG4gICAgdGhpcy50aHJvdHRsZWRSZWNvcmRzTWV0cmljID0gbWV0cmljRmFjdG9yeS5tZXRyaWNUaHJvdHRsZWRSZWNvcmRDb3VudCgpO1xuICAgIHRoaXMuc3VjY2Vzc2Z1bENvbnZlcnNpb25NZXRyaWMgPVxuICAgICAgbWV0cmljRmFjdG9yeS5tZXRyaWNTdWNjZXNzZnVsQ29udmVyc2lvbkNvdW50KCk7XG4gICAgdGhpcy5mYWlsZWRDb252ZXJzaW9uTWV0cmljID0gbWV0cmljRmFjdG9yeS5tZXRyaWNGYWlsZWRDb252ZXJzaW9uQ291bnQoKTtcbiAgICB0aGlzLnB1dFJlY29yZExhdGVuY3kgPSBtZXRyaWNGYWN0b3J5Lm1ldHJpY1B1dFJlY29yZExhdGVuY3lQOTBJbk1pbGxpcygpO1xuICAgIHRoaXMucHV0UmVjb3JkQmF0Y2hMYXRlbmN5ID1cbiAgICAgIG1ldHJpY0ZhY3RvcnkubWV0cmljUHV0UmVjb3JkQmF0Y2hMYXRlbmN5UDkwSW5NaWxsaXMoKTtcbiAgICB0aGlzLmluY29taW5nQnl0ZXNUb0xpbWl0UmF0ZSA9XG4gICAgICBtZXRyaWNGYWN0b3J5Lm1ldHJpY0luY29taW5nQnl0ZXNUb0xpbWl0UmF0ZSgpO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRzVG9MaW1pdFJhdGUgPVxuICAgICAgbWV0cmljRmFjdG9yeS5tZXRyaWNJbmNvbWluZ1JlY29yZHNUb0xpbWl0UmF0ZSgpO1xuICAgIHRoaXMuaW5jb21pbmdQdXRSZXF1ZXN0c1RvTGltaXRSYXRlID1cbiAgICAgIG1ldHJpY0ZhY3RvcnkubWV0cmljSW5jb21pbmdQdXRSZXF1ZXN0c1RvTGltaXRSYXRlKCk7XG5cbiAgICBmb3IgKGNvbnN0IGRpc2FtYmlndWF0b3IgaW4gcHJvcHMuYWRkUmVjb3Jkc1Rocm90dGxlZEFsYXJtKSB7XG4gICAgICBjb25zdCBhbGFybVByb3BzID0gcHJvcHMuYWRkUmVjb3Jkc1Rocm90dGxlZEFsYXJtW2Rpc2FtYmlndWF0b3JdO1xuICAgICAgY29uc3QgY3JlYXRlZEFsYXJtID0gdGhpcy5raW5lc2lzQWxhcm1GYWN0b3J5LmFkZFB1dFJlY29yZHNUaHJvdHRsZWRBbGFybShcbiAgICAgICAgdGhpcy50aHJvdHRsZWRSZWNvcmRzTWV0cmljLFxuICAgICAgICBhbGFybVByb3BzLFxuICAgICAgICBkaXNhbWJpZ3VhdG9yXG4gICAgICApO1xuICAgICAgdGhpcy5yZWNvcmRDb3VudEFubm90YXRpb25zLnB1c2goY3JlYXRlZEFsYXJtLmFubm90YXRpb24pO1xuICAgICAgdGhpcy5hZGRBbGFybShjcmVhdGVkQWxhcm0pO1xuICAgIH1cblxuICAgIHByb3BzLnVzZUNyZWF0ZWRBbGFybXM/LmNvbnN1bWUodGhpcy5jcmVhdGVkQWxhcm1zKCkpO1xuICB9XG5cbiAgc3VtbWFyeVdpZGdldHMoKTogSVdpZGdldFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5jcmVhdGVUaXRsZVdpZGdldCgpLFxuICAgICAgdGhpcy5jcmVhdGVJbmNvbWluZ1JlY29yZFdpZGdldChIYWxmV2lkdGgsIERlZmF1bHRTdW1tYXJ5V2lkZ2V0SGVpZ2h0KSxcbiAgICAgIHRoaXMuY3JlYXRlQ29udmVyc2lvbldpZGdldChIYWxmV2lkdGgsIERlZmF1bHRTdW1tYXJ5V2lkZ2V0SGVpZ2h0KSxcbiAgICBdO1xuICB9XG5cbiAgd2lkZ2V0cygpOiBJV2lkZ2V0W10ge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmNyZWF0ZVRpdGxlV2lkZ2V0KCksXG4gICAgICB0aGlzLmNyZWF0ZUluY29taW5nUmVjb3JkV2lkZ2V0KFF1YXJ0ZXJXaWR0aCwgRGVmYXVsdEdyYXBoV2lkZ2V0SGVpZ2h0KSxcbiAgICAgIHRoaXMuY3JlYXRlTGF0ZW5jeVdpZGdldChRdWFydGVyV2lkdGgsIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCksXG4gICAgICB0aGlzLmNyZWF0ZUNvbnZlcnNpb25XaWRnZXQoUXVhcnRlcldpZHRoLCBEZWZhdWx0R3JhcGhXaWRnZXRIZWlnaHQpLFxuICAgICAgdGhpcy5jcmVhdGVMaW1pdFdpZGdldChRdWFydGVyV2lkdGgsIERlZmF1bHRHcmFwaFdpZGdldEhlaWdodCksXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUaXRsZVdpZGdldCgpIHtcbiAgICByZXR1cm4gbmV3IE1vbml0b3JpbmdIZWFkZXJXaWRnZXQoe1xuICAgICAgZmFtaWx5OiBcIkZpcmVob3NlIERlbGl2ZXJ5IFN0cmVhbVwiLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICBnb1RvTGlua1VybDogdGhpcy5zdHJlYW1VcmwsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW5jb21pbmdSZWNvcmRXaWRnZXQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiUmVjb3Jkc1wiLFxuICAgICAgbGVmdDogW3RoaXMuaW5jb21pbmdSZWNvcmRzTWV0cmljLCB0aGlzLnRocm90dGxlZFJlY29yZHNNZXRyaWNdLFxuICAgICAgbGVmdFlBeGlzOiBDb3VudEF4aXNGcm9tWmVybyxcbiAgICAgIGxlZnRBbm5vdGF0aW9uczogdGhpcy5yZWNvcmRDb3VudEFubm90YXRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUxhdGVuY3lXaWRnZXQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiTGF0ZW5jeSAoUDkwKVwiLFxuICAgICAgbGVmdDogW3RoaXMucHV0UmVjb3JkTGF0ZW5jeSwgdGhpcy5wdXRSZWNvcmRCYXRjaExhdGVuY3ldLFxuICAgICAgbGVmdFlBeGlzOiBUaW1lQXhpc01pbGxpc0Zyb21aZXJvLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbnZlcnNpb25XaWRnZXQod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IEdyYXBoV2lkZ2V0KHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGU6IFwiQ29udmVyc2lvbnNcIixcbiAgICAgIGxlZnQ6IFt0aGlzLnN1Y2Nlc3NmdWxDb252ZXJzaW9uTWV0cmljLCB0aGlzLmZhaWxlZENvbnZlcnNpb25NZXRyaWNdLFxuICAgICAgbGVmdFlBeGlzOiBDb3VudEF4aXNGcm9tWmVybyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVMaW1pdFdpZGdldCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgR3JhcGhXaWRnZXQoe1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICB0aXRsZTogXCJMaW1pdHMgKHJhdGUpXCIsXG4gICAgICBsZWZ0OiBbXG4gICAgICAgIHRoaXMuaW5jb21pbmdCeXRlc1RvTGltaXRSYXRlLndpdGgoeyBsYWJlbDogXCJCeXRlc1wiIH0pLFxuICAgICAgICB0aGlzLmluY29taW5nUmVjb3Jkc1RvTGltaXRSYXRlLndpdGgoeyBsYWJlbDogXCJSZWNvcmRzXCIgfSksXG4gICAgICAgIHRoaXMuaW5jb21pbmdQdXRSZXF1ZXN0c1RvTGltaXRSYXRlLndpdGgoeyBsYWJlbDogXCJQdXRSZXF1ZXN0c1wiIH0pLFxuICAgICAgXSxcbiAgICAgIGxlZnRZQXhpczogUmF0ZUF4aXNGcm9tWmVybyxcbiAgICAgIGxlZnRBbm5vdGF0aW9uczogW3sgdmFsdWU6IDEsIGxhYmVsOiBcIjEwMCUgdXNhZ2VcIiB9XSxcbiAgICB9KTtcbiAgfVxufVxuIl19