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