class DataValidators::ApelDataValidator

Data validator class for apel output type

Constants

B_IN_GB
DEFAULT_VALUE
STATES

Attributes

log[R]

Public Class Methods

new(log = Logger.new(STDOUT)) click to toggle source
# File lib/data_validators/apel_data_validator.rb, line 20
def initialize(log = Logger.new(STDOUT))
  @log = log
end

Public Instance Methods

validate_data(data = nil) click to toggle source

All possible output fields and their default values:

valid_data - required valid_data - required valid_data - required valid_data - required valid_data - required valid_data - defaults to NULL, has to be bigger than valid_data if number valid_data - defaults to “one-#{valid_data}” valid_data - defaults to NULL valid_data - defaults to NULL valid_data - defaults to NULL valid_data - defaults to nil valid_data - defaults to NULL valid_data - required valid_data - defaults to NULL valid_data - defaults to 1 valid_data - defaults to 0 valid_data - defaults to 0 valid_data - defaults to 0 valid_data - defaults to NULL valid_data - defaults to NULL valid_data - defaults to NULL

# File lib/data_validators/apel_data_validator.rb, line 47
def validate_data(data = nil)
  unless data
    fail Errors::ValidationError, 'Skipping a malformed record. '\
      'No data available to validate'
  end

  valid_data = data.clone

  fail_validation 'Endpoint' unless string?(data['endpoint'])
  fail_validation 'SiteName' unless string?(data['site_name'])
  fail_validation 'CloudType' unless string?(data['cloud_type'])
  fail_validation 'VMUUID' unless string?(data['vm_uuid'])

  fail_validation 'StartTime' unless non_zero_number?(data['start_time'])
  start_time = data['start_time'].to_i
  valid_data['start_time'] = Time.at(start_time)
  fail_validation 'EndTime' unless number?(data['end_time'])
  end_time = data['end_time'].to_i
  valid_data['end_time'] = end_time == 0 ? DEFAULT_VALUE : Time.at(end_time)
  fail_validation 'EndTime' if end_time != 0 && valid_data['start_time'] > valid_data['end_time']

  valid_data['machine_name'] = default(data['machine_name'], :string, "one-#{valid_data['vm_uuid']}")
  valid_data['user_id'] = default(data['user_id'], :string, DEFAULT_VALUE)
  valid_data['group_id'] = default(data['group_id'], :string, DEFAULT_VALUE)
  valid_data['user_dn'] = default(data['user_dn'], :string, DEFAULT_VALUE)
  valid_data['user_name'] = default(data['user_name'], :string, DEFAULT_VALUE)
  valid_data['group_name'] = default(data['group_name'], :string, nil)

  status = default(data['status_code'], :number, nil)
  if status
    status = status.to_i
    fail_validation 'Status' unless status.to_s == data['status_code'] && status < STATES.size && status >= 0
  end
  valid_data['status'] = status ? STATES[status] : DEFAULT_VALUE

  fail_validation 'HISTORY_RECORDS' if (!data['history']) || data['history'].empty?

  duration = sum_rstime(data['history'], valid_data['status'] == 'completed', valid_data['vm_uuid'])
  valid_data['duration'] = Time.at(duration)
  valid_data['suspend'] = end_time == 0 ? DEFAULT_VALUE : (end_time - start_time) - duration
  valid_data['cpu_count'] = default(data['cpu_count'], :nzn, '1')

  valid_data['network_inbound'] = (default(data['network_inbound'], :number, 0).to_i / B_IN_GB).round
  valid_data['network_outbound'] = (default(data['network_outbound'], :number, 0).to_i / B_IN_GB).round

  valid_data['memory'] = default(data['memory'], :number, '0')
  valid_data['image_name'] = default(data['image_name'], :string, DEFAULT_VALUE)
  disk_size_sum = sum_disk_size(data['disks'], valid_data['vm_uuid'])
  valid_data['disk_size'] = disk_size_sum ? disk_size_sum : DEFAULT_VALUE

  valid_data['cloud_compute_service'] = default(data['cloud_compute_service'], :string, DEFAULT_VALUE)

  valid_data['number_of_public_ips'] = default(data['number_of_public_ips'], :number, 0)

  valid_data['benchmark_type'] = default(data['benchmark_type'], :string, DEFAULT_VALUE)
  valid_data['benchmark_value'] = default(data['benchmark_value'], :decimal, DEFAULT_VALUE)
  if valid_data['benchmark_type'] == DEFAULT_VALUE || valid_data['benchmark_value'] == DEFAULT_VALUE
    valid_data['benchmark_type'] = DEFAULT_VALUE
    valid_data['benchmark_value'] = DEFAULT_VALUE
  end

  valid_data
end