memory.rb Support module for memory related facts
# File lib/facter/util/memory.rb, line 8 8: def self.meminfo_number(tag) 9: memsize = "" 10: Thread::exclusive do 11: size, scale = [0, ""] 12: File.readlines("/proc/meminfo").each do |l| 13: size, scale = [$1.to_f, $2] if l =~ /^#{tag}:\s+(\d+)\s+(\S+)/ 14: # MemoryFree == memfree + cached + buffers 15: # (assume scales are all the same as memfree) 16: if tag == "MemFree" && 17: l =~ /^(?:Buffers|Cached):\s+(\d+)\s+(?:\S+)/ 18: size += $1.to_f 19: end 20: end 21: memsize = scale_number(size, scale) 22: end 23: 24: memsize 25: end
# File lib/facter/util/memory.rb, line 27 27: def self.scale_number(size, multiplier) 28: suffixes = ['', 'kB', 'MB', 'GB', 'TB'] 29: 30: s = suffixes.shift 31: while s != multiplier 32: s = suffixes.shift 33: end 34: 35: while size > 1024.0 36: size /= 1024.0 37: s = suffixes.shift 38: end 39: 40: return "%.2f %s" % [size, s] 41: end
Darwin had to be different. It’s generally opaque with how much RAM it is using, and this figure could be improved upon too I fear. Parses the output of “vm_stat“, takes the pages free & pages speculative and multiples that by the page size (also given in output). Ties in with what activity monitor outputs for free memory.
# File lib/facter/util/memory.rb, line 60 60: def self.vmstat_darwin_find_free_memory() 61: 62: memfree = 0 63: pagesize = 0 64: memspecfree = 0 65: 66: vmstats = Facter::Util::Resolution.exec('vm_stat') 67: vmstats.each_line do |vmline| 68: case 69: when vmline =~ /page\ssize\sof\s(\d+)\sbytes/ 70: pagesize = $1.to_i 71: when vmline =~ /^Pages\sfree:\s+(\d+)\./ 72: memfree = $1.to_i 73: when vmline =~ /^Pages\sspeculative:\s+(\d+)\./ 74: memspecfree = $1.to_i 75: end 76: end 77: 78: freemem = ( memfree + memspecfree ) * pagesize 79: Facter.add("MemoryFree") do 80: setcode do 81: Facter::Memory.scale_number(freemem.to_f, "") 82: end 83: end 84: end
# File lib/facter/util/memory.rb, line 43 43: def self.vmstat_find_free_memory() 44: row = Facter::Util::Resolution.exec('vmstat').split("\n")[1] 45: if row =~ /^\s*\d+\s*\d+\s*\d+\s*\d+\s*(\d+)/ 46: Facter.add("MemoryFree") do 47: memfree = $1 48: setcode do 49: Facter::Memory.scale_number(memfree.to_f, "kB") 50: end 51: end 52: end 53: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.