cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
107 lines • 17.5 kB
JavaScript
"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 = (0, common_1.getLatencyTypeLabel)(latencyType);
return this.metric("SelectLatency", (0, common_1.getLatencyTypeStatistic)(latencyType), `Select ${label}`);
}
metricInsertLatencyInMillis(latencyType) {
const label = (0, common_1.getLatencyTypeLabel)(latencyType);
return this.metric("InsertLatency", (0, common_1.getLatencyTypeStatistic)(latencyType), `Insert ${label}`);
}
metricUpdateLatencyInMillis(latencyType) {
const label = (0, common_1.getLatencyTypeLabel)(latencyType);
return this.metric("UpdateLatency", (0, common_1.getLatencyTypeStatistic)(latencyType), `Update ${label}`);
}
metricDeleteLatencyInMillis(latencyType) {
const label = (0, common_1.getLatencyTypeLabel)(latencyType);
return this.metric("DeleteLatency", (0, common_1.getLatencyTypeStatistic)(latencyType), `Delete ${label}`);
}
metricCommitLatencyInMillis(latencyType) {
const label = (0, common_1.getLatencyTypeLabel)(latencyType);
return this.metric("CommitLatency", (0, 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: "10.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJSZHNDbHVzdGVyTWV0cmljRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLHlDQVFzQjtBQUV0QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUM7QUFjL0IsTUFBYSx1QkFBd0IsU0FBUSwwQkFBaUI7SUFLNUQsWUFDRSxhQUE0QixFQUM1QixLQUFtQztRQUVuQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRU8sTUFBTSxDQUFDLDBCQUEwQixDQUN2QyxLQUFtQztRQUVuQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUNqQyxDQUFDO2FBQU0sSUFDTCxLQUFLLENBQUMsaUJBQWlCLEtBQUssU0FBUztZQUNyQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFDM0IsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUN6QyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDNUUsQ0FBQzthQUFNLENBQUM7WUFDTixN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QztJQUNKLENBQUM7O0FBOUtILDBEQStLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpbWVuc2lvbnNNYXAgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcbmltcG9ydCB7IElEYXRhYmFzZUNsdXN0ZXIsIFNlcnZlcmxlc3NDbHVzdGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcblxuaW1wb3J0IHtcbiAgQmFzZU1ldHJpY0ZhY3RvcnksXG4gIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMsXG4gIGdldExhdGVuY3lUeXBlTGFiZWwsXG4gIGdldExhdGVuY3lUeXBlU3RhdGlzdGljLFxuICBMYXRlbmN5VHlwZSxcbiAgTWV0cmljRmFjdG9yeSxcbiAgTWV0cmljU3RhdGlzdGljLFxufSBmcm9tIFwiLi4vLi4vY29tbW9uXCI7XG5cbmNvbnN0IFJkc05hbWVzcGFjZSA9IFwiQVdTL1JEU1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJkc0NsdXN0ZXJNZXRyaWNGYWN0b3J5UHJvcHMgZXh0ZW5kcyBCYXNlTWV0cmljRmFjdG9yeVByb3BzIHtcbiAgLyoqXG4gICAqIGRhdGFiYXNlIGNsdXN0ZXIgaWRlbnRpZmllciAoZWl0aGVyIHRoaXMgb3IgYGNsdXN0ZXJgIG5lZWQgdG8gYmUgc3BlY2lmaWVkKVxuICAgKiBAZGVwcmVjYXRlZCBwbGVhc2UgdXNlIGBjbHVzdGVyYCBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqXG4gICAqIGRhdGFiYXNlIGNsdXN0ZXIgKGVpdGhlciB0aGlzIG9yIGBjbHVzdGVySWRlbnRpZmllcmAgbmVlZCB0byBiZSBzcGVjaWZpZWQpXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogSURhdGFiYXNlQ2x1c3RlciB8IFNlcnZlcmxlc3NDbHVzdGVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnkgZXh0ZW5kcyBCYXNlTWV0cmljRmFjdG9yeSB7XG4gIHJlYWRvbmx5IGNsdXN0ZXJJZGVudGlmaWVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsdXN0ZXI/OiBJRGF0YWJhc2VDbHVzdGVyIHwgU2VydmVybGVzc0NsdXN0ZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBkaW1lbnNpb25zTWFwOiBEaW1lbnNpb25zTWFwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1ldHJpY0ZhY3Rvcnk6IE1ldHJpY0ZhY3RvcnksXG4gICAgcHJvcHM6IFJkc0NsdXN0ZXJNZXRyaWNGYWN0b3J5UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKG1ldHJpY0ZhY3RvcnksIHByb3BzKTtcblxuICAgIHRoaXMuY2x1c3RlciA9IHByb3BzLmNsdXN0ZXI7XG4gICAgdGhpcy5jbHVzdGVySWRlbnRpZmllciA9XG4gICAgICBSZHNDbHVzdGVyTWV0cmljRmFjdG9yeS5yZXNvbHZlRGJDbHVzdGVySWRlbnRpZmllcihwcm9wcyk7XG4gICAgdGhpcy5kaW1lbnNpb25zTWFwID0geyBEQkNsdXN0ZXJJZGVudGlmaWVyOiB0aGlzLmNsdXN0ZXJJZGVudGlmaWVyIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZXNvbHZlRGJDbHVzdGVySWRlbnRpZmllcihcbiAgICBwcm9wczogUmRzQ2x1c3Rlck1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAocHJvcHMuY2x1c3RlcklkZW50aWZpZXIgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jbHVzdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBwcm9wcy5jbHVzdGVySWRlbnRpZmllcjtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcHJvcHMuY2x1c3RlcklkZW50aWZpZXIgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuY2x1c3RlciAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gcHJvcHMuY2x1c3Rlci5jbHVzdGVySWRlbnRpZmllcjtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmNsdXN0ZXIgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jbHVzdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yKFwiT25seSBvbmUgb2YgYGNsdXN0ZXJJZGVudGlmaWVyYCBhbmQgYGNsdXN0ZXJgIGlzIHN1cHBvcnRlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiQXQgbGVhc3Qgb25lIG9mIGBjbHVzdGVySWRlbnRpZmllcmAgb3IgYGNsdXN0ZXJgIGlzIHJlcXVpcmVkXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNTZXJ2ZXJsZXNzQ2x1c3RlcihvYmo6IGFueSk6IG9iaiBpcyBTZXJ2ZXJsZXNzQ2x1c3RlciB7XG4gICAgcmV0dXJuIChvYmogYXMgYW55KS5jbHVzdGVyQXJuICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBtZXRyaWNUb3RhbENvbm5lY3Rpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIkRhdGFiYXNlQ29ubmVjdGlvbnNcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJDb25uZWN0aW9uc1wiLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNGcmVlU3RvcmFnZUluQnl0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiRnJlZUxvY2FsU3RvcmFnZVwiLCBNZXRyaWNTdGF0aXN0aWMuTUlOLCBcIkZyZWVcIik7XG4gIH1cblxuICBtZXRyaWNVc2VkU3RvcmFnZUluQnl0ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiVm9sdW1lQnl0ZXNVc2VkXCIsIE1ldHJpY1N0YXRpc3RpYy5NQVgsIFwiVXNlZFwiKTtcbiAgfVxuXG4gIG1ldHJpY0Rpc2tTcGFjZVVzYWdlSW5QZXJjZW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljTWF0aChcbiAgICAgIFwiMTAwICogKHVzZWQvKHVzZWQrZnJlZSkpXCIsXG4gICAgICB7XG4gICAgICAgIHVzZWQ6IHRoaXMubWV0cmljVXNlZFN0b3JhZ2VJbkJ5dGVzKCksXG4gICAgICAgIGZyZWU6IHRoaXMubWV0cmljRnJlZVN0b3JhZ2VJbkJ5dGVzKCksXG4gICAgICB9LFxuICAgICAgXCJEaXNrIFVzYWdlXCIsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0F2ZXJhZ2VDcHVVc2FnZUluUGVyY2VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXCJDUFVVdGlsaXphdGlvblwiLCBNZXRyaWNTdGF0aXN0aWMuQVZFUkFHRSwgXCJDUFUgVXNhZ2VcIik7XG4gIH1cblxuICBtZXRyaWNTZWxlY3RMYXRlbmN5SW5NaWxsaXMobGF0ZW5jeVR5cGU6IExhdGVuY3lUeXBlKSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYXRlbmN5VHlwZUxhYmVsKGxhdGVuY3lUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIlNlbGVjdExhdGVuY3lcIixcbiAgICAgIGdldExhdGVuY3lUeXBlU3RhdGlzdGljKGxhdGVuY3lUeXBlKSxcbiAgICAgIGBTZWxlY3QgJHtsYWJlbH1gLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNJbnNlcnRMYXRlbmN5SW5NaWxsaXMobGF0ZW5jeVR5cGU6IExhdGVuY3lUeXBlKSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYXRlbmN5VHlwZUxhYmVsKGxhdGVuY3lUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIkluc2VydExhdGVuY3lcIixcbiAgICAgIGdldExhdGVuY3lUeXBlU3RhdGlzdGljKGxhdGVuY3lUeXBlKSxcbiAgICAgIGBJbnNlcnQgJHtsYWJlbH1gLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNVcGRhdGVMYXRlbmN5SW5NaWxsaXMobGF0ZW5jeVR5cGU6IExhdGVuY3lUeXBlKSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYXRlbmN5VHlwZUxhYmVsKGxhdGVuY3lUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIlVwZGF0ZUxhdGVuY3lcIixcbiAgICAgIGdldExhdGVuY3lUeXBlU3RhdGlzdGljKGxhdGVuY3lUeXBlKSxcbiAgICAgIGBVcGRhdGUgJHtsYWJlbH1gLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNEZWxldGVMYXRlbmN5SW5NaWxsaXMobGF0ZW5jeVR5cGU6IExhdGVuY3lUeXBlKSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYXRlbmN5VHlwZUxhYmVsKGxhdGVuY3lUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIkRlbGV0ZUxhdGVuY3lcIixcbiAgICAgIGdldExhdGVuY3lUeXBlU3RhdGlzdGljKGxhdGVuY3lUeXBlKSxcbiAgICAgIGBEZWxldGUgJHtsYWJlbH1gLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNDb21taXRMYXRlbmN5SW5NaWxsaXMobGF0ZW5jeVR5cGU6IExhdGVuY3lUeXBlKSB7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYXRlbmN5VHlwZUxhYmVsKGxhdGVuY3lUeXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoXG4gICAgICBcIkNvbW1pdExhdGVuY3lcIixcbiAgICAgIGdldExhdGVuY3lUeXBlU3RhdGlzdGljKGxhdGVuY3lUeXBlKSxcbiAgICAgIGBDb21taXQgJHtsYWJlbH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1ldGhvZHNcbiAgbWV0cmljU2VsZWN0TGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY1NlbGVjdExhdGVuY3lJbk1pbGxpcyhMYXRlbmN5VHlwZS5QOTApO1xuICB9XG5cbiAgbWV0cmljSW5zZXJ0TGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0luc2VydExhdGVuY3lJbk1pbGxpcyhMYXRlbmN5VHlwZS5QOTApO1xuICB9XG5cbiAgbWV0cmljVXBkYXRlTGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY1VwZGF0ZUxhdGVuY3lJbk1pbGxpcyhMYXRlbmN5VHlwZS5QOTApO1xuICB9XG5cbiAgbWV0cmljRGVsZXRlTGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0RlbGV0ZUxhdGVuY3lJbk1pbGxpcyhMYXRlbmN5VHlwZS5QOTApO1xuICB9XG5cbiAgbWV0cmljQ29tbWl0TGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0NvbW1pdExhdGVuY3lJbk1pbGxpcyhMYXRlbmN5VHlwZS5QOTApO1xuICB9XG5cbiAgbWV0cmljUmVhZElPUFMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiUmVhZElPUFNcIiwgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsIFwiUmVhZCBJT1BTXCIpO1xuICB9XG5cbiAgbWV0cmljV3JpdGVJT1BTKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIldyaXRlSU9QU1wiLCBNZXRyaWNTdGF0aXN0aWMuQVZFUkFHRSwgXCJXcml0ZSBJT1BTXCIpO1xuICB9XG4gIG1ldHJpY1NlcnZlcmxlc3NEYXRhYmFzZUNhcGFjaXR5KCkge1xuICAgIGlmICghdGhpcy5pc1NlcnZlcmxlc3NDbHVzdGVyKHRoaXMuY2x1c3RlcikpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcIkNsdXN0ZXIgaXMgbm90IG9mIHR5cGUgYFNlcnZlcmxlc3NDbHVzdGVyYC4gTWV0cmljIGlzIG5vdCBhcHBsaWNhYmxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcbiAgICAgIFwiU2VydmVybGVzc0RhdGFiYXNlQ2FwYWNpdHlcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJTZXJ2ZXJsZXNzIERhdGFiYXNlIENhcGFjaXR5XCIsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgbWV0cmljKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBzdGF0aXN0aWM6IE1ldHJpY1N0YXRpc3RpYyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBzdGF0aXN0aWMsXG4gICAgICBsYWJlbCxcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIFJkc05hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==