openfact 5.2.1 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5a589e601bbd6104761454fe62993ccd31ecff21e819fa9264956ac5aa22130
4
- data.tar.gz: 5513ddbfd7586fb4d471aa97f423ad347ad3f0c79a7f3f1ad064a7482c8e73b9
3
+ metadata.gz: f6d2e82c285041a67df8e09555f99b036c71b809b0f2de5b1bf51bffbd4ba6b6
4
+ data.tar.gz: ed4379f690cc03afd6e55a34f9b92ef71f4092c1f39a5e141f962957cc13da16
5
5
  SHA512:
6
- metadata.gz: 110648d95577eb8336f1b75051d03b676ae34bb39ae23956265170a925f390e0844d769b369159aa3dd2b770d2702867262530697fdd7be1c9f3fd8e98e3f4a0
7
- data.tar.gz: 3b078e9f6be75c1b19de6192c02a3643775347b8ef099cd96e7fcc398cceedfa0bdbb5510300791c81bee7c460558e47114cf8b789958f8d7f94c4e0fcff26e9
6
+ metadata.gz: c355f5cade881c26c9bb534e0db6a60cb1a3bbd4ff9a58d95b43cbe512155b797bdccb9acbc7e2cba5b97b048472c65190a35a7c736a26e604c2749af0627716
7
+ data.tar.gz: 2f767582f751bbc74a73dd7dd26457f4bcd2c201a2cadfe7fc8aab38b8904a29cc7b3438265bc37de04f6e960c24b1a573c62a4b575025df73f2af524b0bf1d2
@@ -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
@@ -201,11 +201,11 @@ module Facter
201
201
  Cli.commands.values
202
202
  .select { |command_class| command_class.instance_of?(Thor::Command) }
203
203
  .each do |command|
204
- help_command_options << build_option(
205
- command['name'],
206
- [command['usage'].split(',')[1]],
207
- command['description']
208
- )
204
+ help_command_options << build_option(
205
+ command['name'],
206
+ [command['usage'].split(',')[1]],
207
+ command['description']
208
+ )
209
209
  end
210
210
 
211
211
  help_command_options
@@ -709,6 +709,7 @@ os_hierarchy.each do |os|
709
709
  require_relative '../../facts/openbsd/os/hardware'
710
710
  require_relative '../../facts/openbsd/os/name'
711
711
  require_relative '../../facts/openbsd/os/release'
712
+ require_relative '../../facts/openbsd/processors/count'
712
713
  require_relative '../../facts/openbsd/processors/isa'
713
714
  require_relative '../../facts/openbsd/ruby/platform'
714
715
  require_relative '../../facts/openbsd/ruby/sitedir'
@@ -721,6 +722,7 @@ os_hierarchy.each do |os|
721
722
  require_relative '../../resolvers/openbsd/dhcp'
722
723
  require_relative '../../resolvers/openbsd/dmi'
723
724
  require_relative '../../resolvers/openbsd/mountpoints'
725
+ require_relative '../../resolvers/openbsd/processors'
724
726
  require_relative '../../resolvers/openbsd/virtual'
725
727
 
726
728
  when 'openwrt'
@@ -70,7 +70,7 @@ module Facter
70
70
  .select { |dir| dir =~ /cpu[0-9]+$/ }
71
71
  .select { |dir| File.exist?("/sys/devices/system/cpu/#{dir}/topology/physical_package_id") }
72
72
  .map do |dir|
73
- Facter::Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
73
+ Facter::Util::FileHelper.safe_read("/sys/devices/system/cpu/#{dir}/topology/physical_package_id").strip
74
74
  end
75
75
  .uniq.count
76
76
  end
@@ -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
@@ -10,9 +10,11 @@ module Facter
10
10
  # :model
11
11
 
12
12
  VM_GUEST_SYSCTL_NAMES = {
13
+ 'QEMU' => 'qemu',
13
14
  'VMM' => 'vmm',
14
- 'vServer' => 'vserver',
15
+ 'Yandex' => 'yandex',
15
16
  'oracle' => 'virtualbox',
17
+ 'vServer' => 'vserver',
16
18
  'xen' => 'xenu',
17
19
  'none' => nil
18
20
  }.freeze
@@ -24,17 +26,23 @@ module Facter
24
26
  end
25
27
 
26
28
  CTL_HW = 6
29
+ HW_VENDOR = 14
27
30
  HW_PRODUCT = 15
28
31
 
29
32
  def read_facts(fact_name)
30
33
  require 'facter/resolvers/bsd/ffi/ffi_helper'
31
34
 
32
35
  vm = Facter::Bsd::FfiHelper.sysctl(:string, [CTL_HW, HW_PRODUCT])
33
- vm = if VM_GUEST_SYSCTL_NAMES.key?(vm)
34
- VM_GUEST_SYSCTL_NAMES[vm]
35
- else
36
- 'physical'
37
- end
36
+ if VM_GUEST_SYSCTL_NAMES.key?(vm)
37
+ vm = VM_GUEST_SYSCTL_NAMES[vm]
38
+ else
39
+ vm = Facter::Bsd::FfiHelper.sysctl(:string, [CTL_HW, HW_VENDOR])
40
+ vm = if VM_GUEST_SYSCTL_NAMES.key?(vm)
41
+ VM_GUEST_SYSCTL_NAMES[vm]
42
+ else
43
+ 'physical'
44
+ end
45
+ end
38
46
  @fact_list[:vm] = vm
39
47
  @fact_list[fact_name]
40
48
  end
@@ -26,7 +26,8 @@ module Facter
26
26
  def parse_output(output)
27
27
  @fact_list[:logical_count] = output.scan(/module/).size
28
28
  @fact_list[:physical_count] = output.scan(/chip_id .*/).uniq.size
29
- @fact_list[:speed] = output.scan(/current_clock_Hz .*/).first.gsub(/[a-zA-z\s]+/, '').to_i
29
+ # .scan(//current_clock_Hz\s+(\d+)/) returns [['123']] (or [['123'], ['456']] if there are more matches)
30
+ @fact_list[:speed] = output.scan(/current_clock_Hz\s+(\d+)/).first&.first&.to_i
30
31
  @fact_list[:models] = output.scan(/brand .*/).map { |elem| elem.gsub(/brand(\s+)/, '') }
31
32
  calculate_threads_cores(output)
32
33
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'facter/util/linux'
4
+
3
5
  module Facter
4
6
  module Util
5
7
  module Linux
@@ -73,11 +75,18 @@ module Facter
73
75
  end
74
76
 
75
77
  def search_with_dhcpcd_command(interface_name)
76
- @log.debug("Attempt to get DHCP for interface #{interface_name}, from dhcpcd command")
78
+ return if interface_name == 'lo'
77
79
 
78
80
  @dhcpcd_command ||= Facter::Core::Execution.which('dhcpcd')
79
81
  return unless @dhcpcd_command
80
82
 
83
+ unless Facter::Util::Linux.process_running?('dhcpcd')
84
+ @log.debug('Skipping dhcpcd -U because dhcpcd daemon is not running')
85
+ return
86
+ end
87
+
88
+ @log.debug("Attempt to get DHCP for interface #{interface_name}, from dhcpcd command")
89
+
81
90
  output = Facter::Core::Execution.execute("#{@dhcpcd_command} -U #{interface_name}", logger: @log)
82
91
  dhcp = output.match(/dhcp_server_identifier='(.*)'/)
83
92
  dhcp[1] if dhcp
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Linux
6
+ def self.process_running?(process_name)
7
+ pidfiles = Dir.glob("{/run,/var/run}/#{process_name}{,*,/}*.pid")
8
+ pidfiles.each do |pf|
9
+ next unless File.file?(pf)
10
+
11
+ pid = begin
12
+ Integer(Facter::Util::FileHelper.safe_read(pf, '').strip, 10)
13
+ rescue StandardError
14
+ nil
15
+ end
16
+ next unless pid&.positive?
17
+
18
+ begin
19
+ # Doesn't actually kill, just detects if the process exists
20
+ Process.kill(0, pid)
21
+ return true if proc_comm(pid) == process_name || proc_cmdline(pid)&.match?(%r{(^|\s|/)#{process_name}(\s|$)})
22
+ rescue Errno::ESRCH
23
+ # If we can't confirm identity, still treat it as not running to be safe.
24
+ next
25
+ rescue Errno::EPERM
26
+ # Exists but we can't inspect it; assume it's running.
27
+ return true
28
+ end
29
+ end
30
+
31
+ # Fallback: Try to find it in /proc
32
+ return false unless Dir.exist?('/proc')
33
+
34
+ Dir.glob('/proc/[0-9]*/comm').any? do |path|
35
+ Facter::Util::FileHelper.safe_read(path, nil)&.strip == process_name
36
+ end
37
+ end
38
+
39
+ def self.proc_comm(pid)
40
+ Facter::Util::FileHelper.safe_read("/proc/#{pid}/comm", nil)&.strip
41
+ end
42
+
43
+ def self.proc_cmdline(pid)
44
+ raw = Facter::Util::FileHelper.safe_read("/proc/#{pid}/cmdline", nil)
45
+ raw&.tr("\0", ' ')
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Facter
4
- VERSION = '5.2.1' unless defined?(VERSION)
4
+ VERSION = '5.4.0' unless defined?(VERSION)
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openfact
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.1
4
+ version: 5.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenVox Project
@@ -18,7 +18,7 @@ dependencies:
18
18
  version: 1.15.5
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
- version: 1.17.0
21
+ version: 1.18.0
22
22
  - - "!="
23
23
  - !ruby/object:Gem::Version
24
24
  version: 1.16.0
@@ -37,7 +37,7 @@ dependencies:
37
37
  version: 1.15.5
38
38
  - - "<"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.17.0
40
+ version: 1.18.0
41
41
  - - "!="
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.16.0
@@ -90,7 +90,7 @@ dependencies:
90
90
  version: '1.28'
91
91
  - - "<"
92
92
  - !ruby/object:Gem::Version
93
- version: '1.79'
93
+ version: '1.85'
94
94
  type: :development
95
95
  prerelease: false
96
96
  version_requirements: !ruby/object:Gem::Requirement
@@ -100,49 +100,69 @@ dependencies:
100
100
  version: '1.28'
101
101
  - - "<"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.79'
103
+ version: '1.85'
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: rubocop-performance
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.5.2
110
+ version: '1.5'
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.5.2
117
+ version: '1.5'
118
+ - !ruby/object:Gem::Dependency
119
+ name: rubocop-rake
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "<"
123
+ - !ruby/object:Gem::Version
124
+ version: '1'
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "<"
130
+ - !ruby/object:Gem::Version
131
+ version: '1'
118
132
  - !ruby/object:Gem::Dependency
119
133
  name: rubocop-rspec
120
134
  requirement: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - "~>"
136
+ - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '2.10'
139
+ - - "<"
140
+ - !ruby/object:Gem::Version
141
+ version: '4'
125
142
  type: :development
126
143
  prerelease: false
127
144
  version_requirements: !ruby/object:Gem::Requirement
128
145
  requirements:
129
- - - "~>"
146
+ - - ">="
130
147
  - !ruby/object:Gem::Version
131
148
  version: '2.10'
149
+ - - "<"
150
+ - !ruby/object:Gem::Version
151
+ version: '4'
132
152
  - !ruby/object:Gem::Dependency
133
153
  name: simplecov
134
154
  requirement: !ruby/object:Gem::Requirement
135
155
  requirements:
136
156
  - - "~>"
137
157
  - !ruby/object:Gem::Version
138
- version: 0.17.1
158
+ version: '0.17'
139
159
  type: :development
140
160
  prerelease: false
141
161
  version_requirements: !ruby/object:Gem::Requirement
142
162
  requirements:
143
163
  - - "~>"
144
164
  - !ruby/object:Gem::Version
145
- version: 0.17.1
165
+ version: '0.17'
146
166
  - !ruby/object:Gem::Dependency
147
167
  name: sys-filesystem
148
168
  requirement: !ruby/object:Gem::Requirement
@@ -205,6 +225,20 @@ dependencies:
205
225
  - - "<"
206
226
  - !ruby/object:Gem::Version
207
227
  version: '0.4'
228
+ - !ruby/object:Gem::Dependency
229
+ name: benchmark
230
+ requirement: !ruby/object:Gem::Requirement
231
+ requirements:
232
+ - - "<"
233
+ - !ruby/object:Gem::Version
234
+ version: '0.6'
235
+ type: :runtime
236
+ prerelease: false
237
+ version_requirements: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - "<"
240
+ - !ruby/object:Gem::Version
241
+ version: '0.6'
208
242
  - !ruby/object:Gem::Dependency
209
243
  name: hocon
210
244
  requirement: !ruby/object:Gem::Requirement
@@ -233,6 +267,20 @@ dependencies:
233
267
  - - "~>"
234
268
  - !ruby/object:Gem::Version
235
269
  version: '1.5'
270
+ - !ruby/object:Gem::Dependency
271
+ name: ostruct
272
+ requirement: !ruby/object:Gem::Requirement
273
+ requirements:
274
+ - - "<"
275
+ - !ruby/object:Gem::Version
276
+ version: '0.7'
277
+ type: :runtime
278
+ prerelease: false
279
+ version_requirements: !ruby/object:Gem::Requirement
280
+ requirements:
281
+ - - "<"
282
+ - !ruby/object:Gem::Version
283
+ version: '0.7'
236
284
  - !ruby/object:Gem::Dependency
237
285
  name: thor
238
286
  requirement: !ruby/object:Gem::Requirement
@@ -786,6 +834,7 @@ files:
786
834
  - lib/facter/facts/openbsd/os/name.rb
787
835
  - lib/facter/facts/openbsd/os/release.rb
788
836
  - lib/facter/facts/openbsd/path.rb
837
+ - lib/facter/facts/openbsd/processors/count.rb
789
838
  - lib/facter/facts/openbsd/processors/isa.rb
790
839
  - lib/facter/facts/openbsd/ruby/platform.rb
791
840
  - lib/facter/facts/openbsd/ruby/sitedir.rb
@@ -1117,6 +1166,7 @@ files:
1117
1166
  - lib/facter/resolvers/openbsd/dhcp.rb
1118
1167
  - lib/facter/resolvers/openbsd/dmi.rb
1119
1168
  - lib/facter/resolvers/openbsd/mountpoints.rb
1169
+ - lib/facter/resolvers/openbsd/processors.rb
1120
1170
  - lib/facter/resolvers/openbsd/virtual.rb
1121
1171
  - lib/facter/resolvers/os_release.rb
1122
1172
  - lib/facter/resolvers/partitions.rb
@@ -1195,6 +1245,7 @@ files:
1195
1245
  - lib/facter/util/facts/uptime_parser.rb
1196
1246
  - lib/facter/util/facts/windows_release_finder.rb
1197
1247
  - lib/facter/util/file_helper.rb
1248
+ - lib/facter/util/linux.rb
1198
1249
  - lib/facter/util/linux/dhcp.rb
1199
1250
  - lib/facter/util/linux/if_inet6.rb
1200
1251
  - lib/facter/util/linux/proc.rb
@@ -1230,14 +1281,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
1230
1281
  version: '2.5'
1231
1282
  - - "<"
1232
1283
  - !ruby/object:Gem::Version
1233
- version: '4.0'
1284
+ version: '5.0'
1234
1285
  required_rubygems_version: !ruby/object:Gem::Requirement
1235
1286
  requirements:
1236
1287
  - - ">="
1237
1288
  - !ruby/object:Gem::Version
1238
1289
  version: '0'
1239
1290
  requirements: []
1240
- rubygems_version: 3.6.9
1291
+ rubygems_version: 4.0.3
1241
1292
  specification_version: 4
1242
1293
  summary: OpenFact, a system inventory tool
1243
1294
  test_files: []