in validator/validators/performance/performance_validator.go [234:274]
func (s *PerformanceValidator) GetWindowsPerformanceMetrics(startTime, endTime time.Time) ([]*cloudwatch.GetMetricStatisticsOutput, error) {
var (
metricNamespace = s.vConfig.GetMetricNamespace()
validationMetric = s.vConfig.GetMetricValidation()
ec2InstanceId = awsservice.GetInstanceId()
)
log.Printf("Start getting performance metrics from CloudWatch")
var statistics = []*cloudwatch.GetMetricStatisticsOutput{}
for _, stat := range validationMetric {
metricDimensions := []types.Dimension{
{
Name: aws.String("InstanceId"),
Value: aws.String(ec2InstanceId),
},
}
for _, dimension := range stat.MetricDimension {
metricDimensions = append(metricDimensions, types.Dimension{
Name: aws.String(dimension.Name),
Value: aws.String(dimension.Value),
})
}
log.Printf("Trying to get Metric %s for GetMetricStatistic ", stat.MetricName)
statList := []types.Statistic{
types.StatisticAverage,
}
// Windows procstat metrics always append a space and GetMetricData does not support space character
// Only workaround is to use GetMetricStatistics and retrieve the datapoints on a secondly period
statistic, err := awsservice.GetMetricStatistics(stat.MetricName, metricNamespace, metricDimensions, startTime, endTime, 1, statList, nil)
if err != nil {
return nil, err
}
statistics = append(statistics, statistic)
log.Printf("Statistics for Metric: %s", stat.MetricName)
for _, datapoint := range statistic.Datapoints {
log.Printf("Average: %f", *(datapoint.Average))
}
}
return statistics, nil
}