func()

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
}