Facter::Memory

memory.rb Support module for memory related facts

Public Class Methods

meminfo_number(tag) click to toggle source
    # 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
scale_number(size, multiplier) click to toggle source
    # 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
vmstat_darwin_find_free_memory() click to toggle source

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
vmstat_find_free_memory() click to toggle source
    # 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.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.