Module: Celluloid::Internals::CPUCounter

Defined in:
lib/celluloid/internals/cpu_counter.rb

Class Method Summary collapse

Class Method Details

.coresObject



5
6
7
# File 'lib/celluloid/internals/cpu_counter.rb', line 5

def cores
  @cores ||= count_cores
end

.count_coresObject



11
12
13
# File 'lib/celluloid/internals/cpu_counter.rb', line 11

def count_cores
  from_result(from_env || from_sysdev || from_java || from_proc || from_win32ole || from_sysctl) || 1
end

.from_envObject



15
16
17
18
19
# File 'lib/celluloid/internals/cpu_counter.rb', line 15

def from_env
  result = ENV["NUMBER_OF_PROCESSORS"]
  result if result && !result.empty?
rescue
end

.from_javaObject



32
33
34
35
# File 'lib/celluloid/internals/cpu_counter.rb', line 32

def from_java
  Java::Java.lang.Runtime.getRuntime.availableProcessors if defined? Java::Java
rescue
end

.from_procObject



37
38
39
40
# File 'lib/celluloid/internals/cpu_counter.rb', line 37

def from_proc
  File.read('/proc/cpuinfo').scan(/^processor\s*:/).size if File.exist?('/proc/cpuinfo')
rescue
end

.from_result(result) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/celluloid/internals/cpu_counter.rb', line 54

def from_result(result)
  if result
    i = Integer(result.to_s[/\d+/], 10)
    return i if i > 0
  end
rescue
end

.from_sysctlObject



49
50
51
52
# File 'lib/celluloid/internals/cpu_counter.rb', line 49

def from_sysctl
  Integer `sysctl -n hw.ncpu 2>/dev/null`
rescue
end

.from_sysdevObject



21
22
23
24
25
26
27
28
29
30
# File 'lib/celluloid/internals/cpu_counter.rb', line 21

def from_sysdev
  ::IO.read("/sys/devices/system/cpu/present").split("-").last.to_i + 1
rescue Errno::ENOENT
  begin
    result = Dir["/sys/devices/system/cpu/cpu*"].count { |n| n =~ /cpu\d+/ }
    result unless result.zero?
  rescue
  end
rescue
end

.from_win32oleObject



42
43
44
45
46
47
# File 'lib/celluloid/internals/cpu_counter.rb', line 42

def from_win32ole
  require 'win32ole'
  WIN32OLE.connect("winmgmts://").ExecQuery("select * from Win32_ComputerSystem").NumberOfProcessors
rescue LoadError
rescue
end