forked from resourced/resourced
/
free.go
91 lines (68 loc) · 2.65 KB
/
free.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package readers
import (
"encoding/json"
"github.com/cloudfoundry/gosigar"
)
func init() {
Register("Free", NewFree)
}
func NewFree() IReader {
m := &Free{}
m.Data = make(map[string]map[string]interface{})
return m
}
// Free is a reader that scrapes swapory data and presents it in the form similar to `free`.
// Data source: https://github.com/cloudfoundry/gosigar/tree/master
type Free struct {
Data map[string]map[string]interface{}
}
// Run gathers free data from gosigar.
func (m *Free) Run() error {
mem := sigar.Mem{}
err := mem.Get()
if err != nil {
return err
}
swap := sigar.Swap{}
err = swap.Get()
if err != nil {
return err
}
m.Data["Memory"] = make(map[string]interface{})
m.Data["Swap"] = make(map[string]interface{})
m.Data["Memory"]["Total"] = mem.Total
m.Data["Memory"]["TotalMB"] = mem.Total / 1000 / 1000
m.Data["Memory"]["TotalGB"] = mem.Total / 1000 / 1000 / 1000
m.Data["Memory"]["Used"] = mem.Used
m.Data["Memory"]["UsedMB"] = mem.Used / 1000 / 1000
m.Data["Memory"]["UsedGB"] = mem.Used / 1000 / 1000 / 1000
m.Data["Memory"]["UsedPercent"] = int(float64(mem.Used) / float64(mem.Total) * 100)
m.Data["Memory"]["Free"] = mem.Free
m.Data["Memory"]["FreeMB"] = mem.Free / 1000 / 1000
m.Data["Memory"]["FreeGB"] = mem.Free / 1000 / 1000 / 1000
m.Data["Memory"]["FreePercent"] = int(float64(mem.Free) / float64(mem.Total) * 100)
m.Data["Memory"]["ActualUsed"] = mem.ActualUsed
m.Data["Memory"]["ActualUsedMB"] = mem.ActualUsed / 1000 / 1000
m.Data["Memory"]["ActualUsedGB"] = mem.ActualUsed / 1000 / 1000 / 1000
m.Data["Memory"]["ActualUsedPercent"] = int(float64(mem.ActualUsed) / float64(mem.Total) * 100)
m.Data["Memory"]["ActualFree"] = mem.ActualFree
m.Data["Memory"]["ActualFreeMB"] = mem.ActualFree / 1000 / 1000
m.Data["Memory"]["ActualFreeGB"] = mem.ActualFree / 1000 / 1000 / 1000
m.Data["Memory"]["ActualFreePercent"] = int(float64(mem.ActualFree) / float64(mem.Total) * 100)
m.Data["Swap"]["Total"] = swap.Total
m.Data["Swap"]["TotalMB"] = swap.Total / 1000 / 1000
m.Data["Swap"]["TotalGB"] = swap.Total / 1000 / 1000 / 1000
m.Data["Swap"]["Used"] = swap.Used
m.Data["Swap"]["UsedMB"] = swap.Used / 1000 / 1000
m.Data["Swap"]["UsedGB"] = swap.Used / 1000 / 1000 / 1000
m.Data["Swap"]["UsedPercent"] = int(float64(swap.Used) / float64(swap.Total) * 100)
m.Data["Swap"]["Free"] = swap.Free
m.Data["Swap"]["FreeMB"] = swap.Free / 1000 / 1000
m.Data["Swap"]["FreeGB"] = swap.Free / 1000 / 1000 / 1000
m.Data["Swap"]["FreePercent"] = int(float64(swap.Free) / float64(swap.Total) * 100)
return nil
}
// ToJson serialize Data field to JSON.
func (m *Free) ToJson() ([]byte, error) {
return json.Marshal(m.Data)
}