github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/client/fingerprint/memory.go (about) 1 package fingerprint 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/hashicorp/nomad/client/config" 8 "github.com/hashicorp/nomad/nomad/structs" 9 "github.com/shirou/gopsutil/mem" 10 ) 11 12 // MemoryFingerprint is used to fingerprint the available memory on the node 13 type MemoryFingerprint struct { 14 logger *log.Logger 15 } 16 17 // NewMemoryFingerprint is used to create a Memory fingerprint 18 func NewMemoryFingerprint(logger *log.Logger) Fingerprint { 19 f := &MemoryFingerprint{ 20 logger: logger, 21 } 22 return f 23 } 24 25 func (f *MemoryFingerprint) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) { 26 memInfo, err := mem.VirtualMemory() 27 if err != nil { 28 f.logger.Printf("[WARN] Error reading memory information: %s", err) 29 return false, err 30 } 31 32 if memInfo.Total > 0 { 33 node.Attributes["memory.totalbytes"] = fmt.Sprintf("%d", memInfo.Total) 34 35 if node.Resources == nil { 36 node.Resources = &structs.Resources{} 37 } 38 node.Resources.MemoryMB = int(memInfo.Total / 1024 / 1024) 39 } 40 41 return true, nil 42 }