class DataValidators::PbsDataValidator

Data validator class for pbs output type

Constants

COMPLETED

Attributes

log[R]

Public Class Methods

new(log = Logger.new(STDOUT)) click to toggle source
# File lib/data_validators/pbs_data_validator.rb, line 17
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 - optional, defaults to nil valid_data - required valid_data - required, defaults to “one-#{valid_data}” valid_data - required valid_data - required valid_data - required, defaults to 00:00:00 valid_data - required valid_data - required valid_data - optional, defaults to nil valid_data - set of history records history_record - required history_record - required history_record - required, either all history records 'U' or last history record with 'E' if vm finished history_record - required history_record - required

# File lib/data_validators/pbs_data_validator.rb, line 41
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 'host' unless string?(data['host'])
  fail_validation 'queue' unless string?(data['pbs_queue'])
  fail_validation 'owner' unless string?(data['realm'])
  fail_validation 'VMUUID' unless string?(data['vm_uuid'])
  fail_validation 'owner' unless string?(data['user_name'])
  fail_validation 'group' unless string?(data['group_name'])
  fail_validation 'ppn' unless number?(data['cpu_count'])
  fail_validation 'mem' unless number?(data['memory'])
  fail_validation 'HISTORY_RECORDS' if (!data['history']) || data['history'].empty?

  history = []
  data['history'].each do |h|
    history_record = h.clone
    fail_validation 'start' unless non_zero_number?(h['start_time'])
    history_record['start_time'] = Time.at(h['start_time'].to_i)
    fail_validation 'end' unless number?(h['end_time'])
    history_record['end_time'] = Time.at(h['end_time'].to_i)
    fail_validation 'seq' unless number?(h['seq'])
    fail_validation 'hostname' unless string?(h['hostname'])

    history_record['state'] = 'U'
    history << history_record
  end

  history.last['state'] = 'E' if data['status_code'] == COMPLETED
  valid_data['history'] = history

  valid_data['machine_name'] = default(data['machine_name'], :string, "one-#{valid_data['vm_uuid']}")

  duration = sum_rstime(data['history'], data['status_code'] == COMPLETED, valid_data['vm_uuid'])
  valid_data['duration'] = Time.at(duration)

  valid_data['disk_size'] = sum_disk_size(data['disks'], valid_data['vm_uuid'])

  valid_data
end