1package docker
2
3import (
4	"encoding/json"
5	"errors"
6
7	"github.com/shirou/gopsutil/cpu"
8	"github.com/shirou/gopsutil/internal/common"
9)
10
11var ErrDockerNotAvailable = errors.New("docker not available")
12var ErrCgroupNotAvailable = errors.New("cgroup not available")
13
14var invoke common.Invoker = common.Invoke{}
15
16const nanoseconds = 1e9
17
18type CgroupCPUStat struct {
19	cpu.TimesStat
20	Usage float64
21}
22
23type CgroupMemStat struct {
24	ContainerID             string `json:"containerID"`
25	Cache                   uint64 `json:"cache"`
26	RSS                     uint64 `json:"rss"`
27	RSSHuge                 uint64 `json:"rssHuge"`
28	MappedFile              uint64 `json:"mappedFile"`
29	Pgpgin                  uint64 `json:"pgpgin"`
30	Pgpgout                 uint64 `json:"pgpgout"`
31	Pgfault                 uint64 `json:"pgfault"`
32	Pgmajfault              uint64 `json:"pgmajfault"`
33	InactiveAnon            uint64 `json:"inactiveAnon"`
34	ActiveAnon              uint64 `json:"activeAnon"`
35	InactiveFile            uint64 `json:"inactiveFile"`
36	ActiveFile              uint64 `json:"activeFile"`
37	Unevictable             uint64 `json:"unevictable"`
38	HierarchicalMemoryLimit uint64 `json:"hierarchicalMemoryLimit"`
39	TotalCache              uint64 `json:"totalCache"`
40	TotalRSS                uint64 `json:"totalRss"`
41	TotalRSSHuge            uint64 `json:"totalRssHuge"`
42	TotalMappedFile         uint64 `json:"totalMappedFile"`
43	TotalPgpgIn             uint64 `json:"totalPgpgin"`
44	TotalPgpgOut            uint64 `json:"totalPgpgout"`
45	TotalPgFault            uint64 `json:"totalPgfault"`
46	TotalPgMajFault         uint64 `json:"totalPgmajfault"`
47	TotalInactiveAnon       uint64 `json:"totalInactiveAnon"`
48	TotalActiveAnon         uint64 `json:"totalActiveAnon"`
49	TotalInactiveFile       uint64 `json:"totalInactiveFile"`
50	TotalActiveFile         uint64 `json:"totalActiveFile"`
51	TotalUnevictable        uint64 `json:"totalUnevictable"`
52	MemUsageInBytes         uint64 `json:"memUsageInBytes"`
53	MemMaxUsageInBytes      uint64 `json:"memMaxUsageInBytes"`
54	MemLimitInBytes         uint64 `json:"memoryLimitInBbytes"`
55	MemFailCnt              uint64 `json:"memoryFailcnt"`
56}
57
58func (m CgroupMemStat) String() string {
59	s, _ := json.Marshal(m)
60	return string(s)
61}
62
63type CgroupDockerStat struct {
64	ContainerID string `json:"containerID"`
65	Name        string `json:"name"`
66	Image       string `json:"image"`
67	Status      string `json:"status"`
68	Running     bool   `json:"running"`
69}
70
71func (c CgroupDockerStat) String() string {
72	s, _ := json.Marshal(c)
73	return string(s)
74}
75