]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/fsouza/go-dockerclient/external/github.com/docker/docker/pkg/system/meminfo_windows.go
provider: Ensured Go 1.11 in TravisCI and README
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / fsouza / go-dockerclient / external / github.com / docker / docker / pkg / system / meminfo_windows.go
1 package system
2
3 import (
4 "syscall"
5 "unsafe"
6 )
7
8 var (
9 modkernel32 = syscall.NewLazyDLL("kernel32.dll")
10
11 procGlobalMemoryStatusEx = modkernel32.NewProc("GlobalMemoryStatusEx")
12 )
13
14 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx
15 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx
16 type memorystatusex struct {
17 dwLength uint32
18 dwMemoryLoad uint32
19 ullTotalPhys uint64
20 ullAvailPhys uint64
21 ullTotalPageFile uint64
22 ullAvailPageFile uint64
23 ullTotalVirtual uint64
24 ullAvailVirtual uint64
25 ullAvailExtendedVirtual uint64
26 }
27
28 // ReadMemInfo retrieves memory statistics of the host system and returns a
29 // MemInfo type.
30 func ReadMemInfo() (*MemInfo, error) {
31 msi := &memorystatusex{
32 dwLength: 64,
33 }
34 r1, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(msi)))
35 if r1 == 0 {
36 return &MemInfo{}, nil
37 }
38 return &MemInfo{
39 MemTotal: int64(msi.ullTotalPhys),
40 MemFree: int64(msi.ullAvailPhys),
41 SwapTotal: int64(msi.ullTotalPageFile),
42 SwapFree: int64(msi.ullAvailPageFile),
43 }, nil
44 }