github.com/sl1pm4t/consul@v1.4.5-0.20190325224627-74c31c540f9c/agent/debug/host.go (about) 1 package debug 2 3 import ( 4 "time" 5 6 "github.com/shirou/gopsutil/cpu" 7 "github.com/shirou/gopsutil/disk" 8 "github.com/shirou/gopsutil/host" 9 "github.com/shirou/gopsutil/mem" 10 ) 11 12 const ( 13 // DiskUsagePath is the path to check usage of the disk. 14 // Must be a filesystem path such as "/", not device file path like "/dev/vda1" 15 DiskUsagePath = "/" 16 ) 17 18 // HostInfo includes information about resources on the host as well as 19 // collection time and 20 type HostInfo struct { 21 Memory *mem.VirtualMemoryStat 22 CPU []cpu.InfoStat 23 Host *host.InfoStat 24 Disk *disk.UsageStat 25 CollectionTime int64 26 Errors []error 27 } 28 29 // CollectHostInfo queries the host system and returns HostInfo. Any 30 // errors encountered will be returned in HostInfo.Errors 31 func CollectHostInfo() *HostInfo { 32 info := &HostInfo{CollectionTime: time.Now().UTC().UnixNano()} 33 34 if h, err := host.Info(); err != nil { 35 info.Errors = append(info.Errors, err) 36 } else { 37 info.Host = h 38 } 39 40 if v, err := mem.VirtualMemory(); err != nil { 41 info.Errors = append(info.Errors, err) 42 } else { 43 info.Memory = v 44 } 45 46 if d, err := disk.Usage(DiskUsagePath); err != nil { 47 info.Errors = append(info.Errors, err) 48 } else { 49 info.Disk = d 50 } 51 52 if c, err := cpu.Info(); err != nil { 53 info.Errors = append(info.Errors, err) 54 } else { 55 info.CPU = c 56 } 57 58 return info 59 }