Module: GenesisCollector::DmiDecode

Included in:
Collector
Defined in:
lib/genesis_collector/dmidecode.rb

Constant Summary collapse

DMI_TYPES =
{
  0 => 'bios',
  1 => 'system',
  2 => 'base_board',
  3 => 'chassis',
  4 => 'processor',
  5 => 'memory_controller',
  6 => 'memory_module',
  7 => 'cache',
  8 => 'port_connector',
  9 => 'system_slots',
  10 => 'on_board_devices',
  11 => 'oem_strings',
  12 => 'system_configuration_options',
  13 => 'bios_language',
  14 => 'group_associations',
  15 => 'system_event_log',
  16 => 'physical_memory_array',
  17 => 'memory_device',
  18 => '32_bit_memory_error',
  19 => 'memory_array_mapped_address',
  20 => 'memory_device_mapped_address',
  21 => 'builtin_pointing_device',
  22 => 'portable_battery',
  23 => 'system_reset',
  24 => 'hardware_security',
  25 => 'system_power_controls',
  26 => 'voltage_probe',
  27 => 'cooling_device',
  28 => 'temperature_probe',
  29 => 'electrical_current_probe',
  30 => 'out_of_band_remote_access',
  31 => 'boot_integrity_services',
  32 => 'system_boot',
  33 => '64_bit_memory_error',
  34 => 'management_device',
  35 => 'management_device_component',
  36 => 'management_device_threshold data',
  37 => 'memory_channel',
  38 => 'ipmi_device',
  39 => 'power_supply',
  40 => 'additional_information',
  41 => 'onboard_device',
  127 => 'end_of_table'
}

Instance Method Summary collapse

Instance Method Details

#get_dmi_dataObject



50
51
52
# 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) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# 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