public void validate()

in validator/src/main/java/com/amazon/aoc/validators/PerformanceValidator.java [80:154]


  public void validate() throws Exception {
    final Date endTime = new Date();
    // Convert collection duration from minutes to milliseconds
    final Integer durationMs = validationConfig.getCollectionPeriod() * 60000;
    final Date startTime = new Date(System.currentTimeMillis() - durationMs);

    final String dataRateKey = validationConfig.getDataMode() + "-"
        + validationConfig.getDataRate();
    List<Dimension> dimensions = Arrays.asList(
        createDimension("testcase", validationConfig.getTestcase()),
        createDimension("commit_id", validationConfig.getCommitId()),
        createDimension("data_rate", dataRateKey),
        createDimension("InstanceId", validationConfig.getInstanceId()),
        createDimension("instance_type", validationConfig.getInstanceType()),
        createDimension("launch_date", validationConfig.getLaunchDate()),
        createDimension("exe", validationConfig.getExe()),
        createDimension("process_name", validationConfig.getProcessName()),
        createDimension("testing_ami", validationConfig.getTestingAmi()),
        createDimension("negative_soaking", validationConfig.getNegativeSoaking())
    );

    // Create requests
    final GetMetricStatisticsRequest request = new GetMetricStatisticsRequest()
        .withNamespace(context.getMetricNamespace())
        .withPeriod(validationConfig.getDatapointPeriod())
        .withStartTime(startTime)
        .withEndTime(endTime)
        .withDimensions(dimensions)
        .withStatistics(Statistic.Average, Statistic.Maximum);
    final GetMetricStatisticsRequest cpuStatsRequest = request
        .clone()
        .withMetricName(validationConfig.getCpuMetricName());
    final GetMetricStatisticsRequest memoryStatsRequest = request
        .clone()
        .withMetricName(validationConfig.getMemoryMetricName());

    CloudWatchService cloudWatchService = new CloudWatchService(context.getRegion());
    RetryHelper.retry(
        MAX_RETRY_COUNT,
        () -> {
          log.info("retrieving cpu statistics");
          List<Datapoint> cpuDatapoints = cloudWatchService.getDatapoints(cpuStatsRequest);
          Double avgCpu = getAverageStats(cpuDatapoints);
          Double maxCpu = getMaxStats(cpuDatapoints);
          log.info("retrieving memory statistics");
          List<Datapoint> memoryDatapoints = cloudWatchService.getDatapoints(memoryStatsRequest);
          Double avgMemory = getAverageStats(memoryDatapoints) / BYTES_IN_MEGABYTES;
          Double maxMemory = getMaxStats(memoryDatapoints) / BYTES_IN_MEGABYTES;

          final PerformanceResult result = new PerformanceResult(
              validationConfig.getTestcase(),
              validationConfig.getInstanceType(),
              validationConfig.getOtReceivers(),
              validationConfig.getOtProcessors(),
              validationConfig.getOtExporters(),
              validationConfig.getDataType(),
              validationConfig.getDataMode(),
              validationConfig.getDataRate(),
              avgCpu,
              avgMemory,
              maxCpu,
              maxMemory,
              validationConfig.getCommitId(),
              validationConfig.getCollectionPeriod(),
              validationConfig.getTestingAmi()
          );

          try {
            new ObjectMapper().writeValue(new File("/var/output/" + outputFileName), result);
            log.info("Result written to " + outputFileName);
          } catch (Exception e) {
            log.error("failed to write performance result to file." + e.getMessage());
          }
        });
  }