in src/constructs/cloudwatch/ec2-alarms.ts [58:82]
constructor(scope: GuStack, props: GuAlb4xxPercentageAlarmProps) {
const mathExpression = new MathExpression({
expression: "100*(m1+m2)/m3",
usingMetrics: {
m1: props.loadBalancer.metrics.httpCodeElb(HttpCodeElb.ELB_4XX_COUNT),
m2: props.loadBalancer.metrics.httpCodeTarget(HttpCodeTarget.TARGET_4XX_COUNT),
m3: props.loadBalancer.metrics.requestCount(),
},
label: `% of 4XX responses served for ${props.app} (load balancer and instances combined)`,
period: Duration.minutes(1),
});
const defaultAlarmName = `High 4XX error percentage from ${props.app} in ${scope.stage}`;
const defaultDescription = `${props.app} exceeded ${props.tolerated4xxPercentage}% error rate`;
const alarmProps = {
...props,
metric: mathExpression,
treatMissingData: TreatMissingData.NOT_BREACHING,
threshold: props.tolerated4xxPercentage,
comparisonOperator: ComparisonOperator.GREATER_THAN_THRESHOLD,
alarmName: props.alarmName ?? defaultAlarmName,
alarmDescription: props.alarmDescription ?? defaultDescription,
evaluationPeriods: props.numberOfMinutesAboveThresholdBeforeAlarm ?? 1,
};
super(scope, AppIdentity.suffixText(props, "High4xxPercentageAlarm"), alarmProps);
}