Skip to content
Snippets Groups Projects
process.go 861 B
package metrics

import (
	"runtime"
	"time"

	"github.com/iotaledger/goshimmer/packages/metrics"
	"github.com/shirou/gopsutil/cpu"
	"go.uber.org/atomic"
)

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 {
		p = percent[0]
	}
	metrics.Events().CPUUsage.Trigger(p)
}

func measureMemUsage() {
	var m runtime.MemStats
	runtime.ReadMemStats(&m)
	metrics.Events().MemUsage.Trigger(m.Alloc)
}

// MemUsage returns the current memory allocated as bytes
func MemUsage() uint64 {
	return memUsageBytes.Load()
}