class FrameworkData

Attributes

date[RW]
directory[RW]
hmc_directory[RW]
verbose[RW]
vios_datafile_extension[RW]
vios_subdirectory[RW]

Public Class Methods

new(directory, date, config_file = nil) click to toggle source
# File lib/Framework/framework_data.rb, line 23
def initialize(directory, date, config_file = nil)
  @directory = directory
  @date = date
  @verbose = $VERBOSE.nil? || $VERBOSE == false ? 0 : $VERBOSE


  if config_file.nil?
    @vios_datafile_extension = "txt"
    @hmc_directory = '/hmc'
    @vios_subdirectory = '/vios'
  else
    options = YAML.load_file(config_file)
    @vios_datafile_extension = options[:vios_datafile_extension]
    @hmc_directory = options[:hmc_subdirectory]
    @vios_subdirectory = options[:vios_subdirectory]
  end
end

Public Instance Methods

create_dir(dirname) click to toggle source
# File lib/Framework/framework_data.rb, line 48
def create_dir(dirname)
  if Dir.exist?(dirname)
    puts ">DEBUG: dirname exist: #{dirname}, ignoring..." if @verbose > 0
  else
    puts ">DEBUG: creating dirname: #{dirname}" if @verbose > 0
    Dir.mkdir(dirname)
  end
end
create_structure(base_dir) click to toggle source
# File lib/Framework/framework_data.rb, line 41
def create_structure(base_dir)
  create_dir(base_dir)
  create_dir(base_dir + '/' + @date)
  create_dir(base_dir + '/' + @date + @hmc_directory)
  create_dir(base_dir + '/' + @date + @vios_subdirectory)
end
search_frame(sys_to_find) click to toggle source
# File lib/Framework/framework_data.rb, line 57
def search_frame(sys_to_find)
  systems = []

  puts ">DEBUG(1): searching data about frame #{sys_to_find}" if @verbose > 0
  hmc_dir_base = @directory  + '/' + @date + '/' + @hmc_directory + '/'
  puts ">DEBUG(1): checking directory #{hmc_dir_base}" if @verbose > 0
  Dir.chdir(hmc_dir_base)
  Dir.glob('*').select do |hmc|
    puts "DEBUG(1): Checking HMC #{hmc} (dir: #{hmc_dir_base}/#{hmc}" if @verbose > 0
    next unless File.directory?(hmc)

    hmc_data = HmcDir.new(hmc_dir_base + hmc)
    hmc_data.verbose = @verbose
    hmc_data.create_list_of_frames

    hmc_data.sys.each do |sys_name|
      sys = System.new(sys_name, hmc)
      sys.parse_raw_data(hmc_data.file_content(sys_name, 'lpar_info'))
      systems.push(sys) if sys.name == sys_to_find or sys_to_find == 'ALL'
    end
  end

  systems
end
search_lpar(lpar_to_find, data_to_find = 'none') click to toggle source
# File lib/Framework/framework_data.rb, line 82
def search_lpar(lpar_to_find, data_to_find = 'none')
  lpars = []

  puts ">DEBUG: verbose: #{@verbose}" if @verbose > 0
  puts '>DEBUG: searching data about frame on HMCs' if @verbose > 0

  hmc_dir_base = @directory + '/' + @date + '/' + @hmc_directory + '/'
  puts ">DEBUG: going to directory #{hmc_dir_base}" if @verbose > 0
  unless File.directory?(hmc_dir_base)
    puts ">DEBUG: Directory #{hmc_dir_base} doesn't exist!" if @verbose > 0
    return []
  end

  Dir.chdir(hmc_dir_base)
  Dir.glob('*').select do |hmc|
    puts ">DEBUG: Checking HMC #{hmc} and directory #{hmc_dir_base}/#{hmc} " if @verbose > 0
    unless File.directory? hmc
      puts ">DEBUG: Directory #{hmc} doesn't exist!" if @verbose > 0
      next
    end

    hmc_data = HmcDir.new(hmc_dir_base + hmc)
    hmc_data.verbose = @verbose
    hmc_data.create_list_of_frames

    hmc_data.sys.each do |sys_name|
      sys = System.new(sys_name, hmc)
      sys.parse_raw_data(hmc_data.file_content(sys_name, 'lpar_info'))
      lpars.push(sys.getLparByName(lpar_to_find)) if sys.lpars_by_name.include?(lpar_to_find)
    end
  end

  puts '>DEBUG: checking if data from both HMCs are equal (not implemented yet)' if @verbose > 0
  # @TODO: create code to compare real data and profiles from all HMCs

  puts '>DEBUG: searching data from VIOSes' if @verbose > 0
  lpars.each_index do |index|
    puts ">DEBUG:Possible VIOSes :" + lpars[index].vioses.sort.join(',') if @verbose > 0
    lpar_id = lpars[index].lpar_id
    lpars[index].vioses.each do |vios|
      filename = "#{directory}/#{@vios_subdirectory}/#{@date}/#{vios}.#{vios_datafile_extension}"
      puts ">DEBUG: VIOS #{vios} filename #{filename}" if @verbose > 0
      unless File.exist?(filename)
        puts "DEBUG: VIOS #{vios}, file doesn't exist! (is down? not accessible etc?)..."
        next
      end

      data_file = DataFile.new(filename)

      npiv_all = Lsmap_npiv.new(data_file.find("lsmap -all -npiv"), vios, lpars[index].sys)
      vhost_all = Lsmap.new(data_file.find("lsmap -all"), vios, lpars[index].sys)

      lpar_vscsi = vhost_all.mapping_for_lpar(lpar_id)
      lpar_npiv = npiv_all.mapping_for_lpar_id(lpar_id)

      puts ">DEBUG: Putting data from VIOSes about NPIV: #{lpar_npiv.count} vchosts" if @verbose > 0
      lpars[index].vscsi.concat(lpar_vscsi)
      puts ">DEBUG: Putting data from VIOSes about VSCSI: #{lpar_vscsi.count} vhosts" if @verbose > 0
      lpars[index].npiv.concat(lpar_npiv)
    end
  end

  lpars
end
vios_data(lparname, command) click to toggle source
# File lib/Framework/framework_data.rb, line 147
def vios_data(lparname, command)
  path = Pathname.new("#{directory}/#{@date}/#{@vios_subdirectory}/#{lparname}.#{vios_datafile_extension}")
  path.cleanpath
  filename = path.realpath
  puts ">DEBUG: Data will be taken from file #{filename}" if @verbose > 0
  unless File.exist?(filename)
    puts ">DEBUG: This file >#{filename}< doesn't exist! " if @verbose > 0
    return nil
  end
  data_file = DataFile.new(filename)
  data_file.find(command)
end