def get_performance_info()

in stratozone-aws-export.py [0:0]


def get_performance_info(vm_id, region_name, block_device_list):
  """Query system for VM performance data.

  Args:
    vm_id: instance id.
    region_name: name of the AWS region
    block_device_list: list of devices (disks) attached to the vm
  """
  try:
     
    perf_client = boto3.client('cloudwatch', region_name)

    perf_queries = []
    global vm_perf_list
    disk_count = 0

    perf_queries.append(get_metric_data_query('AWS/EC2', 'CPUUtilization',
                                              'InstanceId', vm_id, 'Percent'))
    perf_queries.append(get_metric_data_query('AWS/EC2', 'NetworkOut',
                                              'InstanceId', vm_id,
                                              'Bytes'))
    perf_queries.append(get_metric_data_query('AWS/EC2', 'NetworkIn',
                                              'InstanceId', vm_id, 'Bytes'))
    for block_device in block_device_list:
      perf_queries.append(get_metric_data_query('AWS/EBS', 'VolumeReadOps',
                                                'VolumeId',
                                                block_device,
                                                'Count',
                                                'volumereadops'
                                                + str(disk_count)))
      perf_queries.append(get_metric_data_query('AWS/EBS', 'VolumeWriteOps',
                                                'VolumeId',
                                                block_device,
                                                'Count',
                                                'volumewriteops'
                                                + str(disk_count)))
      disk_count = disk_count + 1

      response = perf_client.get_metric_data(
          MetricDataQueries=perf_queries,
          StartTime=datetime.datetime.utcnow() - datetime.timedelta(days=30),
          EndTime=datetime.datetime.utcnow(),
          ScanBy='TimestampAscending'
      )

    first_arr_size = len(response['MetricDataResults'][0]['Values'])

    if (len(response['MetricDataResults'][1]['Values']) >= first_arr_size and
        len(response['MetricDataResults'][2]['Values']) >= first_arr_size and
        len(response['MetricDataResults'][3]['Values']) >= first_arr_size):

      for i in range(0, first_arr_size):
        vm_perf_info = stratozonedict.vm_perf.copy()
        vm_perf_info['MachineId'] = vm_id
        vm_perf_info['TimeStamp'] = get_formatted_datetime(response['MetricDataResults'][0]['Timestamps'][i])
        vm_perf_info['CpuUtilizationPercentage'] = '{:.2f}'.format(
            response['MetricDataResults'][0]['Values'][i])
        vm_perf_info['NetworkBytesPerSecSent'] = '{:.4f}'.format(
            response['MetricDataResults'][1]['Values'][i])
        vm_perf_info['NetworkBytesPerSecReceived'] = '{:.4f}'.format(
            response['MetricDataResults'][2]['Values'][i])

        tmp_read_io = 0
        tmp_write_io = 0

        for j in range(0, disk_count):
          tmp_read_io = tmp_read_io + (
              response['MetricDataResults'][3 + j]['Values'][i])
          tmp_write_io = tmp_write_io + (
              response['MetricDataResults'][4 + j]['Values'][i])

        vm_perf_info['DiskReadOperationsPerSec'] = '{:.4f}'.format(
            (tmp_read_io /1800))
        vm_perf_info['DiskWriteOperationsPerSec'] = '{:.4f}'.format(
            (tmp_write_io /1800))
        vm_perf_info['AvailableMemoryBytes'] = ''
        vm_perf_info['MemoryUtilizationPercentage'] = ''

        vm_perf_list.append(vm_perf_info)

  except Exception as e:
    logging.error('error in get_performance_info')
    logging.error(e)