51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
| // +build windows
 | |
| 
 | |
| package mem
 | |
| 
 | |
| import (
 | |
| 	"syscall"
 | |
| 	"unsafe"
 | |
| 
 | |
| 	common "github.com/influxdb/telegraf/plugins/system/ps/common"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	procGlobalMemoryStatusEx = common.Modkernel32.NewProc("GlobalMemoryStatusEx")
 | |
| )
 | |
| 
 | |
| type MEMORYSTATUSEX struct {
 | |
| 	cbSize                  uint32
 | |
| 	dwMemoryLoad            uint32
 | |
| 	ullTotalPhys            uint64 // in bytes
 | |
| 	ullAvailPhys            uint64
 | |
| 	ullTotalPageFile        uint64
 | |
| 	ullAvailPageFile        uint64
 | |
| 	ullTotalVirtual         uint64
 | |
| 	ullAvailVirtual         uint64
 | |
| 	ullAvailExtendedVirtual uint64
 | |
| }
 | |
| 
 | |
| func VirtualMemory() (*VirtualMemoryStat, error) {
 | |
| 	var memInfo MEMORYSTATUSEX
 | |
| 	memInfo.cbSize = uint32(unsafe.Sizeof(memInfo))
 | |
| 	mem, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(&memInfo)))
 | |
| 	if mem == 0 {
 | |
| 		return nil, syscall.GetLastError()
 | |
| 	}
 | |
| 
 | |
| 	ret := &VirtualMemoryStat{
 | |
| 		Total:       memInfo.ullTotalPhys,
 | |
| 		Available:   memInfo.ullAvailPhys,
 | |
| 		UsedPercent: float64(memInfo.dwMemoryLoad),
 | |
| 	}
 | |
| 
 | |
| 	ret.Used = ret.Total - ret.Available
 | |
| 	return ret, nil
 | |
| }
 | |
| 
 | |
| func SwapMemory() (*SwapMemoryStat, error) {
 | |
| 	ret := &SwapMemoryStat{}
 | |
| 
 | |
| 	return ret, nil
 | |
| }
 |