module KPM::SystemProxy::CpuInformation

def fetch

def fetch
  cpu_info = nil
  if OS.windows?
    cpu_info = fetch_windows
  elsif OS.linux?
    cpu_info = fetch_linux
  elsif OS.mac?
    cpu_info = fetch_mac
  end
  cpu_info
end

def fetch_linux

def fetch_linux
  cpu_data = `cat /proc/cpuinfo 2>&1`.gsub("\t",'')
  cpu = get_hash(cpu_data)
  cpu
end

def fetch_mac

def fetch_mac
  cpu_data = `system_profiler SPHardwareDataType | grep -e "Processor" -e "Cores" -e "Cache" 2>&1`
  cpu = get_hash(cpu_data)
  cpu
end

def fetch_windows

def fetch_windows
  cpu_name = `wmic cpu get Name`.split("\n\n")
  cpu_caption = `wmic cpu get Caption`.split("\n\n")
  cpu_max_clock_speed = `wmic cpu get MaxClockSpeed`.split("\n\n")
  cpu_device_id = `wmic cpu get DeviceId`.split("\n\n")
  cpu_status = `wmic cpu get Status`.split("\n\n")
  cpu = Hash.new
  cpu[cpu_name[0].to_s.strip] = {:cpu_detail => cpu_name[0].to_s.strip, :value => cpu_name[1].to_s.strip}
  cpu[cpu_caption[0].to_s.strip] = {:cpu_detail => cpu_caption[0].to_s.strip, :value => cpu_caption[1].to_s.strip}
  cpu[cpu_max_clock_speed[0].to_s.strip] = {:cpu_detail => cpu_max_clock_speed[0].to_s.strip, :value => cpu_max_clock_speed[1].to_s.strip}
  cpu[cpu_device_id[0].to_s.strip] = {:cpu_detail => cpu_device_id[0].to_s.strip, :value => cpu_device_id[1].to_s.strip}
  cpu[cpu_status[0].to_s.strip] = {:cpu_detail => cpu_status[0].to_s.strip, :value => cpu_status[1].to_s.strip}
  cpu
end

def get_hash(data)

def get_hash(data)
  cpu = Hash.new
  unless data.nil?
    data.split("\n").each do |info|
      infos = info.split(':')
      unless infos[0].to_s.strip.eql?('flags')
        cpu[infos[0].to_s.strip] = {:cpu_detail => infos[0].to_s.strip, :value => infos[1].to_s.strip}
      end
    end
  end
  cpu
end

def get_labels

def get_labels
  labels = [{:label => :cpu_detail},
            {:label => :value}]
  labels
end