facter 4.0.46 → 4.0.47

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.
Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/lib/docs/generate.rb +32 -0
  3. data/lib/docs/template.erb +34 -0
  4. data/lib/facter.rb +38 -6
  5. data/lib/facter/config.rb +32 -1
  6. data/lib/facter/custom_facts/util/collection.rb +1 -2
  7. data/lib/facter/custom_facts/util/directory_loader.rb +1 -1
  8. data/lib/facter/custom_facts/util/fact.rb +18 -1
  9. data/lib/facter/custom_facts/util/loader.rb +1 -1
  10. data/lib/facter/custom_facts/util/resolution.rb +1 -1
  11. data/lib/facter/facts/aix/interfaces.rb +1 -0
  12. data/lib/facter/facts/aix/memory/swap/available.rb +1 -1
  13. data/lib/facter/facts/aix/memory/swap/available_bytes.rb +1 -1
  14. data/lib/facter/facts/aix/memory/swap/total.rb +1 -1
  15. data/lib/facter/facts/aix/memory/swap/total_bytes.rb +1 -1
  16. data/lib/facter/facts/aix/memory/swap/used.rb +1 -1
  17. data/lib/facter/facts/aix/memory/system/available.rb +1 -1
  18. data/lib/facter/facts/aix/memory/system/available_bytes.rb +1 -1
  19. data/lib/facter/facts/aix/memory/system/total.rb +1 -1
  20. data/lib/facter/facts/aix/memory/system/total_bytes.rb +1 -1
  21. data/lib/facter/facts/aix/memory/system/used.rb +1 -1
  22. data/lib/facter/facts/aix/processors/speed.rb +1 -1
  23. data/lib/facter/facts/bsd/processors/speed.rb +1 -1
  24. data/lib/facter/facts/freebsd/is_virtual.rb +25 -0
  25. data/lib/facter/facts/freebsd/memory/swap/available.rb +1 -1
  26. data/lib/facter/facts/freebsd/memory/swap/available_bytes.rb +1 -1
  27. data/lib/facter/facts/freebsd/memory/swap/total.rb +1 -1
  28. data/lib/facter/facts/freebsd/memory/swap/total_bytes.rb +1 -1
  29. data/lib/facter/facts/freebsd/memory/swap/used.rb +1 -1
  30. data/lib/facter/facts/freebsd/memory/system/available.rb +1 -1
  31. data/lib/facter/facts/freebsd/memory/system/available_bytes.rb +1 -1
  32. data/lib/facter/facts/freebsd/memory/system/total.rb +1 -1
  33. data/lib/facter/facts/freebsd/memory/system/total_bytes.rb +1 -1
  34. data/lib/facter/facts/freebsd/memory/system/used.rb +1 -1
  35. data/lib/facter/facts/freebsd/processors/speed.rb +1 -1
  36. data/lib/facter/facts/freebsd/virtual.rb +22 -0
  37. data/lib/facter/facts/linux/dhcp_servers.rb +1 -0
  38. data/lib/facter/facts/linux/ec2_metadata.rb +1 -1
  39. data/lib/facter/facts/linux/ec2_userdata.rb +1 -1
  40. data/lib/facter/facts/linux/hypervisors/kvm.rb +1 -1
  41. data/lib/facter/facts/linux/hypervisors/xen.rb +1 -1
  42. data/lib/facter/facts/linux/interfaces.rb +1 -0
  43. data/lib/facter/facts/linux/is_virtual.rb +2 -2
  44. data/lib/facter/facts/linux/memory/swap/available.rb +1 -1
  45. data/lib/facter/facts/linux/memory/swap/available_bytes.rb +1 -1
  46. data/lib/facter/facts/linux/memory/swap/total.rb +1 -1
  47. data/lib/facter/facts/linux/memory/swap/total_bytes.rb +1 -1
  48. data/lib/facter/facts/linux/memory/swap/used.rb +1 -1
  49. data/lib/facter/facts/linux/memory/system/available.rb +1 -1
  50. data/lib/facter/facts/linux/memory/system/available_bytes.rb +1 -1
  51. data/lib/facter/facts/linux/memory/system/total.rb +1 -1
  52. data/lib/facter/facts/linux/memory/system/total_bytes.rb +1 -1
  53. data/lib/facter/facts/linux/memory/system/used.rb +1 -1
  54. data/lib/facter/facts/linux/processors/speed.rb +1 -1
  55. data/lib/facter/facts/linux/virtual.rb +1 -1
  56. data/lib/facter/facts/macosx/dhcp_servers.rb +1 -0
  57. data/lib/facter/facts/macosx/interfaces.rb +1 -0
  58. data/lib/facter/facts/macosx/memory/swap/available.rb +1 -1
  59. data/lib/facter/facts/macosx/memory/swap/available_bytes.rb +1 -1
  60. data/lib/facter/facts/macosx/memory/swap/total.rb +1 -1
  61. data/lib/facter/facts/macosx/memory/swap/total_bytes.rb +1 -1
  62. data/lib/facter/facts/macosx/memory/swap/used.rb +1 -1
  63. data/lib/facter/facts/macosx/memory/system/available.rb +1 -1
  64. data/lib/facter/facts/macosx/memory/system/available_bytes.rb +1 -1
  65. data/lib/facter/facts/macosx/memory/system/total.rb +1 -1
  66. data/lib/facter/facts/macosx/memory/system/total_bytes.rb +1 -1
  67. data/lib/facter/facts/macosx/memory/system/used.rb +1 -1
  68. data/lib/facter/facts/macosx/processors/speed.rb +1 -1
  69. data/lib/facter/facts/solaris/dhcp_servers.rb +1 -0
  70. data/lib/facter/facts/solaris/interfaces.rb +1 -0
  71. data/lib/facter/facts/solaris/is_virtual.rb +2 -2
  72. data/lib/facter/facts/solaris/ldom.rb +31 -4
  73. data/lib/facter/facts/solaris/memory/swap/available.rb +1 -1
  74. data/lib/facter/facts/solaris/memory/swap/available_bytes.rb +1 -1
  75. data/lib/facter/facts/solaris/memory/swap/total.rb +1 -1
  76. data/lib/facter/facts/solaris/memory/swap/total_bytes.rb +1 -1
  77. data/lib/facter/facts/solaris/memory/swap/used.rb +1 -1
  78. data/lib/facter/facts/solaris/memory/system/available.rb +1 -1
  79. data/lib/facter/facts/solaris/memory/system/available_bytes.rb +1 -1
  80. data/lib/facter/facts/solaris/memory/system/total.rb +1 -1
  81. data/lib/facter/facts/solaris/memory/system/total_bytes.rb +1 -1
  82. data/lib/facter/facts/solaris/memory/system/used.rb +1 -1
  83. data/lib/facter/facts/solaris/processors/speed.rb +1 -1
  84. data/lib/facter/facts/solaris/virtual.rb +1 -1
  85. data/lib/facter/facts/windows/dhcp_servers.rb +1 -0
  86. data/lib/facter/facts/windows/interfaces.rb +1 -0
  87. data/lib/facter/facts/windows/memory/system/available.rb +1 -1
  88. data/lib/facter/facts/windows/memory/system/available_bytes.rb +1 -1
  89. data/lib/facter/facts/windows/memory/system/total.rb +1 -1
  90. data/lib/facter/facts/windows/memory/system/total_bytes.rb +1 -1
  91. data/lib/facter/facts/windows/memory/system/used.rb +1 -1
  92. data/lib/facter/facts/windows/os/release.rb +1 -1
  93. data/lib/facter/framework/cli/cli.rb +1 -1
  94. data/lib/facter/framework/core/cache_manager.rb +1 -1
  95. data/lib/facter/framework/core/fact_loaders/external_fact_loader.rb +4 -2
  96. data/lib/facter/framework/core/fact_loaders/fact_loader.rb +16 -0
  97. data/lib/facter/framework/core/fact_manager.rb +14 -2
  98. data/lib/facter/framework/core/file_loader.rb +6 -2
  99. data/lib/facter/framework/core/options/option_store.rb +2 -2
  100. data/lib/facter/framework/logging/logger.rb +3 -3
  101. data/lib/facter/models/fact_collection.rb +11 -1
  102. data/lib/facter/models/loaded_fact.rb +2 -1
  103. data/lib/facter/resolvers/aio_agent_version.rb +1 -1
  104. data/lib/facter/resolvers/aix/architecture_resolver.rb +3 -3
  105. data/lib/facter/resolvers/aix/disks.rb +4 -4
  106. data/lib/facter/resolvers/aix/filesystem_resolver.rb +1 -1
  107. data/lib/facter/resolvers/aix/hardware_resolver.rb +2 -2
  108. data/lib/facter/resolvers/aix/memory.rb +2 -2
  109. data/lib/facter/resolvers/aix/mountpoints.rb +4 -4
  110. data/lib/facter/resolvers/aix/networking_resolver.rb +3 -2
  111. data/lib/facter/resolvers/aix/partitions.rb +5 -5
  112. data/lib/facter/resolvers/aix/processors.rb +3 -3
  113. data/lib/facter/resolvers/aix/serialnumber.rb +1 -1
  114. data/lib/facter/resolvers/base_resolver.rb +3 -0
  115. data/lib/facter/resolvers/cloud.rb +1 -1
  116. data/lib/facter/resolvers/containers.rb +3 -3
  117. data/lib/facter/resolvers/debian_version.rb +1 -1
  118. data/lib/facter/resolvers/disk_resolver.rb +2 -2
  119. data/lib/facter/resolvers/dmi_resolver.rb +1 -1
  120. data/lib/facter/resolvers/ec2.rb +3 -1
  121. data/lib/facter/resolvers/eos_release_resolver.rb +1 -1
  122. data/lib/facter/resolvers/filesystems_resolver.rb +1 -1
  123. data/lib/facter/resolvers/fips_enabled_resolver.rb +1 -1
  124. data/lib/facter/resolvers/freebsd/geom_resolver.rb +1 -1
  125. data/lib/facter/resolvers/freebsd/swap_memory_resolver.rb +3 -2
  126. data/lib/facter/resolvers/freebsd/system_memory_resolver.rb +2 -1
  127. data/lib/facter/resolvers/freebsd/virtual_resolver.rb +45 -0
  128. data/lib/facter/resolvers/gce.rb +1 -1
  129. data/lib/facter/resolvers/hostname_resolver.rb +67 -20
  130. data/lib/facter/resolvers/linux/docker_uptime.rb +1 -1
  131. data/lib/facter/resolvers/linux/load_averages.rb +1 -1
  132. data/lib/facter/resolvers/load_averages.rb +3 -2
  133. data/lib/facter/resolvers/macosx/mountpoints_resolver.rb +7 -7
  134. data/lib/facter/resolvers/macosx/system_profiler_resolver.rb +3 -3
  135. data/lib/facter/resolvers/memory_resolver.rb +1 -1
  136. data/lib/facter/resolvers/mountpoints_resolver.rb +8 -8
  137. data/lib/facter/resolvers/networking_linux_resolver.rb +183 -85
  138. data/lib/facter/resolvers/networking_resolver.rb +8 -5
  139. data/lib/facter/resolvers/open_vz.rb +1 -3
  140. data/lib/facter/resolvers/os_release_resolver.rb +1 -1
  141. data/lib/facter/resolvers/partitions.rb +5 -5
  142. data/lib/facter/resolvers/processors_resolver.rb +2 -2
  143. data/lib/facter/resolvers/redhat_release_resolver.rb +1 -1
  144. data/lib/facter/resolvers/selinux_resolver.rb +3 -3
  145. data/lib/facter/resolvers/solaris/disks.rb +1 -1
  146. data/lib/facter/resolvers/solaris/memory.rb +2 -2
  147. data/lib/facter/resolvers/solaris/mountpoints.rb +11 -10
  148. data/lib/facter/resolvers/solaris/networking.rb +49 -41
  149. data/lib/facter/resolvers/solaris/os_release.rb +1 -1
  150. data/lib/facter/resolvers/ssh_resolver.rb +3 -2
  151. data/lib/facter/resolvers/suse_release_resolver.rb +1 -1
  152. data/lib/facter/resolvers/uptime_resolver.rb +2 -2
  153. data/lib/facter/resolvers/windows/aio_agent_version.rb +1 -1
  154. data/lib/facter/resolvers/windows/dmi_bios_resolver.rb +1 -1
  155. data/lib/facter/resolvers/windows/dmi_computersystem_resolver.rb +1 -1
  156. data/lib/facter/resolvers/windows/memory_resolver.rb +4 -0
  157. data/lib/facter/resolvers/windows/networking_resolver.rb +3 -3
  158. data/lib/facter/resolvers/windows/processors_resolver.rb +1 -1
  159. data/lib/facter/resolvers/windows/ssh.rb +2 -2
  160. data/lib/facter/resolvers/windows/uptime_resolver.rb +1 -1
  161. data/lib/facter/resolvers/windows/virtualization_resolver.rb +1 -1
  162. data/lib/facter/resolvers/windows/win_os_description_resolver.rb +1 -1
  163. data/lib/facter/resolvers/xen.rb +1 -1
  164. data/lib/facter/util/aix/info_extractor.rb +24 -0
  165. data/lib/facter/util/aix/odm_query.rb +46 -0
  166. data/lib/facter/util/api_debugger.rb +33 -29
  167. data/lib/facter/util/facts/facts_utils.rb +14 -0
  168. data/lib/facter/util/facts/unit_converter.rb +61 -0
  169. data/lib/facter/util/facts/uptime_parser.rb +128 -0
  170. data/lib/facter/util/facts/virtual_detector.rb +90 -0
  171. data/lib/facter/util/facts/windows_release_finder.rb +55 -0
  172. data/lib/facter/{resolvers/macosx/utils → util/macosx}/system_profile_executor.rb +1 -1
  173. data/lib/facter/util/resolvers/aws_token.rb +37 -0
  174. data/lib/facter/{resolvers/utils → util/resolvers}/ffi/load_averages.rb +2 -2
  175. data/lib/facter/util/resolvers/filesystem_helper.rb +47 -0
  176. data/lib/facter/util/resolvers/fingerprint.rb +15 -0
  177. data/lib/facter/{resolvers/utils → util/resolvers}/http.rb +17 -10
  178. data/lib/facter/util/resolvers/networking.rb +90 -0
  179. data/lib/facter/util/resolvers/networking/dhcp.rb +21 -0
  180. data/lib/facter/util/resolvers/networking/networking.rb +109 -0
  181. data/lib/facter/util/resolvers/networking/primary_interface.rb +82 -0
  182. data/lib/facter/util/resolvers/ssh.rb +17 -0
  183. data/lib/facter/util/resolvers/ssh_helper.rb +31 -0
  184. data/lib/facter/{resolvers/utils → util/resolvers}/uptime_helper.rb +2 -2
  185. data/lib/facter/{framework/utils → util}/utils.rb +0 -0
  186. data/lib/facter/util/windows/win32ole.rb +30 -0
  187. data/lib/facter/version.rb +1 -1
  188. metadata +29 -41
  189. data/lib/facter/facts/aix/puppet_version.rb +0 -15
  190. data/lib/facter/facts/freebsd/puppet_version.rb +0 -15
  191. data/lib/facter/facts/linux/puppet_version.rb +0 -15
  192. data/lib/facter/facts/macosx/puppet_version.rb +0 -15
  193. data/lib/facter/facts/solaris/puppet_version.rb +0 -15
  194. data/lib/facter/facts/windows/puppet_version.rb +0 -15
  195. data/lib/facter/facts_utils/facts_utils.rb +0 -12
  196. data/lib/facter/facts_utils/unit_converter.rb +0 -59
  197. data/lib/facter/facts_utils/uptime_parser.rb +0 -124
  198. data/lib/facter/facts_utils/virtual_detector.rb +0 -78
  199. data/lib/facter/facts_utils/windows_release_finder.rb +0 -51
  200. data/lib/facter/resolvers/aix/utils/info_extractor.rb +0 -20
  201. data/lib/facter/resolvers/aix/utils/odm_query.rb +0 -42
  202. data/lib/facter/resolvers/puppet_version_resolver.rb +0 -26
  203. data/lib/facter/resolvers/utils/filesystem_helper.rb +0 -43
  204. data/lib/facter/resolvers/utils/fingerprint.rb +0 -11
  205. data/lib/facter/resolvers/utils/networking.rb +0 -88
  206. data/lib/facter/resolvers/utils/ssh.rb +0 -13
  207. data/lib/facter/resolvers/utils/ssh_helper.rb +0 -27
  208. data/lib/facter/resolvers/windows/utils/win32ole.rb +0 -24
@@ -17,7 +17,7 @@ module Facter
17
17
  end
18
18
 
19
19
  def read_fact_from_computer_system(fact_name)
20
- win = Win32Ole.new
20
+ win = Facter::Util::Windows::Win32Ole.new
21
21
  computersystem = win.return_first('SELECT Name,UUID FROM Win32_ComputerSystemProduct')
22
22
  unless computersystem
23
23
  @log.debug 'WMI query returned no results for Win32_ComputerSystemProduct with values Name and UUID.'
@@ -23,6 +23,10 @@ module Facter
23
23
  return
24
24
  end
25
25
 
26
+ # we need to enlarge the scope of this pointer so that Ruby GC will not free the memory.
27
+ # If the pointer if freed, Lifreq structures will contain garbage from memory.
28
+ @long_living_pointer = state_ptr
29
+
26
30
  PerformanceInformation.new(state_ptr)
27
31
  end
28
32
 
@@ -26,7 +26,7 @@ module Facter
26
26
 
27
27
  iterate_list(adapter_addresses)
28
28
 
29
- ::Resolvers::Utils::Networking.expand_main_bindings(@fact_list)
29
+ Facter::Util::Resolvers::Networking.expand_main_bindings(@fact_list)
30
30
 
31
31
  @fact_list[fact_name]
32
32
  end
@@ -120,13 +120,13 @@ module Facter
120
120
  def find_bindings(sock_addr, unicast, addr)
121
121
  return unless [NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family])
122
122
 
123
- ::Resolvers::Utils::Networking.build_binding(addr, unicast[:OnLinkPrefixLength])
123
+ Facter::Util::Resolvers::Networking.build_binding(addr, unicast[:OnLinkPrefixLength])
124
124
  end
125
125
 
126
126
  def find_primary_interface(sock_addr, name, addr)
127
127
  if !@fact_list[:primary_interface] &&
128
128
  ([NetworkingFFI::AF_INET, NetworkingFFI::AF_INET6].include?(sock_addr[:sa_family]) &&
129
- !::Resolvers::Utils::Networking.ignored_ip_address(addr))
129
+ !::Facter::Util::Resolvers::Networking.ignored_ip_address(addr))
130
130
  @fact_list[:primary_interface] = name.to_s
131
131
  end
132
132
  end
@@ -18,7 +18,7 @@ module Facter
18
18
  end
19
19
 
20
20
  def read_fact_from_win32_processor(fact_name)
21
- win = Win32Ole.new
21
+ win = Facter::Util::Windows::Win32Ole.new
22
22
  proc = win.exec_query('SELECT Name,Architecture,NumberOfLogicalProcessors FROM Win32_Processor')
23
23
  unless proc
24
24
  log.debug 'WMI query returned no results'\
@@ -24,11 +24,11 @@ module Facter
24
24
  ssh_list = []
25
25
 
26
26
  FILE_NAMES.each do |file_name|
27
- output = Util::FileHelper.safe_read(File.join(ssh_dir, file_name))
27
+ output = Facter::Util::FileHelper.safe_read(File.join(ssh_dir, file_name))
28
28
  next if output.empty?
29
29
 
30
30
  key_type, key = output.split(' ')
31
- ssh_list << ::Resolvers::Utils::SshHelper.create_ssh(key_type, key)
31
+ ssh_list << Facter::Util::Resolvers::SshHelper.create_ssh(key_type, key)
32
32
  end
33
33
  @fact_list[:ssh] = ssh_list.empty? ? nil : ssh_list
34
34
  @fact_list[fact_name]
@@ -18,7 +18,7 @@ module Facter
18
18
  end
19
19
 
20
20
  def substract_system_uptime_from_ole
21
- win = Win32Ole.new
21
+ win = Facter::Util::Windows::Win32Ole.new
22
22
  opsystem = win.return_first('SELECT LocalDateTime,LastBootUpTime FROM Win32_OperatingSystem')
23
23
  unless opsystem
24
24
  @log.debug 'WMI query returned no results'\
@@ -21,7 +21,7 @@ module Facter
21
21
  end
22
22
 
23
23
  def read_fact_from_computer_system(fact_name)
24
- win = Win32Ole.new
24
+ win = Facter::Util::Windows::Win32Ole.new
25
25
  comp = win.exec_query('SELECT Manufacturer,Model,OEMStringArray FROM Win32_ComputerSystem')
26
26
  unless comp
27
27
  @log.debug 'WMI query returned no results for Win32_ComputerSystem with values'\
@@ -15,7 +15,7 @@ module Facter
15
15
  end
16
16
 
17
17
  def read_from_ole(fact_name)
18
- win = Win32Ole.new
18
+ win = Facter::Util::Windows::Win32Ole.new
19
19
  op_sys = win.return_first('SELECT ProductType,OtherTypeDescription FROM Win32_OperatingSystem')
20
20
  unless op_sys
21
21
  @log.debug 'WMI query returned no results for Win32_OperatingSystem'\
@@ -32,7 +32,7 @@ module Facter
32
32
  end
33
33
 
34
34
  def privileged?(xen_type)
35
- content = Util::FileHelper.safe_read(XEN_PATH, nil)
35
+ content = Facter::Util::FileHelper.safe_read(XEN_PATH, nil)
36
36
  content&.strip == 'control_d' || xen_type == 'xen0'
37
37
  end
38
38
 
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Aix
6
+ module InfoExtractor
7
+ MEGABYTES_EXPONENT = 1024**2
8
+ GIGABYTES_EXPONENT = 1024**3
9
+
10
+ def self.extract(content, regex)
11
+ content = content.each_line.map do |line|
12
+ next unless regex =~ line
13
+
14
+ line.split(/:\s*|\s{2,}/)
15
+ end
16
+
17
+ content.flatten!.reject!(&:nil?)
18
+
19
+ Hash[*content]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # CuAt (Customized Attributes) non-default attribute values
4
+ # CuDv (Customized Devices) the devices present on this machine
5
+ # PdAt (Predefined Attributes) default values for all device attributes
6
+ # PdDv (Predefined Devices) the list of all devices supported by this release of AIX
7
+
8
+ module Facter
9
+ module Util
10
+ module Aix
11
+ class ODMQuery
12
+ REPOS = %w[CuAt CuDv PdAt PdDv].freeze
13
+
14
+ def initialize
15
+ @query = ''
16
+ @conditions = []
17
+ @log = Facter::Log.new(self)
18
+ end
19
+
20
+ def equals(field, value)
21
+ @conditions << "#{field}='#{value}'"
22
+ self
23
+ end
24
+
25
+ def like(field, value)
26
+ @conditions << "#{field} like '#{value}'"
27
+ self
28
+ end
29
+
30
+ def execute
31
+ result = nil
32
+ REPOS.each do |repo|
33
+ break if result && !result.empty?
34
+
35
+ result = Facter::Core::Execution.execute("#{query} #{repo}", logger: @log)
36
+ end
37
+ result
38
+ end
39
+
40
+ def query
41
+ 'odmget -q "' + @conditions.join(' AND ') + '"'
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,43 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApiDebugger
4
- def self.prepended(receiver) # rubocop:disable Metrics/AbcSize
5
- exclude, print_caller = parse_options(ENV['API_DEBUG'])
3
+ module Facter
4
+ module Util
5
+ module ApiDebugger
6
+ def self.prepended(receiver) # rubocop:disable Metrics/AbcSize
7
+ exclude, print_caller = parse_options(ENV['API_DEBUG'])
6
8
 
7
- receiver_methods = receiver.instance_methods - Object.methods
8
- receiver_methods.each do |meth|
9
- ApiDebugger.class_eval do
10
- define_method(meth) do |*args|
11
- method_call = super(*args)
9
+ receiver_methods = receiver.instance_methods - Object.methods
10
+ receiver_methods.each do |meth|
11
+ ApiDebugger.class_eval do
12
+ define_method(meth) do |*args|
13
+ method_call = super(*args)
12
14
 
13
- unless exclude.include?(meth)
14
- puts '#' * 80
15
- puts "Method call: #{meth}"
16
- puts "Called with: #{args.inspect}"
17
- if print_caller.include?(meth)
18
- puts '-' * 80
19
- puts caller
15
+ unless exclude.include?(meth)
16
+ puts '#' * 80
17
+ puts "Method call: #{meth}"
18
+ puts "Called with: #{args.inspect}"
19
+ if print_caller.include?(meth)
20
+ puts '-' * 80
21
+ puts caller
22
+ end
23
+ puts '#' * 80
24
+ end
25
+ method_call
20
26
  end
21
- puts '#' * 80
22
27
  end
23
- method_call
24
28
  end
25
29
  end
26
- end
27
- end
28
30
 
29
- def self.parse_options(options)
30
- exclude = []
31
- print_caller = []
31
+ def self.parse_options(options)
32
+ exclude = []
33
+ print_caller = []
34
+
35
+ options.split(',').each do |option|
36
+ if option.start_with?('-')
37
+ exclude << option[1..-1].to_sym
38
+ elsif option.start_with?('+')
39
+ print_caller << option[1..-1].to_sym
40
+ end
41
+ end
32
42
 
33
- options.split(',').each do |option|
34
- if option.start_with?('-')
35
- exclude << option[1..-1].to_sym
36
- elsif option.start_with?('+')
37
- print_caller << option[1..-1].to_sym
43
+ [exclude, print_caller]
38
44
  end
39
45
  end
40
-
41
- [exclude, print_caller]
42
46
  end
43
47
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Facts
6
+ HYPERVISORS_HASH = { 'VMware' => 'vmware', 'VirtualBox' => 'virtualbox', 'Parallels' => 'parallels',
7
+ 'KVM' => 'kvm', 'Virtual Machine' => 'hyperv', 'RHEV Hypervisor' => 'rhev',
8
+ 'oVirt Node' => 'ovirt', 'HVM domU' => 'xenhvm', 'Bochs' => 'bochs', 'OpenBSD' => 'vmm',
9
+ 'BHYVE' => 'bhyve' }.freeze
10
+
11
+ PHYSICAL_HYPERVISORS = %w[physical xen0 vmware_server vmware_workstation openvzhn vserver_host].freeze
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Facter
4
+ module Util
5
+ module Facts
6
+ class UnitConverter
7
+ class << self
8
+ def bytes_to_mb(value_in_bytes)
9
+ return unless value_in_bytes
10
+
11
+ value_in_bytes = value_in_bytes.to_i
12
+
13
+ (value_in_bytes / (1024.0 * 1024.0)).round(2)
14
+ end
15
+
16
+ def hertz_to_human_readable(speed)
17
+ speed = speed.to_i
18
+ return if !speed || speed.zero?
19
+
20
+ prefix = { 3 => 'k', 6 => 'M', 9 => 'G', 12 => 'T' }
21
+ power = Math.log10(speed).floor
22
+ validated_speed = power.zero? ? speed.to_f : speed.fdiv(10**power)
23
+ format('%<displayed_speed>.2f', displayed_speed: validated_speed).to_s + ' ' + prefix[power] + 'Hz'
24
+ end
25
+
26
+ def bytes_to_human_readable(bytes)
27
+ return unless bytes
28
+ return bytes.to_s + ' bytes' if bytes < 1024
29
+
30
+ number, multiple = determine_exponent(bytes)
31
+
32
+ "#{pad_number(number)} #{multiple}"
33
+ end
34
+
35
+ private
36
+
37
+ def pad_number(number)
38
+ number = number.to_s
39
+ number << '0' if number.split('.').last.length == 1
40
+ number
41
+ end
42
+
43
+ def determine_exponent(bytes)
44
+ prefix = %w[KiB MiB GiB TiB PiB EiB]
45
+ exp = (Math.log2(bytes) / 10.0).floor
46
+ converted_number = (100.0 * (bytes / 1024.0**exp)).round / 100.0
47
+
48
+ if (converted_number - 1024.0).abs < Float::EPSILON
49
+ exp += 1
50
+ converted_number = 1.00
51
+ end
52
+ multiple = prefix[exp - 1] || 'bytes'
53
+
54
+ converted_number = bytes if multiple == 'bytes'
55
+ [converted_number, multiple]
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+
5
+ module Facter
6
+ module Util
7
+ module Facts
8
+ class UptimeParser
9
+ SECS_IN_A_DAY = 86_400
10
+ SECS_IN_AN_HOUR = 3_600
11
+ SECS_IN_A_MINUTE = 60
12
+
13
+ @log = Facter::Log.new(self)
14
+
15
+ class << self
16
+ def uptime_seconds_unix
17
+ uptime_proc_uptime || uptime_sysctl || uptime_executable
18
+ end
19
+
20
+ private
21
+
22
+ def uptime_proc_uptime
23
+ output = Facter::Core::Execution.execute("/bin/cat #{uptime_file}", logger: @log)
24
+
25
+ output.chomp.split(' ').first.to_i unless output.empty?
26
+ end
27
+
28
+ def uptime_sysctl
29
+ output = Facter::Core::Execution.execute("sysctl -n #{uptime_sysctl_variable}", logger: @log)
30
+
31
+ compute_uptime(Time.at(output.match(/\d+/)[0].to_i)) unless output.empty?
32
+ end
33
+
34
+ def uptime_executable
35
+ output = Facter::Core::Execution.execute(uptime_executable_cmd, logger: @log)
36
+
37
+ return unless output
38
+
39
+ up = 0
40
+ output_calculator_methods.find { |method| up = send(method, output) }
41
+ up || 0
42
+ end
43
+
44
+ def uptime_file
45
+ '/proc/uptime'
46
+ end
47
+
48
+ def uptime_sysctl_variable
49
+ 'kern.boottime'
50
+ end
51
+
52
+ def uptime_executable_cmd
53
+ 'uptime'
54
+ end
55
+
56
+ def output_calculator_methods
57
+ %i[
58
+ calculate_days_hours_minutes
59
+ calculate_days_hours
60
+ calculate_days_minutes
61
+ calculate_days
62
+ calculate_hours_minutes
63
+ calculate_hours
64
+ calculate_minutes
65
+ ]
66
+ end
67
+
68
+ def compute_uptime(time)
69
+ (Time.now - time).to_i
70
+ end
71
+
72
+ # Regexp handles Solaris, AIX, HP-UX, and Tru64.
73
+ # 'day(?:s|\(s\))?' says maybe 'day', 'days',
74
+ # or 'day(s)', and don't set $2.
75
+ def calculate_days_hours_minutes(output)
76
+ return unless output =~ /(\d+) day(?:s|\(s\))?,?\s+(\d+):-?(\d+)/
77
+
78
+ SECS_IN_A_DAY * Regexp.last_match(1).to_i +
79
+ SECS_IN_AN_HOUR * Regexp.last_match(2).to_i +
80
+ SECS_IN_A_MINUTE * Regexp.last_match(3).to_i
81
+ end
82
+
83
+ def calculate_days_hours(output)
84
+ return unless output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) hr(?:s|\(s\))?,/
85
+
86
+ SECS_IN_A_DAY * Regexp.last_match(1).to_i +
87
+ SECS_IN_AN_HOUR * Regexp.last_match(2).to_i
88
+ end
89
+
90
+ def calculate_days_minutes(output)
91
+ return unless output =~ /(\d+) day(?:s|\(s\))?,\s+(\d+) min(?:s|\(s\))?,/
92
+
93
+ SECS_IN_A_DAY * Regexp.last_match(1).to_i +
94
+ SECS_IN_A_MINUTE * Regexp.last_match(2).to_i
95
+ end
96
+
97
+ def calculate_days(output)
98
+ return unless output =~ /(\d+) day(?:s|\(s\))?,/
99
+
100
+ SECS_IN_A_DAY * Regexp.last_match(1).to_i
101
+ end
102
+
103
+ # must anchor to 'up' to avoid matching time of day
104
+ # at beginning of line. Certain versions of uptime on
105
+ # Solaris may insert a '-' into the minutes field.
106
+ def calculate_hours_minutes(output)
107
+ return unless output =~ /up\s+(\d+):-?(\d+),/
108
+
109
+ SECS_IN_AN_HOUR * Regexp.last_match(1).to_i +
110
+ SECS_IN_A_MINUTE * Regexp.last_match(2).to_i
111
+ end
112
+
113
+ def calculate_hours(output)
114
+ return unless output =~ /(\d+) hr(?:s|\(s\))?,/
115
+
116
+ SECS_IN_AN_HOUR * Regexp.last_match(1).to_i
117
+ end
118
+
119
+ def calculate_minutes(output)
120
+ return unless output =~ /(\d+) min(?:s|\(s\))?,/
121
+
122
+ SECS_IN_A_MINUTE * Regexp.last_match(1).to_i
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end