Skip to content

Commit ad1a0f3

Browse files
authored
Merge pull request #77 from klemensn/openbsd-processors-count
Report SMT aware processors count on OpenBSD
2 parents 17bbb5b + ad7407e commit ad1a0f3

3 files changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
module Facts
4+
module Openbsd
5+
module Processors
6+
class Count
7+
FACT_NAME = 'processors.count'
8+
9+
def call_the_resolver
10+
fact_value = Facter::Resolvers::Openbsd::Processors.resolve(:online_count)
11+
Facter::ResolvedFact.new(FACT_NAME, fact_value)
12+
end
13+
end
14+
end
15+
end
16+
end

lib/facter/framework/core/file_loader.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@
709709
require_relative '../../facts/openbsd/os/hardware'
710710
require_relative '../../facts/openbsd/os/name'
711711
require_relative '../../facts/openbsd/os/release'
712+
require_relative '../../facts/openbsd/processors/count'
712713
require_relative '../../facts/openbsd/processors/isa'
713714
require_relative '../../facts/openbsd/ruby/platform'
714715
require_relative '../../facts/openbsd/ruby/sitedir'
@@ -721,6 +722,7 @@
721722
require_relative '../../resolvers/openbsd/dhcp'
722723
require_relative '../../resolvers/openbsd/dmi'
723724
require_relative '../../resolvers/openbsd/mountpoints'
725+
require_relative '../../resolvers/openbsd/processors'
724726
require_relative '../../resolvers/openbsd/virtual'
725727

726728
when 'openwrt'
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# frozen_string_literal: true
2+
3+
require_relative '../../../facter/resolvers/bsd/processors'
4+
5+
module Facter
6+
module Resolvers
7+
module Openbsd
8+
class Processors < BaseResolver
9+
init_resolver
10+
11+
class << self
12+
private
13+
14+
def post_resolve(fact_name, _options)
15+
@fact_list.fetch(fact_name) { collect_processors_info(fact_name) }
16+
end
17+
18+
def collect_processors_info(fact_name)
19+
require_relative '../../../facter/resolvers/bsd/ffi/ffi_helper'
20+
21+
count = online_count
22+
model = processor_model
23+
speed = processor_speed
24+
25+
@fact_list[:online_count] = count
26+
@fact_list[:model] = Array.new(count, model) if online_count && model
27+
@fact_list[:speed] = speed * 1000 * 1000 if speed
28+
29+
@fact_list[fact_name]
30+
end
31+
32+
CTL_HW = 6
33+
HW_MODEL = 2
34+
HW_NCPUONLINE = 25
35+
HW_CPUSPEED = 12
36+
37+
def processor_model
38+
Facter::Bsd::FfiHelper.sysctl(:string, [CTL_HW, HW_MODEL])
39+
end
40+
41+
def online_count
42+
Facter::Bsd::FfiHelper.sysctl(:uint32_t, [CTL_HW, HW_NCPUONLINE])
43+
end
44+
45+
def processor_speed
46+
Facter::Bsd::FfiHelper.sysctl(:uint32_t, [CTL_HW, HW_CPUSPEED])
47+
end
48+
end
49+
end
50+
end
51+
end
52+
end

0 commit comments

Comments
 (0)