public void validate()

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);
        });
  }