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  }