/
process.go
43 lines (35 loc) · 934 Bytes
/
process.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
package metrics
import (
"runtime"
"time"
"github.com/shirou/gopsutil/cpu"
"go.uber.org/atomic"
"github.com/iotaledger/goshimmer/packages/app/metrics"
)
var (
cpuUsage atomic.Float64
memUsageBytes atomic.Uint64
)
// CPUUsage returns the current cpu usage.
func CPUUsage() float64 {
return cpuUsage.Load()
}
func measureCPUUsage() {
var p float64
// Percent calculates the percentage of cpu used either per CPU or combined.
// TODO: use func PercentWithContext for more detailed info.
percent, err := cpu.Percent(time.Second, false)
if err == nil && len(percent) > 0 {
p = percent[0]
}
metrics.Events.CPUUsage.Trigger(&metrics.CPUUsageEvent{p})
}
func measureMemUsage() {
var m runtime.MemStats
runtime.ReadMemStats(&m)
metrics.Events.MemUsage.Trigger(&metrics.MemUsageEvent{m.Alloc})
}
// MemUsage returns the current memory allocated as bytes.
func MemUsage() uint64 {
return memUsageBytes.Load()
}