cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
181 lines • 23.1 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OpenSearchClusterMetricFactory = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
const OpenSearchBackportedMetrics_1 = require("./OpenSearchBackportedMetrics");
const common_1 = require("../../common");
class OpenSearchClusterMetricFactory extends common_1.BaseMetricFactory {
constructor(metricFactory, props) {
super(metricFactory, props);
this.domainMetrics = new OpenSearchBackportedMetrics_1.OpenSearchBackportedMetrics(props.domain);
this.fillTpsWithZeroes = props.fillTpsWithZeroes ?? true;
this.rateComputationMethod =
props.rateComputationMethod ?? common_1.RateComputationMethod.AVERAGE;
}
metricSearchCount() {
return this.domainMetrics.metric("SearchRate", {
statistic: aws_cloudwatch_1.Stats.SUM,
region: this.region,
account: this.account,
});
}
metricSearchRate(rateComputationMethod) {
return this.metricFactory.toRate(this.metricSearchCount(), rateComputationMethod ?? this.rateComputationMethod, false, "requests", this.fillTpsWithZeroes);
}
/**
* @deprecated use metricSearchRate
*/
metricTps() {
return this.metricSearchRate(common_1.RateComputationMethod.PER_SECOND);
}
metricIndexingLatencyP50InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricIndexingLatency({
statistic: common_1.MetricStatistic.P50,
label: "P50",
region: this.region,
account: this.account,
}));
}
metricIndexingLatencyP90InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricIndexingLatency({
statistic: common_1.MetricStatistic.P90,
label: "P90",
region: this.region,
account: this.account,
}));
}
metricIndexingLatencyP99InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricIndexingLatency({
statistic: common_1.MetricStatistic.P99,
label: "P99",
region: this.region,
account: this.account,
}));
}
metricSearchLatencyP50InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricSearchLatency({
statistic: common_1.MetricStatistic.P50,
label: "P50",
region: this.region,
account: this.account,
}));
}
metricSearchLatencyP90InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricSearchLatency({
statistic: common_1.MetricStatistic.P90,
label: "P90",
region: this.region,
account: this.account,
}));
}
metricSearchLatencyP99InMillis() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricSearchLatency({
statistic: common_1.MetricStatistic.P99,
label: "P99",
region: this.region,
account: this.account,
}));
}
metricClusterStatusRed() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricClusterStatusRed({
label: "Red",
region: this.region,
account: this.account,
}));
}
metricClusterStatusYellow() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricClusterStatusYellow({
label: "Yellow",
region: this.region,
account: this.account,
}));
}
metricDiskSpaceUsageInPercent() {
const used = this.domainMetrics.metric("ClusterUsedSpace", {
statistic: aws_cloudwatch_1.Stats.SUM,
region: this.region,
account: this.account,
});
const free = this.domainMetrics.metric("FreeStorageSpace", {
statistic: aws_cloudwatch_1.Stats.SUM,
region: this.region,
account: this.account,
});
return this.metricFactory.createMetricMath("100 * (used/(used+free))", { used, free }, "Disk Usage");
}
metricCpuUsage() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricCPUUtilization({
label: "CPU Usage",
region: this.region,
account: this.account,
}));
}
metricMasterCpuUsage() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricMasterCPUUtilization({
label: "Master CPU Usage",
region: this.region,
account: this.account,
}));
}
metricJvmMemoryPressure() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricJVMMemoryPressure({
label: "JVM Memory Pressure",
region: this.region,
account: this.account,
}));
}
metricMasterJvmMemoryPressure() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricMasterJVMMemoryPressure({
label: "Master JVM Memory Pressure",
region: this.region,
account: this.account,
}));
}
metricClusterIndexWritesBlocked() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricClusterIndexWritesBlocked({
label: "Index Writes Blocked",
region: this.region,
account: this.account,
}));
}
/**
* @deprecated use metricClusterIndexWritesBlocked instead
*/
metricClusterIndexWriteBlocked() {
return this.metricClusterIndexWritesBlocked();
}
metricNodes() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricNodes({
label: "Nodes",
region: this.region,
account: this.account,
}));
}
metricAutomatedSnapshotFailure() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricAutomatedSnapshotFailure({
label: "Automated Snapshot Failures",
region: this.region,
account: this.account,
}));
}
metricKmsKeyError() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricKMSKeyError({
label: "KMS Key Error",
region: this.region,
account: this.account,
}));
}
metricKmsKeyInaccessible() {
return this.metricFactory.adaptMetric(this.domainMetrics.metricKMSKeyInaccessible({
label: "KMS Key Inaccessible",
region: this.region,
account: this.account,
}));
}
}
exports.OpenSearchClusterMetricFactory = OpenSearchClusterMetricFactory;
_a = JSII_RTTI_SYMBOL_1;
OpenSearchClusterMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.OpenSearchClusterMetricFactory", version: "10.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlblNlYXJjaENsdXN0ZXJNZXRyaWNGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiT3BlblNlYXJjaENsdXN0ZXJNZXRyaWNGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0RBQW1EO0FBRW5ELCtFQUd1QztBQUN2Qyx5Q0FNc0I7QUFldEIsTUFBYSw4QkFBK0IsU0FBUSwwQkFBaUI7SUFLbkUsWUFDRSxhQUE0QixFQUM1QixLQUEwQztRQUUxQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx5REFBMkIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUM7UUFDekQsSUFBSSxDQUFDLHFCQUFxQjtZQUN4QixLQUFLLENBQUMscUJBQXFCLElBQUksOEJBQXFCLENBQUMsT0FBTyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUM3QyxTQUFTLEVBQUUsc0JBQUssQ0FBQyxHQUFHO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLHFCQUE2QztRQUM1RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUM5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDeEIscUJBQXFCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUNuRCxLQUFLLEVBQ0wsVUFBVSxFQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLElB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QUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDO1lBQ2hELEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDO1lBQ25DLEtBQUssRUFBRSxlQUFlO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDMUMsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUFqUEgsd0VBa1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhdHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2hcIjtcblxuaW1wb3J0IHtcbiAgRG9tYWluLFxuICBPcGVuU2VhcmNoQmFja3BvcnRlZE1ldHJpY3MsXG59IGZyb20gXCIuL09wZW5TZWFyY2hCYWNrcG9ydGVkTWV0cmljc1wiO1xuaW1wb3J0IHtcbiAgQmFzZU1ldHJpY0ZhY3RvcnksXG4gIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMsXG4gIE1ldHJpY0ZhY3RvcnksXG4gIE1ldHJpY1N0YXRpc3RpYyxcbiAgUmF0ZUNvbXB1dGF0aW9uTWV0aG9kLFxufSBmcm9tIFwiLi4vLi4vY29tbW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3BlblNlYXJjaENsdXN0ZXJNZXRyaWNGYWN0b3J5UHJvcHNcbiAgZXh0ZW5kcyBCYXNlTWV0cmljRmFjdG9yeVByb3BzIHtcbiAgcmVhZG9ubHkgZG9tYWluOiBEb21haW47XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGZpbGxUcHNXaXRoWmVyb2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmF0ZUNvbXB1dGF0aW9uTWV0aG9kPzogUmF0ZUNvbXB1dGF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgY2xhc3MgT3BlblNlYXJjaENsdXN0ZXJNZXRyaWNGYWN0b3J5IGV4dGVuZHMgQmFzZU1ldHJpY0ZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9tYWluTWV0cmljczogT3BlblNlYXJjaEJhY2twb3J0ZWRNZXRyaWNzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlsbFRwc1dpdGhaZXJvZXM6IGJvb2xlYW47XG4gIHByb3RlY3RlZCByZWFkb25seSByYXRlQ29tcHV0YXRpb25NZXRob2Q6IFJhdGVDb21wdXRhdGlvbk1ldGhvZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXRyaWNGYWN0b3J5OiBNZXRyaWNGYWN0b3J5LFxuICAgIHByb3BzOiBPcGVuU2VhcmNoQ2x1c3Rlck1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIobWV0cmljRmFjdG9yeSwgcHJvcHMpO1xuXG4gICAgdGhpcy5kb21haW5NZXRyaWNzID0gbmV3IE9wZW5TZWFyY2hCYWNrcG9ydGVkTWV0cmljcyhwcm9wcy5kb21haW4pO1xuICAgIHRoaXMuZmlsbFRwc1dpdGhaZXJvZXMgPSBwcm9wcy5maWxsVHBzV2l0aFplcm9lcyA/PyB0cnVlO1xuICAgIHRoaXMucmF0ZUNvbXB1dGF0aW9uTWV0aG9kID1cbiAgICAgIHByb3BzLnJhdGVDb21wdXRhdGlvbk1ldGhvZCA/PyBSYXRlQ29tcHV0YXRpb25NZXRob2QuQVZFUkFHRTtcbiAgfVxuXG4gIG1ldHJpY1NlYXJjaENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljKFwiU2VhcmNoUmF0ZVwiLCB7XG4gICAgICBzdGF0aXN0aWM6IFN0YXRzLlNVTSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgfSk7XG4gIH1cblxuICBtZXRyaWNTZWFyY2hSYXRlKHJhdGVDb21wdXRhdGlvbk1ldGhvZD86IFJhdGVDb21wdXRhdGlvbk1ldGhvZCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkudG9SYXRlKFxuICAgICAgdGhpcy5tZXRyaWNTZWFyY2hDb3VudCgpLFxuICAgICAgcmF0ZUNvbXB1dGF0aW9uTWV0aG9kID8/IHRoaXMucmF0ZUNvbXB1dGF0aW9uTWV0aG9kLFxuICAgICAgZmFsc2UsXG4gICAgICBcInJlcXVlc3RzXCIsXG4gICAgICB0aGlzLmZpbGxUcHNXaXRoWmVyb2VzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1ldHJpY1NlYXJjaFJhdGVcbiAgICovXG4gIG1ldHJpY1RwcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNTZWFyY2hSYXRlKFJhdGVDb21wdXRhdGlvbk1ldGhvZC5QRVJfU0VDT05EKTtcbiAgfVxuXG4gIG1ldHJpY0luZGV4aW5nTGF0ZW5jeVA1MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljSW5kZXhpbmdMYXRlbmN5KHtcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuUDUwLFxuICAgICAgICBsYWJlbDogXCJQNTBcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luZGV4aW5nTGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljSW5kZXhpbmdMYXRlbmN5KHtcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuUDkwLFxuICAgICAgICBsYWJlbDogXCJQOTBcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0luZGV4aW5nTGF0ZW5jeVA5OUluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljSW5kZXhpbmdMYXRlbmN5KHtcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuUDk5LFxuICAgICAgICBsYWJlbDogXCJQOTlcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY1NlYXJjaExhdGVuY3lQNTBJbk1pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY1NlYXJjaExhdGVuY3koe1xuICAgICAgICBzdGF0aXN0aWM6IE1ldHJpY1N0YXRpc3RpYy5QNTAsXG4gICAgICAgIGxhYmVsOiBcIlA1MFwiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljU2VhcmNoTGF0ZW5jeVA5MEluTWlsbGlzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljU2VhcmNoTGF0ZW5jeSh7XG4gICAgICAgIHN0YXRpc3RpYzogTWV0cmljU3RhdGlzdGljLlA5MCxcbiAgICAgICAgbGFiZWw6IFwiUDkwXCIsXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNTZWFyY2hMYXRlbmN5UDk5SW5NaWxsaXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5hZGFwdE1ldHJpYyhcbiAgICAgIHRoaXMuZG9tYWluTWV0cmljcy5tZXRyaWNTZWFyY2hMYXRlbmN5KHtcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuUDk5LFxuICAgICAgICBsYWJlbDogXCJQOTlcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0NsdXN0ZXJTdGF0dXNSZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5hZGFwdE1ldHJpYyhcbiAgICAgIHRoaXMuZG9tYWluTWV0cmljcy5tZXRyaWNDbHVzdGVyU3RhdHVzUmVkKHtcbiAgICAgICAgbGFiZWw6IFwiUmVkXCIsXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNDbHVzdGVyU3RhdHVzWWVsbG93KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljQ2x1c3RlclN0YXR1c1llbGxvdyh7XG4gICAgICAgIGxhYmVsOiBcIlllbGxvd1wiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljRGlza1NwYWNlVXNhZ2VJblBlcmNlbnQoKSB7XG4gICAgY29uc3QgdXNlZCA9IHRoaXMuZG9tYWluTWV0cmljcy5tZXRyaWMoXCJDbHVzdGVyVXNlZFNwYWNlXCIsIHtcbiAgICAgIHN0YXRpc3RpYzogU3RhdHMuU1VNLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICB9KTtcbiAgICBjb25zdCBmcmVlID0gdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpYyhcIkZyZWVTdG9yYWdlU3BhY2VcIiwge1xuICAgICAgc3RhdGlzdGljOiBTdGF0cy5TVU0sXG4gICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljTWF0aChcbiAgICAgIFwiMTAwICogKHVzZWQvKHVzZWQrZnJlZSkpXCIsXG4gICAgICB7IHVzZWQsIGZyZWUgfSxcbiAgICAgIFwiRGlzayBVc2FnZVwiLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNDcHVVc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY0NQVVV0aWxpemF0aW9uKHtcbiAgICAgICAgbGFiZWw6IFwiQ1BVIFVzYWdlXCIsXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNNYXN0ZXJDcHVVc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY01hc3RlckNQVVV0aWxpemF0aW9uKHtcbiAgICAgICAgbGFiZWw6IFwiTWFzdGVyIENQVSBVc2FnZVwiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljSnZtTWVtb3J5UHJlc3N1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5hZGFwdE1ldHJpYyhcbiAgICAgIHRoaXMuZG9tYWluTWV0cmljcy5tZXRyaWNKVk1NZW1vcnlQcmVzc3VyZSh7XG4gICAgICAgIGxhYmVsOiBcIkpWTSBNZW1vcnkgUHJlc3N1cmVcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY01hc3Rlckp2bU1lbW9yeVByZXNzdXJlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLmRvbWFpbk1ldHJpY3MubWV0cmljTWFzdGVySlZNTWVtb3J5UHJlc3N1cmUoe1xuICAgICAgICBsYWJlbDogXCJNYXN0ZXIgSlZNIE1lbW9yeSBQcmVzc3VyZVwiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQ2x1c3RlckluZGV4V3JpdGVzQmxvY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY0NsdXN0ZXJJbmRleFdyaXRlc0Jsb2NrZWQoe1xuICAgICAgICBsYWJlbDogXCJJbmRleCBXcml0ZXMgQmxvY2tlZFwiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBtZXRyaWNDbHVzdGVySW5kZXhXcml0ZXNCbG9ja2VkIGluc3RlYWRcbiAgICovXG4gIG1ldHJpY0NsdXN0ZXJJbmRleFdyaXRlQmxvY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNDbHVzdGVySW5kZXhXcml0ZXNCbG9ja2VkKCk7XG4gIH1cblxuICBtZXRyaWNOb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY05vZGVzKHtcbiAgICAgICAgbGFiZWw6IFwiTm9kZXNcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0F1dG9tYXRlZFNuYXBzaG90RmFpbHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY0F1dG9tYXRlZFNuYXBzaG90RmFpbHVyZSh7XG4gICAgICAgIGxhYmVsOiBcIkF1dG9tYXRlZCBTbmFwc2hvdCBGYWlsdXJlc1wiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljS21zS2V5RXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5hZGFwdE1ldHJpYyhcbiAgICAgIHRoaXMuZG9tYWluTWV0cmljcy5tZXRyaWNLTVNLZXlFcnJvcih7XG4gICAgICAgIGxhYmVsOiBcIktNUyBLZXkgRXJyb3JcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0ttc0tleUluYWNjZXNzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5kb21haW5NZXRyaWNzLm1ldHJpY0tNU0tleUluYWNjZXNzaWJsZSh7XG4gICAgICAgIGxhYmVsOiBcIktNUyBLZXkgSW5hY2Nlc3NpYmxlXCIsXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==