@@ -15,25 +15,33 @@ def post_resolve(fact_name, _options)
1515
1616 def calculate_system_memory ( fact_name )
1717 read_total_memory_in_bytes
18- read_available_memory_in_bytes
18+ read_used_memory_in_bytes
1919
20- @fact_list [ :used_bytes ] = @fact_list [ :total_bytes ] - @fact_list [ :available_bytes ]
20+ @fact_list [ :available_bytes ] = @fact_list [ :total_bytes ] - @fact_list [ :used_bytes ]
2121 @fact_list [ :capacity ] = Facter ::Util ::Resolvers ::FilesystemHelper
2222 . compute_capacity ( @fact_list [ :used_bytes ] , @fact_list [ :total_bytes ] )
2323
2424 @fact_list [ fact_name ]
2525 end
2626
27- def read_available_memory_in_bytes
28- output = Facter ::Core ::Execution . execute ( 'vmstat -H --libxo json' , logger : log )
29- data = JSON . parse ( output )
30- @fact_list [ :available_bytes ] = data [ 'memory' ] [ 'free-memory' ] * 1024
27+ def pagesize
28+ @pagesize ||= Facter ::Freebsd ::FfiHelper . sysctl_by_name ( :long , 'vm.stats.vm.v_page_size' )
29+ end
30+
31+ def read_used_memory_in_bytes
32+ require_relative 'ffi/ffi_helper'
33+
34+ @fact_list [ :used_bytes ] = pagesize * (
35+ Facter ::Freebsd ::FfiHelper . sysctl_by_name ( :long , 'vm.stats.vm.v_active_count' ) +
36+ Facter ::Freebsd ::FfiHelper . sysctl_by_name ( :long , 'vm.stats.vm.v_wire_count' )
37+ )
3138 end
3239
3340 def read_total_memory_in_bytes
3441 require_relative 'ffi/ffi_helper'
3542
36- @fact_list [ :total_bytes ] = Facter ::Freebsd ::FfiHelper . sysctl_by_name ( :long , 'hw.physmem' )
43+ @fact_list [ :total_bytes ] = pagesize *
44+ Facter ::Freebsd ::FfiHelper . sysctl_by_name ( :long , 'vm.stats.vm.v_page_count' )
3745 end
3846 end
3947 end
0 commit comments