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

107 lines 17.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.RdsClusterMetricFactory = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const common_1 = require("../../common"); const RdsNamespace = "AWS/RDS"; class RdsClusterMetricFactory extends common_1.BaseMetricFactory { constructor(metricFactory, props) { super(metricFactory, props); this.cluster = props.cluster; this.clusterIdentifier = RdsClusterMetricFactory.resolveDbClusterIdentifier(props); this.dimensionsMap = { DBClusterIdentifier: this.clusterIdentifier }; } static resolveDbClusterIdentifier(props) { if (props.clusterIdentifier !== undefined && props.cluster === undefined) { return props.clusterIdentifier; } else if (props.clusterIdentifier === undefined && props.cluster !== undefined) { return props.cluster.clusterIdentifier; } else if (props.cluster !== undefined && props.cluster !== undefined) { throw Error("Only one of `clusterIdentifier` and `cluster` is supported"); } else { throw Error("At least one of `clusterIdentifier` or `cluster` is required"); } } isServerlessCluster(obj) { return obj.clusterArn !== undefined; } metricTotalConnectionCount() { return this.metric("DatabaseConnections", common_1.MetricStatistic.AVERAGE, "Connections"); } metricFreeStorageInBytes() { return this.metric("FreeLocalStorage", common_1.MetricStatistic.MIN, "Free"); } metricUsedStorageInBytes() { return this.metric("VolumeBytesUsed", common_1.MetricStatistic.MAX, "Used"); } metricDiskSpaceUsageInPercent() { return this.metricFactory.createMetricMath("100 * (used/(used+free))", { used: this.metricUsedStorageInBytes(), free: this.metricFreeStorageInBytes(), }, "Disk Usage"); } metricAverageCpuUsageInPercent() { return this.metric("CPUUtilization", common_1.MetricStatistic.AVERAGE, "CPU Usage"); } metricSelectLatencyInMillis(latencyType) { const label = common_1.getLatencyTypeLabel(latencyType); return this.metric("SelectLatency", common_1.getLatencyTypeStatistic(latencyType), `Select ${label}`); } metricInsertLatencyInMillis(latencyType) { const label = common_1.getLatencyTypeLabel(latencyType); return this.metric("InsertLatency", common_1.getLatencyTypeStatistic(latencyType), `Insert ${label}`); } metricUpdateLatencyInMillis(latencyType) { const label = common_1.getLatencyTypeLabel(latencyType); return this.metric("UpdateLatency", common_1.getLatencyTypeStatistic(latencyType), `Update ${label}`); } metricDeleteLatencyInMillis(latencyType) { const label = common_1.getLatencyTypeLabel(latencyType); return this.metric("DeleteLatency", common_1.getLatencyTypeStatistic(latencyType), `Delete ${label}`); } metricCommitLatencyInMillis(latencyType) { const label = common_1.getLatencyTypeLabel(latencyType); return this.metric("CommitLatency", common_1.getLatencyTypeStatistic(latencyType), `Commit ${label}`); } // Backward compatibility methods metricSelectLatencyP90InMillis() { return this.metricSelectLatencyInMillis(common_1.LatencyType.P90); } metricInsertLatencyP90InMillis() { return this.metricInsertLatencyInMillis(common_1.LatencyType.P90); } metricUpdateLatencyP90InMillis() { return this.metricUpdateLatencyInMillis(common_1.LatencyType.P90); } metricDeleteLatencyP90InMillis() { return this.metricDeleteLatencyInMillis(common_1.LatencyType.P90); } metricCommitLatencyP90InMillis() { return this.metricCommitLatencyInMillis(common_1.LatencyType.P90); } metricReadIOPS() { return this.metric("ReadIOPS", common_1.MetricStatistic.AVERAGE, "Read IOPS"); } metricWriteIOPS() { return this.metric("WriteIOPS", common_1.MetricStatistic.AVERAGE, "Write IOPS"); } metricServerlessDatabaseCapacity() { if (!this.isServerlessCluster(this.cluster)) { throw Error("Cluster is not of type `ServerlessCluster`. Metric is not applicable"); } return this.metric("ServerlessDatabaseCapacity", common_1.MetricStatistic.AVERAGE, "Serverless Database Capacity"); } metric(metricName, statistic, label) { return this.metricFactory.createMetric(metricName, statistic, label, this.dimensionsMap, undefined, RdsNamespace, undefined, this.region, this.account); } } exports.RdsClusterMetricFactory = RdsClusterMetricFactory; _a = JSII_RTTI_SYMBOL_1; RdsClusterMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.RdsClusterMetricFactory", version: "9.15.2" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJSZHNDbHVzdGVyTWV0cmljRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLHlDQVFzQjtBQUV0QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7QUFjL0IsTUFBYSx1QkFBd0IsU0FBUSwwQkFBK0M7SUFLMUYsWUFDRSxhQUE0QixFQUM1QixLQUFtQztRQUVuQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRU8sTUFBTSxDQUFDLDBCQUEwQixDQUN2QyxLQUFtQztRQUVuQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDeEUsT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUM7U0FDaEM7YUFBTSxJQUNMLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTO1lBQ3JDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUMzQjtZQUNBLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztTQUN4QzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDckUsTUFBTSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUMzRTthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQ1QsOERBQThELENBQy9ELENBQUM7U0FD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QUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELDhCQUE4QjtRQUM1QixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxvQkFBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCw4QkFBOEI7UUFDNUIsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsb0JBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsd0JBQWUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLHdCQUFlLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxnQ0FBZ0M7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0MsTUFBTSxLQUFLLENBQ1Qsc0VBQXNFLENBQ3ZFLENBQUM7U0FDSDtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDaEIsNEJBQTRCLEVBQzVCLHdCQUFlLENBQUMsT0FBTyxFQUN2Qiw4QkFBOEIsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQ1osVUFBa0IsRUFDbEIsU0FBMEIsRUFDMUIsS0FBYTtRQUViLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQ3BDLFVBQVUsRUFDVixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQzs7QUE5S0gsMERBK0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGltZW5zaW9uc01hcCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuaW1wb3J0IHsgSURhdGFiYXNlQ2x1c3RlciwgU2VydmVybGVzc0NsdXN0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuXG5pbXBvcnQge1xuICBCYXNlTWV0cmljRmFjdG9yeSxcbiAgQmFzZU1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgZ2V0TGF0ZW5jeVR5cGVMYWJlbCxcbiAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMsXG4gIExhdGVuY3lUeXBlLFxuICBNZXRyaWNGYWN0b3J5LFxuICBNZXRyaWNTdGF0aXN0aWMsXG59IGZyb20gXCIuLi8uLi9jb21tb25cIjtcblxuY29uc3QgUmRzTmFtZXNwYWNlID0gXCJBV1MvUkRTXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnlQcm9wcyBleHRlbmRzIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogZGF0YWJhc2UgY2x1c3RlciBpZGVudGlmaWVyIChlaXRoZXIgdGhpcyBvciBgY2x1c3RlcmAgbmVlZCB0byBiZSBzcGVjaWZpZWQpXG4gICAqIEBkZXByZWNhdGVkIHBsZWFzZSB1c2UgYGNsdXN0ZXJgIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKipcbiAgICogZGF0YWJhc2UgY2x1c3RlciAoZWl0aGVyIHRoaXMgb3IgYGNsdXN0ZXJJZGVudGlmaWVyYCBuZWVkIHRvIGJlIHNwZWNpZmllZClcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI/OiBJRGF0YWJhc2VDbHVzdGVyIHwgU2VydmVybGVzc0NsdXN0ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBSZHNDbHVzdGVyTWV0cmljRmFjdG9yeSBleHRlbmRzIEJhc2VNZXRyaWNGYWN0b3J5PFJkc0NsdXN0ZXJNZXRyaWNGYWN0b3J5UHJvcHM+IHtcbiAgcmVhZG9ubHkgY2x1c3RlcklkZW50aWZpZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgY2x1c3Rlcj86IElEYXRhYmFzZUNsdXN0ZXIgfCBTZXJ2ZXJsZXNzQ2x1c3RlcjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpbWVuc2lvbnNNYXA6IERpbWVuc2lvbnNNYXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWV0cmljRmFjdG9yeTogTWV0cmljRmFjdG9yeSxcbiAgICBwcm9wczogUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIobWV0cmljRmFjdG9yeSwgcHJvcHMpO1xuXG4gICAgdGhpcy5jbHVzdGVyID0gcHJvcHMuY2x1c3RlcjtcbiAgICB0aGlzLmNsdXN0ZXJJZGVudGlmaWVyID1cbiAgICAgIFJkc0NsdXN0ZXJNZXRyaWNGYWN0b3J5LnJlc29sdmVEYkNsdXN0ZXJJZGVudGlmaWVyKHByb3BzKTtcbiAgICB0aGlzLmRpbWVuc2lvbnNNYXAgPSB7IERCQ2x1c3RlcklkZW50aWZpZXI6IHRoaXMuY2x1c3RlcklkZW50aWZpZXIgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVEYkNsdXN0ZXJJZGVudGlmaWVyKFxuICAgIHByb3BzOiBSZHNDbHVzdGVyTWV0cmljRmFjdG9yeVByb3BzLFxuICApOiBzdHJpbmcge1xuICAgIGlmIChwcm9wcy5jbHVzdGVySWRlbnRpZmllciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNsdXN0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHByb3BzLmNsdXN0ZXJJZGVudGlmaWVyO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwcm9wcy5jbHVzdGVySWRlbnRpZmllciA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBwcm9wcy5jbHVzdGVyICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiBwcm9wcy5jbHVzdGVyLmNsdXN0ZXJJZGVudGlmaWVyO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuY2x1c3RlciAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmNsdXN0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoXCJPbmx5IG9uZSBvZiBgY2x1c3RlcklkZW50aWZpZXJgIGFuZCBgY2x1c3RlcmAgaXMgc3VwcG9ydGVkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJBdCBsZWFzdCBvbmUgb2YgYGNsdXN0ZXJJZGVudGlmaWVyYCBvciBgY2x1c3RlcmAgaXMgcmVxdWlyZWRcIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1NlcnZlcmxlc3NDbHVzdGVyKG9iajogYW55KTogb2JqIGlzIFNlcnZlcmxlc3NDbHVzdGVyIHtcbiAgICByZXR1cm4gKG9iaiBhcyBhbnkpLmNsdXN0ZXJBcm4gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG1ldHJpY1RvdGFsQ29ubmVjdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiRGF0YWJhc2VDb25uZWN0aW9uc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBcIkNvbm5lY3Rpb25zXCIsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0ZyZWVTdG9yYWdlSW5CeXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJGcmVlTG9jYWxTdG9yYWdlXCIsIE1ldHJpY1N0YXRpc3RpYy5NSU4sIFwiRnJlZVwiKTtcbiAgfVxuXG4gIG1ldHJpY1VzZWRTdG9yYWdlSW5CeXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJWb2x1bWVCeXRlc1VzZWRcIiwgTWV0cmljU3RhdGlzdGljLk1BWCwgXCJVc2VkXCIpO1xuICB9XG5cbiAgbWV0cmljRGlza1NwYWNlVXNhZ2VJblBlcmNlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWNNYXRoKFxuICAgICAgXCIxMDAgKiAodXNlZC8odXNlZCtmcmVlKSlcIixcbiAgICAgIHtcbiAgICAgICAgdXNlZDogdGhpcy5tZXRyaWNVc2VkU3RvcmFnZUluQnl0ZXMoKSxcbiAgICAgICAgZnJlZTogdGhpcy5tZXRyaWNGcmVlU3RvcmFnZUluQnl0ZXMoKSxcbiAgICAgIH0sXG4gICAgICBcIkRpc2sgVXNhZ2VcIixcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQXZlcmFnZUNwdVVzYWdlSW5QZXJjZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIkNQVVV0aWxpemF0aW9uXCIsIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLCBcIkNQVSBVc2FnZVwiKTtcbiAgfVxuXG4gIG1ldHJpY1NlbGVjdExhdGVuY3lJbk1pbGxpcyhsYXRlbmN5VHlwZTogTGF0ZW5jeVR5cGUpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldExhdGVuY3lUeXBlTGFiZWwobGF0ZW5jeVR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiU2VsZWN0TGF0ZW5jeVwiLFxuICAgICAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMobGF0ZW5jeVR5cGUpLFxuICAgICAgYFNlbGVjdCAke2xhYmVsfWAsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luc2VydExhdGVuY3lJbk1pbGxpcyhsYXRlbmN5VHlwZTogTGF0ZW5jeVR5cGUpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldExhdGVuY3lUeXBlTGFiZWwobGF0ZW5jeVR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiSW5zZXJ0TGF0ZW5jeVwiLFxuICAgICAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMobGF0ZW5jeVR5cGUpLFxuICAgICAgYEluc2VydCAke2xhYmVsfWAsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1VwZGF0ZUxhdGVuY3lJbk1pbGxpcyhsYXRlbmN5VHlwZTogTGF0ZW5jeVR5cGUpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldExhdGVuY3lUeXBlTGFiZWwobGF0ZW5jeVR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiVXBkYXRlTGF0ZW5jeVwiLFxuICAgICAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMobGF0ZW5jeVR5cGUpLFxuICAgICAgYFVwZGF0ZSAke2xhYmVsfWAsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0RlbGV0ZUxhdGVuY3lJbk1pbGxpcyhsYXRlbmN5VHlwZTogTGF0ZW5jeVR5cGUpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldExhdGVuY3lUeXBlTGFiZWwobGF0ZW5jeVR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiRGVsZXRlTGF0ZW5jeVwiLFxuICAgICAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMobGF0ZW5jeVR5cGUpLFxuICAgICAgYERlbGV0ZSAke2xhYmVsfWAsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0NvbW1pdExhdGVuY3lJbk1pbGxpcyhsYXRlbmN5VHlwZTogTGF0ZW5jeVR5cGUpIHtcbiAgICBjb25zdCBsYWJlbCA9IGdldExhdGVuY3lUeXBlTGFiZWwobGF0ZW5jeVR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiQ29tbWl0TGF0ZW5jeVwiLFxuICAgICAgZ2V0TGF0ZW5jeVR5cGVTdGF0aXN0aWMobGF0ZW5jeVR5cGUpLFxuICAgICAgYENvbW1pdCAke2xhYmVsfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbWV0aG9kc1xuICBtZXRyaWNTZWxlY3RMYXRlbmN5UDkwSW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljU2VsZWN0TGF0ZW5jeUluTWlsbGlzKExhdGVuY3lUeXBlLlA5MCk7XG4gIH1cblxuICBtZXRyaWNJbnNlcnRMYXRlbmN5UDkwSW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljSW5zZXJ0TGF0ZW5jeUluTWlsbGlzKExhdGVuY3lUeXBlLlA5MCk7XG4gIH1cblxuICBtZXRyaWNVcGRhdGVMYXRlbmN5UDkwSW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljVXBkYXRlTGF0ZW5jeUluTWlsbGlzKExhdGVuY3lUeXBlLlA5MCk7XG4gIH1cblxuICBtZXRyaWNEZWxldGVMYXRlbmN5UDkwSW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRGVsZXRlTGF0ZW5jeUluTWlsbGlzKExhdGVuY3lUeXBlLlA5MCk7XG4gIH1cblxuICBtZXRyaWNDb21taXRMYXRlbmN5UDkwSW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljQ29tbWl0TGF0ZW5jeUluTWlsbGlzKExhdGVuY3lUeXBlLlA5MCk7XG4gIH1cblxuICBtZXRyaWNSZWFkSU9QUygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJSZWFkSU9QU1wiLCBNZXRyaWNTdGF0aXN0aWMuQVZFUkFHRSwgXCJSZWFkIElPUFNcIik7XG4gIH1cblxuICBtZXRyaWNXcml0ZUlPUFMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiV3JpdGVJT1BTXCIsIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLCBcIldyaXRlIElPUFNcIik7XG4gIH1cbiAgbWV0cmljU2VydmVybGVzc0RhdGFiYXNlQ2FwYWNpdHkoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VydmVybGVzc0NsdXN0ZXIodGhpcy5jbHVzdGVyKSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiQ2x1c3RlciBpcyBub3Qgb2YgdHlwZSBgU2VydmVybGVzc0NsdXN0ZXJgLiBNZXRyaWMgaXMgbm90IGFwcGxpY2FibGVcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFxuICAgICAgXCJTZXJ2ZXJsZXNzRGF0YWJhc2VDYXBhY2l0eVwiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBcIlNlcnZlcmxlc3MgRGF0YWJhc2UgQ2FwYWNpdHlcIixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXRyaWMoXG4gICAgbWV0cmljTmFtZTogc3RyaW5nLFxuICAgIHN0YXRpc3RpYzogTWV0cmljU3RhdGlzdGljLFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIHN0YXRpc3RpYyxcbiAgICAgIGxhYmVsLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgUmRzTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxufVxuIl19