class Facter::Resolvers::Processors

Private Class Methods

build_fact_list(result, cores_threads) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 90
def build_fact_list(result, cores_threads)
  @fact_list[:count] = result[:logical_count]
  @fact_list[:isa] = result[:isa]
  @fact_list[:models] = result[:models]
  @fact_list[:physicalcount] = result[:models].size
  @fact_list[:cores_per_socket] = cores_threads[:cores_per_socket]
  @fact_list[:threads_per_core] = cores_threads[:threads_per_core]
end
calculate_cores_threads(result_proc, data_proc) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 53
def calculate_cores_threads(result_proc, data_proc)
  cores = 0
  threads_per_core = 0
  result_proc.each do |proc|
    cores = proc.NumberOfCores
    threads_per_core = if check_hyperthreading(data_proc[:logical_count], cores) ||
                          cores > data_proc[:logical_count]
                         1
                       else
                         data_proc[:logical_count] / (cores * data_proc[:models].size)
                       end
  end
  { cores_per_socket: cores,
    threads_per_core: threads_per_core }
end
check_hyperthreading(cores, logical_processors) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 69
def check_hyperthreading(cores, logical_processors)
  cores == logical_processors
end
find_isa(arch) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 73
def find_isa(arch)
  architecture_hash =
    { 0 => 'x86', 1 => 'MIPS', 2 => 'Alpha', 3 => 'PowerPC', 5 => 'ARM', 6 => 'Itanium', 9 => 'x64' }
  isa = architecture_hash[arch]
  return isa if isa

  log.debug 'Unable to determine processor type: unknown architecture'
end
iterate_proc(result) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 38
def iterate_proc(result)
  models = []
  isa = nil
  logical_count = 0
  result.each do |proc|
    models << proc.Name
    logical_count += proc.NumberOfLogicalProcessors if proc.NumberOfLogicalProcessors
    isa ||= find_isa(proc.Architecture)
  end

  { models: models,
    isa: isa,
    logical_count: logical_processors_count(logical_count, models.count) }
end
logical_processors_count(logical_count, models_count) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 82
def logical_processors_count(logical_count, models_count)
  if logical_count.zero?
    models_count
  else
    logical_count
  end
end
post_resolve(fact_name, _options) click to toggle source

Count Isa Models PhysicalCount

# File lib/facter/resolvers/windows/processors.rb, line 16
def post_resolve(fact_name, _options)
  @fact_list.fetch(fact_name) { read_fact_from_win32_processor(fact_name) }
end
read_fact_from_win32_processor(fact_name) click to toggle source
# File lib/facter/resolvers/windows/processors.rb, line 20
def read_fact_from_win32_processor(fact_name)
  win = Facter::Util::Windows::Win32Ole.new
  query_string = 'SELECT Name,'\
  'Architecture,'\
  'NumberOfLogicalProcessors,'\
  'NumberOfCores FROM Win32_Processor'
  proc = win.exec_query(query_string)
  unless proc
    log.debug 'WMI query returned no results'\
    'for Win32_Processor with values Name, Architecture and NumberOfLogicalProcessors.'
    return
  end
  result = iterate_proc(proc)
  cores_threads = calculate_cores_threads(proc, result)
  build_fact_list(result, cores_threads)
  @fact_list[fact_name]
end