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

103 lines 17.2 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.KinesisAlarmFactory = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch"); class KinesisAlarmFactory { constructor(alarmFactory) { this.alarmFactory = alarmFactory; } addIteratorMaxAgeAlarm(metric, props, disambiguator) { return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.MISSING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold: props.maxAgeInMillis, alarmNameSuffix: "Iterator-Age-Max", alarmDescription: `Iterator Max Age is too high.`, // we will dedupe any kind of message count issue to the same ticket alarmDedupeStringSuffix: "AnyDataStreamIteratorMaxAge", }); } addPutRecordsThrottledAlarm(metric, props, disambiguator) { const threshold = props.maxRecordsThrottledThreshold; return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.NOT_BREACHING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold: threshold, alarmNameSuffix: "PutRecordsThrottled", alarmDescription: `Number of throttled PutRecords exceeded threshold of ${threshold}`, // we will dedupe any kind of message count issue to the same ticket alarmDedupeStringSuffix: "PutRecordsThrottled", }); } addPutRecordsFailedAlarm(metric, props, disambiguator) { const threshold = props.maxRecordsFailedThreshold; return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.NOT_BREACHING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold, alarmNameSuffix: "PutRecordsFailed", alarmDescription: `Number of failed PutRecords exceeded threshold of ${threshold}`, // we will dedupe any kind of message count issue to the same ticket alarmDedupeStringSuffix: "PutRecordsFailed", }); } addFirehoseStreamExceedSafetyThresholdAlarm(metric, metricName, quotaName, props, disambiguator) { const threshold = props.safetyThresholdLimit; if (threshold < 0 || threshold >= 1) { throw new Error(`safetyThresholdLimit must be in range [0.0, 1.0) for ${metricName}ExceedThresholdAlarm.`); } return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.NOT_BREACHING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold, alarmNameSuffix: metricName, alarmDescription: `${metricName} exceeded ${quotaName} alarming threshold of ${threshold}`, // we will dedupe any kind of message count issue to the same ticket alarmDedupeStringSuffix: `${metricName}ExceedThresholdLimit`, }); } addProvisionedReadThroughputExceededAlarm(metric, props, disambiguator) { const threshold = props.maxRecordsThrottledThreshold; return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.NOT_BREACHING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold, alarmNameSuffix: "ReadThroughputExceeded", alarmDescription: `Number of records resulting in read throughput capacity throttling reached the threshold of ${threshold}.`, }); } addProvisionedWriteThroughputExceededAlarm(metric, props, disambiguator) { const threshold = props.maxRecordsThrottledThreshold; return this.alarmFactory.addAlarm(metric, { treatMissingData: props.treatMissingDataOverride ?? aws_cloudwatch_1.TreatMissingData.NOT_BREACHING, comparisonOperator: props.comparisonOperatorOverride ?? aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_THRESHOLD, ...props, disambiguator, threshold, alarmNameSuffix: "WriteThroughputExceeded", alarmDescription: `Number of records resulting in write throughput capacity throttling reached the threshold of ${threshold}.`, }); } } exports.KinesisAlarmFactory = KinesisAlarmFactory; _a = JSII_RTTI_SYMBOL_1; KinesisAlarmFactory[_a] = { fqn: "cdk-monitoring-constructs.KinesisAlarmFactory", version: "9.12.0" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2luZXNpc0FsYXJtRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIktpbmVzaXNBbGFybUZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrREFHb0M7QUF3QnBDLE1BQWEsbUJBQW1CO0lBRzlCLFlBQVksWUFBMEI7UUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUNwQixNQUE4QixFQUM5QixLQUE4QixFQUM5QixhQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN4QyxnQkFBZ0IsRUFDZCxLQUFLLENBQUMsd0JBQXdCLElBQUksaUNBQWdCLENBQUMsT0FBTztZQUM1RCxrQkFBa0IsRUFDaEIsS0FBSyxDQUFDLDBCQUEwQjtnQkFDaEMsbUNBQWtCLENBQUMsc0JBQXNCO1lBQzNDLEdBQUcsS0FBSztZQUNSLGFBQWE7WUFDYixTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDL0IsZUFBZSxFQUFFLGtCQUFrQjtZQUNuQyxnQkFBZ0IsRUFBRSwrQkFBK0I7WUFDakQsb0VBQW9FO1lBQ3BFLHVCQUF1QixFQUFFLDZCQUE2QjtTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkJBQTJCLENBQ3pCLE1BQThCLEVBQzlCLEtBQWdDLEVBQ2hDLGFBQXNCO1FBRXRCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN4QyxnQkFBZ0IsRUFDZCxLQUFLLENBQUMsd0JBQXdCLElBQUksaUNBQWdCLENBQUMsYUFBYTtZQUNsRSxrQkFBa0IsRUFDaEIsS0FBSyxDQUFDLDBCQUEwQjtnQkFDaEMsbUNBQWtCLENBQUMsc0JBQXNCO1lBQzNDLEdBQUcsS0FBSztZQUNSLGFBQWE7WUFDYixT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YTtZQUNiLFNBQVM7WUFDVCxlQUFlLEVBQUUseUJBQXlCO1lBQzFDLGdCQUFnQixFQUFFLGdHQUFnRyxTQUFTLEdBQUc7U0FDL0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1SUgsa0RBNklDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBUcmVhdE1pc3NpbmdEYXRhLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuaW1wb3J0IHsgQWxhcm1GYWN0b3J5LCBDdXN0b21BbGFybVRocmVzaG9sZCB9IGZyb20gXCIuLi8uLi9hbGFybVwiO1xuaW1wb3J0IHsgTWV0cmljV2l0aEFsYXJtU3VwcG9ydCB9IGZyb20gXCIuLi8uLi9tZXRyaWNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXhJdGVyYXRvckFnZVRocmVzaG9sZCBleHRlbmRzIEN1c3RvbUFsYXJtVGhyZXNob2xkIHtcbiAgcmVhZG9ubHkgbWF4QWdlSW5NaWxsaXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRzVGhyb3R0bGVkVGhyZXNob2xkIGV4dGVuZHMgQ3VzdG9tQWxhcm1UaHJlc2hvbGQge1xuICByZWFkb25seSBtYXhSZWNvcmRzVGhyb3R0bGVkVGhyZXNob2xkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlyZWhvc2VTdHJlYW1MaW1pdFRocmVzaG9sZCBleHRlbmRzIEN1c3RvbUFsYXJtVGhyZXNob2xkIHtcbiAgLyoqXG4gICAqIFRocmVzaG9sZCB2YWx1ZSBiZXR3ZWVuIFswLjAsIDEuMCkgZm9yIHdoZW4gdGhlIGFsYXJtIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICByZWFkb25seSBzYWZldHlUaHJlc2hvbGRMaW1pdDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZHNGYWlsZWRUaHJlc2hvbGQgZXh0ZW5kcyBDdXN0b21BbGFybVRocmVzaG9sZCB7XG4gIHJlYWRvbmx5IG1heFJlY29yZHNGYWlsZWRUaHJlc2hvbGQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEtpbmVzaXNBbGFybUZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxhcm1GYWN0b3J5OiBBbGFybUZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoYWxhcm1GYWN0b3J5OiBBbGFybUZhY3RvcnkpIHtcbiAgICB0aGlzLmFsYXJtRmFjdG9yeSA9IGFsYXJtRmFjdG9yeTtcbiAgfVxuXG4gIGFkZEl0ZXJhdG9yTWF4QWdlQWxhcm0oXG4gICAgbWV0cmljOiBNZXRyaWNXaXRoQWxhcm1TdXBwb3J0LFxuICAgIHByb3BzOiBNYXhJdGVyYXRvckFnZVRocmVzaG9sZCxcbiAgICBkaXNhbWJpZ3VhdG9yPzogc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5hbGFybUZhY3RvcnkuYWRkQWxhcm0obWV0cmljLCB7XG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOlxuICAgICAgICBwcm9wcy50cmVhdE1pc3NpbmdEYXRhT3ZlcnJpZGUgPz8gVHJlYXRNaXNzaW5nRGF0YS5NSVNTSU5HLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICBwcm9wcy5jb21wYXJpc29uT3BlcmF0b3JPdmVycmlkZSA/P1xuICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGlzYW1iaWd1YXRvcixcbiAgICAgIHRocmVzaG9sZDogcHJvcHMubWF4QWdlSW5NaWxsaXMsXG4gICAgICBhbGFybU5hbWVTdWZmaXg6IFwiSXRlcmF0b3ItQWdlLU1heFwiLFxuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYEl0ZXJhdG9yIE1heCBBZ2UgaXMgdG9vIGhpZ2guYCxcbiAgICAgIC8vIHdlIHdpbGwgZGVkdXBlIGFueSBraW5kIG9mIG1lc3NhZ2UgY291bnQgaXNzdWUgdG8gdGhlIHNhbWUgdGlja2V0XG4gICAgICBhbGFybURlZHVwZVN0cmluZ1N1ZmZpeDogXCJBbnlEYXRhU3RyZWFtSXRlcmF0b3JNYXhBZ2VcIixcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFB1dFJlY29yZHNUaHJvdHRsZWRBbGFybShcbiAgICBtZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQsXG4gICAgcHJvcHM6IFJlY29yZHNUaHJvdHRsZWRUaHJlc2hvbGQsXG4gICAgZGlzYW1iaWd1YXRvcj86IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gcHJvcHMubWF4UmVjb3Jkc1Rocm90dGxlZFRocmVzaG9sZDtcbiAgICByZXR1cm4gdGhpcy5hbGFybUZhY3RvcnkuYWRkQWxhcm0obWV0cmljLCB7XG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOlxuICAgICAgICBwcm9wcy50cmVhdE1pc3NpbmdEYXRhT3ZlcnJpZGUgPz8gVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICBwcm9wcy5jb21wYXJpc29uT3BlcmF0b3JPdmVycmlkZSA/P1xuICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGlzYW1iaWd1YXRvcixcbiAgICAgIHRocmVzaG9sZDogdGhyZXNob2xkLFxuICAgICAgYWxhcm1OYW1lU3VmZml4OiBcIlB1dFJlY29yZHNUaHJvdHRsZWRcIixcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBOdW1iZXIgb2YgdGhyb3R0bGVkIFB1dFJlY29yZHMgZXhjZWVkZWQgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkfWAsXG4gICAgICAvLyB3ZSB3aWxsIGRlZHVwZSBhbnkga2luZCBvZiBtZXNzYWdlIGNvdW50IGlzc3VlIHRvIHRoZSBzYW1lIHRpY2tldFxuICAgICAgYWxhcm1EZWR1cGVTdHJpbmdTdWZmaXg6IFwiUHV0UmVjb3Jkc1Rocm90dGxlZFwiLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkUHV0UmVjb3Jkc0ZhaWxlZEFsYXJtKFxuICAgIG1ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydCxcbiAgICBwcm9wczogUmVjb3Jkc0ZhaWxlZFRocmVzaG9sZCxcbiAgICBkaXNhbWJpZ3VhdG9yPzogc3RyaW5nLFxuICApIHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBwcm9wcy5tYXhSZWNvcmRzRmFpbGVkVGhyZXNob2xkO1xuICAgIHJldHVybiB0aGlzLmFsYXJtRmFjdG9yeS5hZGRBbGFybShtZXRyaWMsIHtcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6XG4gICAgICAgIHByb3BzLnRyZWF0TWlzc2luZ0RhdGFPdmVycmlkZSA/PyBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgIHByb3BzLmNvbXBhcmlzb25PcGVyYXRvck92ZXJyaWRlID8/XG4gICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaXNhbWJpZ3VhdG9yLFxuICAgICAgdGhyZXNob2xkLFxuICAgICAgYWxhcm1OYW1lU3VmZml4OiBcIlB1dFJlY29yZHNGYWlsZWRcIixcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBOdW1iZXIgb2YgZmFpbGVkIFB1dFJlY29yZHMgZXhjZWVkZWQgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkfWAsXG4gICAgICAvLyB3ZSB3aWxsIGRlZHVwZSBhbnkga2luZCBvZiBtZXNzYWdlIGNvdW50IGlzc3VlIHRvIHRoZSBzYW1lIHRpY2tldFxuICAgICAgYWxhcm1EZWR1cGVTdHJpbmdTdWZmaXg6IFwiUHV0UmVjb3Jkc0ZhaWxlZFwiLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkRmlyZWhvc2VTdHJlYW1FeGNlZWRTYWZldHlUaHJlc2hvbGRBbGFybShcbiAgICBtZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQsXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHF1b3RhTmFtZTogc3RyaW5nLFxuICAgIHByb3BzOiBGaXJlaG9zZVN0cmVhbUxpbWl0VGhyZXNob2xkLFxuICAgIGRpc2FtYmlndWF0b3I/OiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IHByb3BzLnNhZmV0eVRocmVzaG9sZExpbWl0O1xuICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBzYWZldHlUaHJlc2hvbGRMaW1pdCBtdXN0IGJlIGluIHJhbmdlIFswLjAsIDEuMCkgZm9yICR7bWV0cmljTmFtZX1FeGNlZWRUaHJlc2hvbGRBbGFybS5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbGFybUZhY3RvcnkuYWRkQWxhcm0obWV0cmljLCB7XG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOlxuICAgICAgICBwcm9wcy50cmVhdE1pc3NpbmdEYXRhT3ZlcnJpZGUgPz8gVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICBwcm9wcy5jb21wYXJpc29uT3BlcmF0b3JPdmVycmlkZSA/P1xuICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGlzYW1iaWd1YXRvcixcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIGFsYXJtTmFtZVN1ZmZpeDogbWV0cmljTmFtZSxcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGAke21ldHJpY05hbWV9IGV4Y2VlZGVkICR7cXVvdGFOYW1lfSBhbGFybWluZyB0aHJlc2hvbGQgb2YgJHt0aHJlc2hvbGR9YCxcbiAgICAgIC8vIHdlIHdpbGwgZGVkdXBlIGFueSBraW5kIG9mIG1lc3NhZ2UgY291bnQgaXNzdWUgdG8gdGhlIHNhbWUgdGlja2V0XG4gICAgICBhbGFybURlZHVwZVN0cmluZ1N1ZmZpeDogYCR7bWV0cmljTmFtZX1FeGNlZWRUaHJlc2hvbGRMaW1pdGAsXG4gICAgfSk7XG4gIH1cblxuICBhZGRQcm92aXNpb25lZFJlYWRUaHJvdWdocHV0RXhjZWVkZWRBbGFybShcbiAgICBtZXRyaWM6IE1ldHJpY1dpdGhBbGFybVN1cHBvcnQsXG4gICAgcHJvcHM6IFJlY29yZHNUaHJvdHRsZWRUaHJlc2hvbGQsXG4gICAgZGlzYW1iaWd1YXRvcjogc3RyaW5nLFxuICApIHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBwcm9wcy5tYXhSZWNvcmRzVGhyb3R0bGVkVGhyZXNob2xkO1xuICAgIHJldHVybiB0aGlzLmFsYXJtRmFjdG9yeS5hZGRBbGFybShtZXRyaWMsIHtcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6XG4gICAgICAgIHByb3BzLnRyZWF0TWlzc2luZ0RhdGFPdmVycmlkZSA/PyBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgIHByb3BzLmNvbXBhcmlzb25PcGVyYXRvck92ZXJyaWRlID8/XG4gICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaXNhbWJpZ3VhdG9yLFxuICAgICAgdGhyZXNob2xkLFxuICAgICAgYWxhcm1OYW1lU3VmZml4OiBcIlJlYWRUaHJvdWdocHV0RXhjZWVkZWRcIixcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBOdW1iZXIgb2YgcmVjb3JkcyByZXN1bHRpbmcgaW4gcmVhZCB0aHJvdWdocHV0IGNhcGFjaXR5IHRocm90dGxpbmcgcmVhY2hlZCB0aGUgdGhyZXNob2xkIG9mICR7dGhyZXNob2xkfS5gLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkUHJvdmlzaW9uZWRXcml0ZVRocm91Z2hwdXRFeGNlZWRlZEFsYXJtKFxuICAgIG1ldHJpYzogTWV0cmljV2l0aEFsYXJtU3VwcG9ydCxcbiAgICBwcm9wczogUmVjb3Jkc1Rocm90dGxlZFRocmVzaG9sZCxcbiAgICBkaXNhbWJpZ3VhdG9yOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IHRocmVzaG9sZCA9IHByb3BzLm1heFJlY29yZHNUaHJvdHRsZWRUaHJlc2hvbGQ7XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1GYWN0b3J5LmFkZEFsYXJtKG1ldHJpYywge1xuICAgICAgdHJlYXRNaXNzaW5nRGF0YTpcbiAgICAgICAgcHJvcHMudHJlYXRNaXNzaW5nRGF0YU92ZXJyaWRlID8/IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgcHJvcHMuY29tcGFyaXNvbk9wZXJhdG9yT3ZlcnJpZGUgPz9cbiAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9USFJFU0hPTEQsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRpc2FtYmlndWF0b3IsXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBhbGFybU5hbWVTdWZmaXg6IFwiV3JpdGVUaHJvdWdocHV0RXhjZWVkZWRcIixcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBOdW1iZXIgb2YgcmVjb3JkcyByZXN1bHRpbmcgaW4gd3JpdGUgdGhyb3VnaHB1dCBjYXBhY2l0eSB0aHJvdHRsaW5nIHJlYWNoZWQgdGhlIHRocmVzaG9sZCBvZiAke3RocmVzaG9sZH0uYCxcbiAgICB9KTtcbiAgfVxufVxuIl19