Module: GenesisCollector::Disks

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

Instance Method Summary collapse

Instance Method Details

#collect_disksObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/genesis_collector/disks.rb', line 4

def collect_disks
  ensure_command('smartctl')
  ensure_command('blkid')
  @payload[:disks] = enumerate_disks
  @payload[:disks].each do |d|
    info = get_disk_info(d.delete(:smartctl_cmd))
    d[:vendor_name] = info.match(/^Vendor:\s+(.*)$/)[1] rescue nil
    d[:vendor_name] ||= info.match(/^Device Model:\s+(\w+)[_ ](?:.*)$/)[1] rescue nil
    d[:product] = info.match(/^(?:Device Model|Product):\s+(.*)$/)[1]
    d[:serial_number] = info.match(/^Serial (?:n|N)umber:\s+(.*)$/)[1] rescue nil
    d[:size] = info.match(/^User Capacity:\s+(.*)$/)[1].split('bytes')[0].strip.gsub(',', '')

    if d[:dev].start_with?("/dev/sd")
      d[:slot] = get_scsi_slot(d[:dev])
      d[:uuid] = disk_uuid(d[:dev])
      d[:status] = disk_status(d[:dev])
    end
  end
  @payload[:disks].delete_if { |d| d[:serial_number].nil? }
rescue StandardError => ex
  # Just to be sure we don't send partial data
  @payload.delete(:disks)
  raise ex
end