in validator/src/main/java/com/amazon/aoc/validators/AlarmPullingValidator.java [47:94]
public void validate() throws Exception {
Collections.sort(context.getAlarmNameList());
Dimension dimension = new Dimension()
.withName(TEST_CASE_DIM_KEY).withValue(context.getTestcase());
RetryHelper.retry(
this.pullTimes,
this.pullDuration * 1000,
false,
() -> {
List<MetricAlarm> alarmList =
this.cloudWatchAlarmService.listAlarms(context.getAlarmNameList());
// compare the alarm name
alarmList.sort(Comparator.comparing(MetricAlarm::getAlarmName));
for (int i = 0; i != context.getAlarmNameList().size(); ++i) {
if (!context.getAlarmNameList().get(i).equals(alarmList.get(i).getAlarmName())) {
log.error("alarm {} cannot be found", context.getAlarmNameList().get(i));
//emit soaking validation metric
cloudWatchService.putMetricData(SOAKING_NAMESPACE, METRIC_NAME, 0.0, dimension);
System.exit(1);
}
}
// check the status of the alarms, exit if one of them is alarming
for (MetricAlarm metricAlarm : alarmList) {
log.info(metricAlarm.getStateValue());
if (!metricAlarm.getStateValue().equals("OK")) {
log.error(
"alarm {} is alarming, status is {}, "
+ "metric is {}, "
+ "matric error : {}, "
+ "failing to bake",
metricAlarm.getAlarmName(),
metricAlarm.getStateValue(),
metricAlarm.getMetrics(),
metricAlarm.getStateReason());
cloudWatchService.putMetricData(SOAKING_NAMESPACE, METRIC_NAME, 0.0, dimension);
System.exit(1);
}
}
log.info("all alarms look good, continue to bake");
cloudWatchService.putMetricData(SOAKING_NAMESPACE, METRIC_NAME, 1.0, dimension);
// throw a dummy exception here to make it retry
throw new BaseException(ExceptionCode.ALARM_BAKING);
});
}