cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
105 lines • 15.6 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NetworkLoadBalancerMetricFactory = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_elasticloadbalancingv2_1 = require("aws-cdk-lib/aws-elasticloadbalancingv2");
const common_1 = require("../../common");
/**
* Metric factory to create metrics for network load-balanced service.
*/
class NetworkLoadBalancerMetricFactory extends common_1.BaseMetricFactory {
constructor(metricFactory, props) {
super(metricFactory, props);
this.networkLoadBalancer = props.networkLoadBalancer;
this.networkTargetGroup = props.networkTargetGroup;
this.invertStatisticsOfTaskCountEnabled =
props.invertStatisticsOfTaskCountEnabled ?? false;
}
metricHealthyTaskCount() {
return this.metricFactory.adaptMetric(this.networkTargetGroup.metrics.healthyHostCount({
label: "Healthy Tasks",
color: common_1.HealthyMetricColor,
statistic: this.invertStatisticsOfTaskCountEnabled
? common_1.MetricStatistic.MAX
: common_1.MetricStatistic.MIN,
region: this.region,
account: this.account,
}));
}
metricUnhealthyTaskCount() {
return this.metricFactory.adaptMetric(this.networkTargetGroup.metrics.unHealthyHostCount({
label: "Unhealthy Tasks",
color: common_1.UnhealthyMetricColor,
statistic: this.invertStatisticsOfTaskCountEnabled
? common_1.MetricStatistic.MIN
: common_1.MetricStatistic.MAX,
region: this.region,
account: this.account,
}));
}
metricHealthyTaskInPercent() {
return this.metricFactory.createMetricMath("(healthyTaskCount / (healthyTaskCount + unhealthyTaskCount)) * 100", {
healthyTaskCount: this.metricHealthyTaskCount(),
unhealthyTaskCount: this.metricUnhealthyTaskCount(),
}, "Healthy Task Percent (avg: ${AVG})");
}
metricActiveConnectionCount() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.activeFlowCount({
label: "Active",
region: this.region,
account: this.account,
}));
}
metricNewConnectionCount() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.newFlowCount({
label: "New",
region: this.region,
account: this.account,
}));
}
metricProcessedBytesMin() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.processedBytes({
statistic: common_1.MetricStatistic.MIN,
label: "Processed Bytes (min)",
region: this.region,
account: this.account,
}));
}
metricUnhealthyRoutingCount() {
const unhealthyRoutingFlowCount = this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.custom("UnhealthyRoutingFlowCount", {
statistic: common_1.MetricStatistic.SUM,
region: this.region,
account: this.account,
}));
return this.metricFactory.createMetricMath("FILL(unhealthyRoutingFlowCount, 0)", { unhealthyRoutingFlowCount }, "Unhealthy routing (fail open)");
}
metricClientResetCount() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.tcpClientResetCount({
label: "Client Reset",
statistic: common_1.MetricStatistic.SUM,
region: this.region,
account: this.account,
}));
}
metricTargetResetCount() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.tcpTargetResetCount({
label: "Target Reset",
statistic: common_1.MetricStatistic.SUM,
region: this.region,
account: this.account,
}));
}
metricElbResetCount() {
return this.metricFactory.adaptMetric(this.networkLoadBalancer.metrics.tcpElbResetCount({
label: "ELB Reset",
statistic: common_1.MetricStatistic.SUM,
region: this.region,
account: this.account,
}));
}
}
exports.NetworkLoadBalancerMetricFactory = NetworkLoadBalancerMetricFactory;
_a = JSII_RTTI_SYMBOL_1;
NetworkLoadBalancerMetricFactory[_a] = { fqn: "cdk-monitoring-constructs.NetworkLoadBalancerMetricFactory", version: "10.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmV0d29ya0xvYWRCYWxhbmNlck1ldHJpY0ZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJOZXR3b3JrTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVGQUlnRDtBQU1oRCx5Q0FPc0I7QUFtQnRCOztHQUVHO0FBQ0gsTUFBYSxnQ0FDWCxTQUFRLDBCQUFpQjtJQU96QixZQUNFLGFBQTRCLEVBQzVCLEtBQTRDO1FBRTVDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELElBQUksQ0FBQyxrQ0FBa0M7WUFDckMsS0FBSyxDQUFDLGtDQUFrQyxJQUFJLEtBQUssQ0FBQztJQUN0RCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDL0MsS0FBSyxFQUFFLGVBQWU7WUFDdEIsS0FBSyxFQUFFLDJCQUFrQjtZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLGtDQUFrQztnQkFDaEQsQ0FBQyxDQUFDLHdCQUFlLENBQUMsR0FBRztnQkFDckIsQ0FBQyxDQUFDLHdCQUFlLENBQUMsR0FBRztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtB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d0JBQWUsQ0FBQyxHQUFHO1lBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDaEQsS0FBSyxFQUFFLFdBQVc7WUFDbEIsU0FBUyxFQUFFLHdCQUFlLENBQUMsR0FBRztZQUM5QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUF6SUgsNEVBMElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSU5ldHdvcmtMb2FkQmFsYW5jZXIsXG4gIElOZXR3b3JrVGFyZ2V0R3JvdXAsXG4gIFRhcmdldFR5cGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuXG5pbXBvcnQge1xuICBCYXNlTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeVByb3BzLFxuICBJTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeSxcbn0gZnJvbSBcIi4vTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeVwiO1xuaW1wb3J0IHtcbiAgQmFzZU1ldHJpY0ZhY3RvcnksXG4gIEJhc2VNZXRyaWNGYWN0b3J5UHJvcHMsXG4gIEhlYWx0aHlNZXRyaWNDb2xvcixcbiAgTWV0cmljRmFjdG9yeSxcbiAgTWV0cmljU3RhdGlzdGljLFxuICBVbmhlYWx0aHlNZXRyaWNDb2xvcixcbn0gZnJvbSBcIi4uLy4uL2NvbW1vblwiO1xuXG4vKipcbiAqIFByb3BzIHRvIGNyZWF0ZSBOZXR3b3JrTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeVByb3BzXG4gIGV4dGVuZHMgQmFzZUxvYWRCYWxhbmNlck1ldHJpY0ZhY3RvcnlQcm9wcyxcbiAgICBCYXNlTWV0cmljRmFjdG9yeVByb3BzIHtcbiAgcmVhZG9ubHkgbmV0d29ya0xvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG4gIHJlYWRvbmx5IG5ldHdvcmtUYXJnZXRHcm91cDogSU5ldHdvcmtUYXJnZXRHcm91cDtcbiAgLyoqXG4gICAqIFRhcmdldCB0eXBlIGZvciB0aGUgTmV0d29ya0xvYWRCYWxhbmNlci5cbiAgICogU2V0IGV4cGxpY2l0bHkgdG8gZW5zdXJlIHRoYXQgdW5uZWNlc3Nhcnkgd2lkZ2V0cyBhcmUgbm90IHJlbmRlcmVkLlxuICAgKiBCeSBkZWZhdWx0LCB3ZSB3aWxsIHByb3ZpZGUgdGFzayBoZWFsdGggbWV0cmljcywgd2hpY2ggYXJlIG5vdFxuICAgKiByZWxldmFudCB0byB0aGUge0BsaW5rIFRhcmdldFR5cGUuQUxCfSB0YXJnZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0xvYWRCYWxhbmNlclRhcmdldFR5cGU/OiBUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIE1ldHJpYyBmYWN0b3J5IHRvIGNyZWF0ZSBtZXRyaWNzIGZvciBuZXR3b3JrIGxvYWQtYmFsYW5jZWQgc2VydmljZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtMb2FkQmFsYW5jZXJNZXRyaWNGYWN0b3J5XG4gIGV4dGVuZHMgQmFzZU1ldHJpY0ZhY3RvcnlcbiAgaW1wbGVtZW50cyBJTG9hZEJhbGFuY2VyTWV0cmljRmFjdG9yeVxue1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmV0d29ya0xvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBuZXR3b3JrVGFyZ2V0R3JvdXA6IElOZXR3b3JrVGFyZ2V0R3JvdXA7XG4gIHByb3RlY3RlZCByZWFkb25seSBpbnZlcnRTdGF0aXN0aWNzT2ZUYXNrQ291bnRFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1ldHJpY0ZhY3Rvcnk6IE1ldHJpY0ZhY3RvcnksXG4gICAgcHJvcHM6IE5ldHdvcmtMb2FkQmFsYW5jZXJNZXRyaWNGYWN0b3J5UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKG1ldHJpY0ZhY3RvcnksIHByb3BzKTtcblxuICAgIHRoaXMubmV0d29ya0xvYWRCYWxhbmNlciA9IHByb3BzLm5ldHdvcmtMb2FkQmFsYW5jZXI7XG4gICAgdGhpcy5uZXR3b3JrVGFyZ2V0R3JvdXAgPSBwcm9wcy5uZXR3b3JrVGFyZ2V0R3JvdXA7XG4gICAgdGhpcy5pbnZlcnRTdGF0aXN0aWNzT2ZUYXNrQ291bnRFbmFibGVkID1cbiAgICAgIHByb3BzLmludmVydFN0YXRpc3RpY3NPZlRhc2tDb3VudEVuYWJsZWQgPz8gZmFsc2U7XG4gIH1cblxuICBtZXRyaWNIZWFsdGh5VGFza0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLm5ldHdvcmtUYXJnZXRHcm91cC5tZXRyaWNzLmhlYWx0aHlIb3N0Q291bnQoe1xuICAgICAgICBsYWJlbDogXCJIZWFsdGh5IFRhc2tzXCIsXG4gICAgICAgIGNvbG9yOiBIZWFsdGh5TWV0cmljQ29sb3IsXG4gICAgICAgIHN0YXRpc3RpYzogdGhpcy5pbnZlcnRTdGF0aXN0aWNzT2ZUYXNrQ291bnRFbmFibGVkXG4gICAgICAgICAgPyBNZXRyaWNTdGF0aXN0aWMuTUFYXG4gICAgICAgICAgOiBNZXRyaWNTdGF0aXN0aWMuTUlOLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljVW5oZWFsdGh5VGFza0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLm5ldHdvcmtUYXJnZXRHcm91cC5tZXRyaWNzLnVuSGVhbHRoeUhvc3RDb3VudCh7XG4gICAgICAgIGxhYmVsOiBcIlVuaGVhbHRoeSBUYXNrc1wiLFxuICAgICAgICBjb2xvcjogVW5oZWFsdGh5TWV0cmljQ29sb3IsXG4gICAgICAgIHN0YXRpc3RpYzogdGhpcy5pbnZlcnRTdGF0aXN0aWNzT2ZUYXNrQ291bnRFbmFibGVkXG4gICAgICAgICAgPyBNZXRyaWNTdGF0aXN0aWMuTUlOXG4gICAgICAgICAgOiBNZXRyaWNTdGF0aXN0aWMuTUFYLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljSGVhbHRoeVRhc2tJblBlcmNlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWNNYXRoKFxuICAgICAgXCIoaGVhbHRoeVRhc2tDb3VudCAvIChoZWFsdGh5VGFza0NvdW50ICsgdW5oZWFsdGh5VGFza0NvdW50KSkgKiAxMDBcIixcbiAgICAgIHtcbiAgICAgICAgaGVhbHRoeVRhc2tDb3VudDogdGhpcy5tZXRyaWNIZWFsdGh5VGFza0NvdW50KCksXG4gICAgICAgIHVuaGVhbHRoeVRhc2tDb3VudDogdGhpcy5tZXRyaWNVbmhlYWx0aHlUYXNrQ291bnQoKSxcbiAgICAgIH0sXG4gICAgICBcIkhlYWx0aHkgVGFzayBQZXJjZW50IChhdmc6ICR7QVZHfSlcIixcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQWN0aXZlQ29ubmVjdGlvbkNvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLm5ldHdvcmtMb2FkQmFsYW5jZXIubWV0cmljcy5hY3RpdmVGbG93Q291bnQoe1xuICAgICAgICBsYWJlbDogXCJBY3RpdmVcIixcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY05ld0Nvbm5lY3Rpb25Db3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5uZXR3b3JrTG9hZEJhbGFuY2VyLm1ldHJpY3MubmV3Rmxvd0NvdW50KHtcbiAgICAgICAgbGFiZWw6IFwiTmV3XCIsXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNQcm9jZXNzZWRCeXRlc01pbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5uZXR3b3JrTG9hZEJhbGFuY2VyLm1ldHJpY3MucHJvY2Vzc2VkQnl0ZXMoe1xuICAgICAgICBzdGF0aXN0aWM6IE1ldHJpY1N0YXRpc3RpYy5NSU4sXG4gICAgICAgIGxhYmVsOiBcIlByb2Nlc3NlZCBCeXRlcyAobWluKVwiLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbWV0cmljVW5oZWFsdGh5Um91dGluZ0NvdW50KCkge1xuICAgIGNvbnN0IHVuaGVhbHRoeVJvdXRpbmdGbG93Q291bnQgPSB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLm5ldHdvcmtMb2FkQmFsYW5jZXIubWV0cmljcy5jdXN0b20oXCJVbmhlYWx0aHlSb3V0aW5nRmxvd0NvdW50XCIsIHtcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5jcmVhdGVNZXRyaWNNYXRoKFxuICAgICAgXCJGSUxMKHVuaGVhbHRoeVJvdXRpbmdGbG93Q291bnQsIDApXCIsXG4gICAgICB7IHVuaGVhbHRoeVJvdXRpbmdGbG93Q291bnQgfSxcbiAgICAgIFwiVW5oZWFsdGh5IHJvdXRpbmcgKGZhaWwgb3BlbilcIixcbiAgICApO1xuICB9XG5cbiAgbWV0cmljQ2xpZW50UmVzZXRDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNGYWN0b3J5LmFkYXB0TWV0cmljKFxuICAgICAgdGhpcy5uZXR3b3JrTG9hZEJhbGFuY2VyLm1ldHJpY3MudGNwQ2xpZW50UmVzZXRDb3VudCh7XG4gICAgICAgIGxhYmVsOiBcIkNsaWVudCBSZXNldFwiLFxuICAgICAgICBzdGF0aXN0aWM6IE1ldHJpY1N0YXRpc3RpYy5TVU0sXG4gICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBtZXRyaWNUYXJnZXRSZXNldENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0ZhY3RvcnkuYWRhcHRNZXRyaWMoXG4gICAgICB0aGlzLm5ldHdvcmtMb2FkQmFsYW5jZXIubWV0cmljcy50Y3BUYXJnZXRSZXNldENvdW50KHtcbiAgICAgICAgbGFiZWw6IFwiVGFyZ2V0IFJlc2V0XCIsXG4gICAgICAgIHN0YXRpc3RpYzogTWV0cmljU3RhdGlzdGljLlNVTSxcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIG1ldHJpY0VsYlJlc2V0Q291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljRmFjdG9yeS5hZGFwdE1ldHJpYyhcbiAgICAgIHRoaXMubmV0d29ya0xvYWRCYWxhbmNlci5tZXRyaWNzLnRjcEVsYlJlc2V0Q291bnQoe1xuICAgICAgICBsYWJlbDogXCJFTEIgUmVzZXRcIixcbiAgICAgICAgc3RhdGlzdGljOiBNZXRyaWNTdGF0aXN0aWMuU1VNLFxuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uLFxuICAgICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=