module GenesisCollector::DmiDecode

Constants

DMI_TYPES

Public Instance Methods

get_dmi_data() click to toggle source
# File lib/genesis_collector/dmidecode.rb, line 50
def get_dmi_data
  @dmi_data ||= parse_dmidecode(shellout_with_timeout('dmidecode --type processor --type memory'))
end
parse_dmidecode(data) click to toggle source
# File lib/genesis_collector/dmidecode.rb, line 54
def parse_dmidecode(data)
  dict={}
  handle = 0
  current_title = nil

  data.lines.each do |line|
    case line
    when /^End Of Table/, /^\s+$/, /^\# dmidecode/, /^SMBIOS/, /structures occupying/, /^Table at/
      next
    when /^Handle\s+(.*?), DMI type (.*?),\s+/
      handle = $1.to_i(16)
      type_id = $2.to_i
      title = DMI_TYPES[type_id]
      next if title == 'end_of_table'
      current_title = title
      dict[title] ||= []
      dict[title] << {'handle' => handle}
    else
      raw_data = line.strip.split(':')
      if raw_data.is_a?(Array) && raw_data.length == 2
        k, v = raw_data
        dict[current_title].last[standardize_dmi_key(k.strip)] = v.strip
      end
    end
  end
  dict
end

Private Instance Methods

standardize_dmi_key(k) click to toggle source
# File lib/genesis_collector/dmidecode.rb, line 84
def standardize_dmi_key(k)
  k.downcase.gsub(/\s+/,'_')
end