forked from gramework/gramework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit.go
More file actions
97 lines (88 loc) · 1.91 KB
/
Copy pathinit.go
File metadata and controls
97 lines (88 loc) · 1.91 KB
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
92
93
94
95
96
97
package gramework
import (
"fmt"
"runtime"
"github.com/apex/log"
"github.com/cloudfoundry/gosigar"
)
func init() {
internalLog.WithFields(log.Fields{
"package": "gramework",
"version": Version,
}).Info("Initialization")
concreteSigar := sigar.ConcreteSigar{}
internalLog.WithFields(log.Fields{
"cputicks": siFmt(uint64(TicksPerSecond())),
"ram": func() string {
mem, err := concreteSigar.GetMem()
if err != nil {
return "<unknown>"
}
return fmt.Sprintf("%s used / %s total", siFmt(mem.ActualUsed), siFmt(mem.Total))
}(),
"swap": func() string {
swap, err := concreteSigar.GetSwap()
if err != nil {
return "<unknown>"
}
return fmt.Sprintf("%s used / %s total", siFmt(swap.Used), siFmt(swap.Total))
}(),
}).Info("node info")
la, err := concreteSigar.GetLoadAverage()
if err != nil {
err = la.Get() // retry
}
if err == nil {
maxLA := float64(runtime.NumCPU() + 2)
loadLog := internalLog.WithFields(log.Fields{
"one": fmt.Sprintf("%.3f", la.One),
"five": fmt.Sprintf("%.3f", la.Five),
"fifteen": fmt.Sprintf("%.3f", la.Fifteen),
})
if la.One >= maxLA || la.Five >= maxLA || la.Fifteen >= maxLA {
loadLog.Warn("high load average, performance may be impacted")
} else {
loadLog.Info("load average is good")
}
}
uptime := sigar.Uptime{}
err = uptime.Get()
if err != nil {
err = uptime.Get() // retry
}
if err == nil {
internalLog.WithField("uptime", uptime.Format()).Info("node uptime")
}
}
func siFmt(n uint64) string {
prefix := siRaw
x := float64(n)
for ; x > 1000; x = x / 1024 {
prefix++
}
return fmt.Sprintf("%.2f%s", x, prefix.String())
}
type siPrefix uint
const (
siRaw siPrefix = iota
siKilo
siMega
siGiga
siTera
)
func (s siPrefix) String() string {
switch s {
case siRaw:
return ""
case siKilo:
return "K"
case siMega:
return "M"
case siGiga:
return "G"
case siTera:
return "T"
default:
return "T"
}
}