cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
67 lines • 15.5 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GlueJobMetricFactory = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const common_1 = require("../../common");
const GlueNamespace = "Glue";
class GlueJobMetricFactory extends common_1.BaseMetricFactory {
constructor(metricFactory, props) {
super(metricFactory, props);
this.rateComputationMethod =
props.rateComputationMethod ?? common_1.RateComputationMethod.AVERAGE;
this.dimensionsMap = {
Type: "gauge",
JobRunId: "ALL",
JobName: props.jobName,
};
this.typeCountDimensionsMap = {
...this.dimensionsMap,
Type: "count",
};
}
metricTotalReadBytesFromS3() {
return this.metricFactory.createMetric("glue.ALL.s3.filesystem.read_bytes", common_1.MetricStatistic.SUM, "Read (S3)", this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricTotalWrittenBytesToS3() {
return this.metricFactory.createMetric("glue.ALL.s3.filesystem.write_bytes", common_1.MetricStatistic.SUM, "Write (S3)", this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricAverageExecutorCpuUsagePercentage() {
const label = "CPU Usage (executor average)";
const metric = this.metricFactory.createMetric("glue.ALL.system.cpuSystemLoad", common_1.MetricStatistic.AVERAGE, label, this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
return this.metricFactory.multiplyMetric(metric, 100, label, "cpu");
}
metricAverageExecutorMemoryUsagePercentage() {
const label = "JVM Heap usage (executor average)";
const metric = this.metricFactory.createMetric("glue.ALL.jvm.heap.usage", common_1.MetricStatistic.AVERAGE, label, this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
return this.metricFactory.multiplyMetric(metric, 100, label, "heap");
}
metricActiveExecutorsAverage() {
return this.metricFactory.createMetric("glue.driver.ExecutorAllocationManager.executors.numberAllExecutors", common_1.MetricStatistic.AVERAGE, "Active Executors", this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricCompletedStagesSum() {
return this.metricFactory.createMetric("glue.driver.aggregate.numCompletedStages", common_1.MetricStatistic.SUM, "Completed Stages", this.typeCountDimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricCompletedTasksSum() {
return this.metricFactory.createMetric("glue.driver.aggregate.numCompletedTasks", common_1.MetricStatistic.SUM, "Completed Tasks", this.typeCountDimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricFailedTasksSum() {
return this.metricFactory.createMetric("glue.driver.aggregate.numFailedTasks", common_1.MetricStatistic.SUM, "Failed Tasks", this.typeCountDimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricFailedTasksRate() {
return this.metricFactory.toRate(this.metricFailedTasksSum(), this.rateComputationMethod, true, "failed", false);
}
metricKilledTasksSum() {
return this.metricFactory.createMetric("glue.driver.aggregate.numKilledTasks", common_1.MetricStatistic.SUM, "Killed Tasks", this.typeCountDimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
metricKilledTasksRate() {
return this.metricFactory.toRate(this.metricKilledTasksSum(), this.rateComputationMethod, true, "killed", false);
}
metricMaximumNeededExecutors() {
return this.metricFactory.createMetric("glue.driver.ExecutorAllocationManager.executors.numberMaxNeededExecutors", common_1.MetricStatistic.MAX, "Maximum Needed Executors", this.dimensionsMap, undefined, GlueNamespace, undefined, this.region, this.account);
}
}
exports.GlueJobMetricFactory = GlueJobMetricFactory;
_a = JSII_RTTI_SYMBOL_1;
GlueJobMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.GlueJobMetricFactory", version: "10.2.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2x1ZUpvYk1ldHJpY0ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHbHVlSm9iTWV0cmljRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLHlDQU1zQjtBQUV0QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFVN0IsTUFBYSxvQkFBcUIsU0FBUSwwQkFBaUI7SUFLekQsWUFBWSxhQUE0QixFQUFFLEtBQWdDO1FBQ3hFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLHFCQUFxQjtZQUN4QixLQUFLLENBQUMscUJBQXFCLElBQUksOEJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsSUFBSSxFQUFFLE9BQU87WUFDYixRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzVCLEdBQUcsSUFBSSxDQUFDLGFBQWE7WUFDckIsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUNwQyxtQ0FBbUMsRUFDbkMsd0JBQWUsQ0FBQyxHQUFHLEVBQ25CLFdBQVcsRUFDWCxJQUFJLENBQUMsYUFBYSxFQUNsQixTQUFTLEVBQ1QsYUFBYSxFQUNiLFNBQVMsRUFDVCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FDcEMsb0NBQW9DLEVBQ3BDLHdCQUFlLENBQUMsR0FBRyxFQUNuQixZQUFZLEVBQ1osSUFBSSxDQUFDLGFBQWEsRUFDbEIsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1Qs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YyxFQUNkLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsU0FBUyxFQUNULGFBQWEsRUFDYixTQUFTLEVBQ1QsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQzlCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUMzQixJQUFJLENBQUMscUJBQXFCLEVBQzFCLElBQUksRUFDSixRQUFRLEVBQ1IsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsNEJBQTRCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQ3BDLDBFQUEwRSxFQUMxRSx3QkFBZSxDQUFDLEdBQUcsRUFDbkIsMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsRUFDVCxhQUFhLEVBQ2IsU0FBUyxFQUNULElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQzs7QUF2TEgsb0RBd0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGltZW5zaW9uc01hcCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiO1xuXG5pbXBvcnQge1xuICBCYXNlTWV0cmljRmFjdG9yeSxcbiAgQmFzZU1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgTWV0cmljRmFjdG9yeSxcbiAgTWV0cmljU3RhdGlzdGljLFxuICBSYXRlQ29tcHV0YXRpb25NZXRob2QsXG59IGZyb20gXCIuLi8uLi9jb21tb25cIjtcblxuY29uc3QgR2x1ZU5hbWVzcGFjZSA9IFwiR2x1ZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdsdWVKb2JNZXRyaWNGYWN0b3J5UHJvcHMgZXh0ZW5kcyBCYXNlTWV0cmljRmFjdG9yeVByb3BzIHtcbiAgcmVhZG9ubHkgam9iTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlXG4gICAqL1xuICByZWFkb25seSByYXRlQ29tcHV0YXRpb25NZXRob2Q/OiBSYXRlQ29tcHV0YXRpb25NZXRob2Q7XG59XG5cbmV4cG9ydCBjbGFzcyBHbHVlSm9iTWV0cmljRmFjdG9yeSBleHRlbmRzIEJhc2VNZXRyaWNGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJhdGVDb21wdXRhdGlvbk1ldGhvZDogUmF0ZUNvbXB1dGF0aW9uTWV0aG9kO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGltZW5zaW9uc01hcDogRGltZW5zaW9uc01hcDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHR5cGVDb3VudERpbWVuc2lvbnNNYXA6IERpbWVuc2lvbnNNYXA7XG5cbiAgY29uc3RydWN0b3IobWV0cmljRmFjdG9yeTogTWV0cmljRmFjdG9yeSwgcHJvcHM6IEdsdWVKb2JNZXRyaWNGYWN0b3J5UHJvcHMpIHtcbiAgICBzdXBlcihtZXRyaWNGYWN0b3J5LCBwcm9wcyk7XG5cbiAgICB0aGlzLnJhdGVDb21wdXRhdGlvbk1ldGhvZCA9XG4gICAgICBwcm9wcy5yYXRlQ29tcHV0YXRpb25NZXRob2QgPz8gUmF0ZUNvbXB1dGF0aW9uTWV0aG9kLkFWRVJBR0U7XG4gICAgdGhpcy5kaW1lbnNpb25zTWFwID0ge1xuICAgICAgVHlwZTogXCJnYXVnZVwiLFxuICAgICAgSm9iUnVuSWQ6IFwiQUxMXCIsXG4gICAgICBKb2JOYW1lOiBwcm9wcy5qb2JOYW1lLFxuICAgIH07XG4gICAgdGhpcy50eXBlQ291bnREaW1lbnNpb25zTWFwID0ge1xuICAgICAgLi4udGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgVHlwZTogXCJjb3VudFwiLFxuICAgIH07XG4gIH1cblxuICBtZXRyaWNUb3RhbFJlYWRCeXRlc0Zyb21TMygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiZ2x1ZS5BTEwuczMuZmlsZXN5c3RlbS5yZWFkX2J5dGVzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJSZWFkIChTMylcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEdsdWVOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljVG90YWxXcml0dGVuQnl0ZXNUb1MzKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJnbHVlLkFMTC5zMy5maWxlc3lzdGVtLndyaXRlX2J5dGVzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJXcml0ZSAoUzMpXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBHbHVlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0F2ZXJhZ2VFeGVjdXRvckNwdVVzYWdlUGVyY2VudGFnZSgpIHtcbiAgICBjb25zdCBsYWJlbCA9IFwiQ1BVIFVzYWdlIChleGVjdXRvciBhdmVyYWdlKVwiO1xuICAgIGNvbnN0IG1ldHJpYyA9IHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcImdsdWUuQUxMLnN5c3RlbS5jcHVTeXN0ZW1Mb2FkXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuQVZFUkFHRSxcbiAgICAgIGxhYmVsLFxuICAgICAgdGhpcy5kaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgR2x1ZU5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5tdWx0aXBseU1ldHJpYyhtZXRyaWMsIDEwMCwgbGFiZWwsIFwiY3B1XCIpO1xuICB9XG5cbiAgbWV0cmljQXZlcmFnZUV4ZWN1dG9yTWVtb3J5VXNhZ2VQZXJjZW50YWdlKCkge1xuICAgIGNvbnN0IGxhYmVsID0gXCJKVk0gSGVhcCB1c2FnZSAoZXhlY3V0b3IgYXZlcmFnZSlcIjtcbiAgICBjb25zdCBtZXRyaWMgPSB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJnbHVlLkFMTC5qdm0uaGVhcC51c2FnZVwiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLkFWRVJBR0UsXG4gICAgICBsYWJlbCxcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEdsdWVOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkubXVsdGlwbHlNZXRyaWMobWV0cmljLCAxMDAsIGxhYmVsLCBcImhlYXBcIik7XG4gIH1cblxuICBtZXRyaWNBY3RpdmVFeGVjdXRvcnNBdmVyYWdlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuY3JlYXRlTWV0cmljKFxuICAgICAgXCJnbHVlLmRyaXZlci5FeGVjdXRvckFsbG9jYXRpb25NYW5hZ2VyLmV4ZWN1dG9ycy5udW1iZXJBbGxFeGVjdXRvcnNcIixcbiAgICAgIE1ldHJpY1N0YXRpc3RpYy5BVkVSQUdFLFxuICAgICAgXCJBY3RpdmUgRXhlY3V0b3JzXCIsXG4gICAgICB0aGlzLmRpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBHbHVlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0NvbXBsZXRlZFN0YWdlc1N1bSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiZ2x1ZS5kcml2ZXIuYWdncmVnYXRlLm51bUNvbXBsZXRlZFN0YWdlc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLlNVTSxcbiAgICAgIFwiQ29tcGxldGVkIFN0YWdlc1wiLFxuICAgICAgdGhpcy50eXBlQ291bnREaW1lbnNpb25zTWFwLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgR2x1ZU5hbWVzcGFjZSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICAgdGhpcy5hY2NvdW50LFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNDb21wbGV0ZWRUYXNrc1N1bSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiZ2x1ZS5kcml2ZXIuYWdncmVnYXRlLm51bUNvbXBsZXRlZFRhc2tzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgXCJDb21wbGV0ZWQgVGFza3NcIixcbiAgICAgIHRoaXMudHlwZUNvdW50RGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEdsdWVOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljRmFpbGVkVGFza3NTdW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcImdsdWUuZHJpdmVyLmFnZ3JlZ2F0ZS5udW1GYWlsZWRUYXNrc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLlNVTSxcbiAgICAgIFwiRmFpbGVkIFRhc2tzXCIsXG4gICAgICB0aGlzLnR5cGVDb3VudERpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBHbHVlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0ZhaWxlZFRhc2tzUmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LnRvUmF0ZShcbiAgICAgIHRoaXMubWV0cmljRmFpbGVkVGFza3NTdW0oKSxcbiAgICAgIHRoaXMucmF0ZUNvbXB1dGF0aW9uTWV0aG9kLFxuICAgICAgdHJ1ZSxcbiAgICAgIFwiZmFpbGVkXCIsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljS2lsbGVkVGFza3NTdW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWMoXG4gICAgICBcImdsdWUuZHJpdmVyLmFnZ3JlZ2F0ZS5udW1LaWxsZWRUYXNrc1wiLFxuICAgICAgTWV0cmljU3RhdGlzdGljLlNVTSxcbiAgICAgIFwiS2lsbGVkIFRhc2tzXCIsXG4gICAgICB0aGlzLnR5cGVDb3VudERpbWVuc2lvbnNNYXAsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBHbHVlTmFtZXNwYWNlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdGhpcy5yZWdpb24sXG4gICAgICB0aGlzLmFjY291bnQsXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0tpbGxlZFRhc2tzUmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LnRvUmF0ZShcbiAgICAgIHRoaXMubWV0cmljS2lsbGVkVGFza3NTdW0oKSxcbiAgICAgIHRoaXMucmF0ZUNvbXB1dGF0aW9uTWV0aG9kLFxuICAgICAgdHJ1ZSxcbiAgICAgIFwia2lsbGVkXCIsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljTWF4aW11bU5lZWRlZEV4ZWN1dG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmNyZWF0ZU1ldHJpYyhcbiAgICAgIFwiZ2x1ZS5kcml2ZXIuRXhlY3V0b3JBbGxvY2F0aW9uTWFuYWdlci5leGVjdXRvcnMubnVtYmVyTWF4TmVlZGVkRXhlY3V0b3JzXCIsXG4gICAgICBNZXRyaWNTdGF0aXN0aWMuTUFYLFxuICAgICAgXCJNYXhpbXVtIE5lZWRlZCBFeGVjdXRvcnNcIixcbiAgICAgIHRoaXMuZGltZW5zaW9uc01hcCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIEdsdWVOYW1lc3BhY2UsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlZ2lvbixcbiAgICAgIHRoaXMuYWNjb3VudCxcbiAgICApO1xuICB9XG59XG4iXX0=