2: def self.enum_cpuinfo
3: processor_num = -1
4: processor_list = []
5: cpuinfo = "/proc/cpuinfo"
6:
7: if File.exists?(cpuinfo)
8: model = Facter.value(:architecture)
9: case model
10: when "x86_64", "amd64", "i386", /parisc/, "hppa", "ia64"
11: Thread::exclusive do
12: File.readlines(cpuinfo).each do |l|
13: if l =~ /processor\s+:\s+(\d+)/
14: processor_num = $1.to_i
15: elsif l =~ /model name\s+:\s+(.*)\s*$/
16: processor_list[processor_num] = $1 unless processor_num == -1
17: processor_num = -1
18: elsif l =~ /processor\s+(\d+):\s+(.*)/
19: processor_num = $1.to_i
20: processor_list[processor_num] = $2 unless processor_num == -1
21: end
22: end
23: end
24:
25: when "ppc64"
26: Thread::exclusive do
27: File.readlines(cpuinfo).each do |l|
28: if l =~ /processor\s+:\s+(\d+)/
29: processor_num = $1.to_i
30: elsif l =~ /cpu\s+:\s+(.*)\s*$/
31: processor_list[processor_num] = $1 unless processor_num == -1
32: processor_num = -1
33: end
34: end
35: end
36:
37: when /arm/
38: Thread::exclusive do
39: File.readlines(cpuinfo).each do |l|
40: if l =~ /Processor\s+:\s+(.+)/
41: processor_num += 1
42: processor_list[processor_num] = $1.chomp
43: elsif l =~ /processor\s+:\s+(\d+)\s*$/
44: proc_num = $1.to_i
45: if proc_num != 0
46: processor_num += 1
47: processor_list[processor_num] = processor_list[processor_num-1]
48: end
49: end
50: end
51: end
52:
53: when /sparc/
54: Thread::exclusive do
55: File.readlines(cpuinfo).each do |l|
56: if l =~ /cpu\s+:\s+(.*)\s*$/
57: processor_num += 1
58: processor_list[processor_num] = $1
59: end
60: end
61: end
62: end
63: end
64: processor_list
65: end