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