cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
73 lines • 16.8 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KinesisFirehoseMetricFactory = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const common_1 = require("../../common");
const FirehoseNamespace = "AWS/Firehose";
/**
* @see https://docs.aws.amazon.com/firehose/latest/dev/monitoring-with-cloudwatch-metrics.html
*/
class KinesisFirehoseMetricFactory extends common_1.BaseMetricFactory {
constructor(metricFactory, props) {
super(metricFactory, props);
this.dimensionsMap = {
DeliveryStreamName: props.deliveryStreamName,
};
}
metricSuccessfulConversionCount() {
return this.metricFactory.createMetric("SucceedConversion.Records", common_1.MetricStatistic.SUM, "Succeed", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricFailedConversionCount() {
return this.metricFactory.createMetric("FailedConversion.Records", common_1.MetricStatistic.SUM, "Failed", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricIncomingBytes() {
return this.metricFactory.createMetric("IncomingBytes", common_1.MetricStatistic.SUM, "Incoming (bytes)", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricIncomingPutRequests() {
return this.metricFactory.createMetric("IncomingPutRequests", common_1.MetricStatistic.SUM, "Incoming (PutRequest)", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricIncomingRecordCount() {
return this.metricFactory.createMetric("IncomingRecords", common_1.MetricStatistic.SUM, "Incoming (Records)", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricThrottledRecordCount() {
return this.metricFactory.createMetric("ThrottledRecords", common_1.MetricStatistic.SUM, "Throttled", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricPutRecordLatencyP90InMillis() {
return this.metricFactory.createMetric("PutRecord.Latency", common_1.MetricStatistic.P90, "PutRecord P90", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricPutRecordBatchLatencyP90InMillis() {
return this.metricFactory.createMetric("PutRecordBatch.Latency", common_1.MetricStatistic.P90, "PutRecordBatch P90", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricIncomingBytesToLimitRate() {
return this.metricFactory.createMetricMath("(bytes_in / PERIOD(bytes_in)) / bytes_max", {
bytes_in: this.metricIncomingBytes(),
bytes_max: this.metricBytesPerSecondLimit(),
}, "Incoming Bytes / Limit", undefined, undefined, this.region, this.account);
}
metricIncomingRecordsToLimitRate() {
return this.metricFactory.createMetricMath("(records_in / PERIOD(records_in)) / records_max", {
records_in: this.metricIncomingRecordCount(),
records_max: this.metricRecordsPerSecondLimit(),
}, "Incoming Records / Limit", undefined, undefined, this.region, this.account);
}
metricIncomingPutRequestsToLimitRate() {
return this.metricFactory.createMetricMath("(requests_in / PERIOD(requests_in)) / requests_max", {
requests_in: this.metricIncomingPutRequests(),
requests_max: this.metricPutRequestsPerSecondLimit(),
}, "Incoming PutRequests / Limit", undefined, undefined, this.region, this.account);
}
metricBytesPerSecondLimit() {
return this.metricFactory.createMetric("BytesPerSecondLimit", common_1.MetricStatistic.AVERAGE, "Incoming Bytes/s Limit", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricRecordsPerSecondLimit() {
return this.metricFactory.createMetric("RecordsPerSecondLimit", common_1.MetricStatistic.AVERAGE, "Records/s Limit", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
metricPutRequestsPerSecondLimit() {
return this.metricFactory.createMetric("PutRequestsPerSecondLimit", common_1.MetricStatistic.AVERAGE, "PutRequests/s Limit", this.dimensionsMap, undefined, FirehoseNamespace, undefined, this.region, this.account);
}
}
exports.KinesisFirehoseMetricFactory = KinesisFirehoseMetricFactory;
_a = JSII_RTTI_SYMBOL_1;
KinesisFirehoseMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.KinesisFirehoseMetricFactory", version: "9.15.2" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIktpbmVzaXNGaXJlaG9zZU1ldHJpY0ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx5Q0FLc0I7QUFFdEIsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7QUFPekM7O0dBRUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLDBCQUFvRDtJQUdwRyxZQUNFLGFBQTRCLEVBQzVCLEtBQXdDO1FBRXhDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLGFBQWEsR0FBRztZQUNuQixrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1NBQzdDLENBQUM7SUFDSixDQUFDO0lBRUQsK0JBQStCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQ3BDLDJCQUEyQixFQUMzQix3QkFBZSxDQUFDLEdBQUcsRUFDbkIsU0FBUyxFQUNULElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNwQywwQkFBMEIsRUFDMUIsd0JBQWUsQ0FBQyxHQUFHLEVBQ25CLFFBQVEsRUFDUixJQUFJLENBQUMsYUFBYSxFQUNsQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDcEMsZUFBZSxFQUNmLHdCQUFlLENBQUMsR0FBRyxFQUNuQixrQkFBa0IsRUFDbEIsSUFB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OEIsRUFDOUIsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDcEMscUJBQXFCLEVBQ3JCLHdCQUFlLENBQUMsT0FBTyxFQUN2Qix3QkFBd0IsRUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQ3BDLHVCQUF1QixFQUN2Qix3QkFBZSxDQUFDLE9BQU8sRUFDdkIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELCtCQUErQjtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNwQywyQkFBMkIsRUFDM0Isd0JBQWUsQ0FBQyxPQUFPLEVBQ3ZCLHFCQUFxQixFQUNyQixJQUFJLENBQUMsYUFBYSxFQUNsQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7O0FBbk5ILG9FQW9OQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpbWVuc2lvbnNNYXAgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuaW1wb3J0IHtcbiAgQmFzZU1ldHJpY0ZhY3RvcnksXG4gIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMsXG4gIE1ldHJpY0ZhY3RvcnksXG4gIE1ldHJpY1N0YXRpc3RpYyxcbn0gZnJvbSBcIi4uLy4uL2NvbW1vblwiO1xuXG5jb25zdCBGaXJlaG9zZU5hbWVzcGFjZSA9IFwiQVdTL0ZpcmVob3NlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeVByb3BzXG4gIGV4dGVuZHMgQmFzZU1ldHJpY0ZhY3RvcnlQcm9wcyB7XG4gIHJlYWRvbmx5IGRlbGl2ZXJ5U3RyZWFtTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2xhdGVzdC9kZXYvbW9uaXRvcmluZy13aXRoLWNsb3Vkd2F0Y2gtbWV0cmljcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBLaW5lc2lzRmlyZWhvc2VNZXRyaWNGYWN0b3J5IGV4dGVuZHMgQmFzZU1ldHJpY0ZhY3Rvcnk8S2luZXNpc0ZpcmVob3NlTWV0cmljRmFjdG9yeVByb3BzPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaW1lbnNpb25zTWFwOiBEaW1lbnNpb25zTWFwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1ldHJpY0ZhY3Rvcnk6IE1ldHJpY0ZhY3RvcnksXG4gICAgcHJvcHM6IEtpbmVzaXNGaXJlaG9zZU1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIobWV0cmljRmFjdG9yeSwgcHJvcHMpO1xuXG4gICAgdGhpcy5kaW1lbnNpb25zTWFwID0ge1xuICAgICAgRGVsaXZlcnlTdHJlYW1OYW1lOiBwcm9wcy5kZWxpdmVyeVN0cmVhbU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIG1ldHJpY1N1Y2Nlc3NmdWxDb252ZXJzaW9uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIlN1Y2NlZWRDb252ZXJzaW9uLlJlY29yZHNcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICBcIlN1Y2NlZWRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0ZhaWxlZENvbnZlcnNpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiRmFpbGVkQ29udmVyc2lvbi5SZWNvcmRzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJGYWlsZWRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luY29taW5nQnl0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkluY29taW5nQnl0ZXNcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICBcIkluY29taW5nIChieXRlcylcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luY29taW5nUHV0UmVxdWVzdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIkluY29taW5nUHV0UmVxdWVzdHNcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICBcIkluY29taW5nIChQdXRSZXF1ZXN0KVwiLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgRmlyZWhvc2VOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljSW5jb21pbmdSZWNvcmRDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiSW5jb21pbmdSZWNvcmRzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJJbmNvbWluZyAoUmVjb3JkcylcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1Rocm90dGxlZFJlY29yZENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJUaHJvdHRsZWRSZWNvcmRzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJUaHJvdHRsZWRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1B1dFJlY29yZExhdGVuY3lQOTBJbk1pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiUHV0UmVjb3JkLkxhdGVuY3lcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5QOTAsXG4gICAgICBcIlB1dFJlY29yZCBQOTBcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1B1dFJlY29yZEJhdGNoTGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJQdXRSZWNvcmRCYXRjaC5MYXRlbmN5XCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuUDkwLFxuICAgICAgXCJQdXRSZWNvcmRCYXRjaCBQOTBcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luY29taW5nQnl0ZXNUb0xpbWl0UmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpY01hdGgoXG4gICAgICBcIihieXRlc19pbiAvIFBFUklPRChieXRlc19pbikpIC8gYnl0ZXNfbWF4XCIsXG4gICAgICB7XG4gICAgICAgIGJ5dGVzX2luOiB0aGlzLm1ldHJpY0luY29taW5nQnl0ZXMoKSxcbiAgICAgICAgYnl0ZXNfbWF4OiB0aGlzLm1ldHJpY0J5dGVzUGVyU2Vjb25kTGltaXQoKSxcbiAgICAgIH0sXG4gICAgICBcIkluY29taW5nIEJ5dGVzIC8gTGltaXRcIixcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNJbmNvbWluZ1JlY29yZHNUb0xpbWl0UmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpY01hdGgoXG4gICAgICBcIihyZWNvcmRzX2luIC8gUEVSSU9EKHJlY29yZHNfaW4pKSAvIHJlY29yZHNfbWF4XCIsXG4gICAgICB7XG4gICAgICAgIHJlY29yZHNfaW46IHRoaXMubWV0cmljSW5jb21pbmdSZWNvcmRDb3VudCgpLFxuICAgICAgICByZWNvcmRzX21heDogdGhpcy5tZXRyaWNSZWNvcmRzUGVyU2Vjb25kTGltaXQoKSxcbiAgICAgIH0sXG4gICAgICBcIkluY29taW5nIFJlY29yZHMgLyBMaW1pdFwiLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luY29taW5nUHV0UmVxdWVzdHNUb0xpbWl0UmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpY01hdGgoXG4gICAgICBcIihyZXF1ZXN0c19pbiAvIFBFUklPRChyZXF1ZXN0c19pbikpIC8gcmVxdWVzdHNfbWF4XCIsXG4gICAgICB7XG4gICAgICAgIHJlcXVlc3RzX2luOiB0aGlzLm1ldHJpY0luY29taW5nUHV0UmVxdWVzdHMoKSxcbiAgICAgICAgcmVxdWVzdHNfbWF4OiB0aGlzLm1ldHJpY1B1dFJlcXVlc3RzUGVyU2Vjb25kTGltaXQoKSxcbiAgICAgIH0sXG4gICAgICBcIkluY29taW5nIFB1dFJlcXVlc3RzIC8gTGltaXRcIixcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNCeXRlc1BlclNlY29uZExpbWl0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJCeXRlc1BlclNlY29uZExpbWl0XCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuQVZFUkFHRSxcbiAgICAgIFwiSW5jb21pbmcgQnl0ZXMvcyBMaW1pdFwiLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgRmlyZWhvc2VOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljUmVjb3Jkc1BlclNlY29uZExpbWl0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJSZWNvcmRzUGVyU2Vjb25kTGltaXRcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJSZWNvcmRzL3MgTGltaXRcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEZpcmVob3NlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1B1dFJlcXVlc3RzUGVyU2Vjb25kTGltaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcIlB1dFJlcXVlc3RzUGVyU2Vjb25kTGltaXRcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJQdXRSZXF1ZXN0cy9zIExpbWl0XCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBGaXJlaG9zZU5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==