mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-28 23:58:19 +00:00
129 lines
4.7 KiB
Go
129 lines
4.7 KiB
Go
package scheduled
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/uber-go/tally"
|
|
)
|
|
|
|
type RuntimeStatCollector struct {
|
|
runtimeMetrics runtimeMetrics
|
|
}
|
|
|
|
type runtimeMetrics struct {
|
|
cpuGoroutines tally.Gauge
|
|
cpuCgoCalls tally.Gauge
|
|
|
|
memoryAlloc tally.Gauge
|
|
memoryTotal tally.Gauge
|
|
memorySys tally.Gauge
|
|
memoryLookups tally.Gauge
|
|
memoryMalloc tally.Gauge
|
|
memoryFrees tally.Gauge
|
|
|
|
memoryHeapAlloc tally.Gauge
|
|
memoryHeapSys tally.Gauge
|
|
memoryHeapIdle tally.Gauge
|
|
memoryHeapInuse tally.Gauge
|
|
memoryHeapReleased tally.Gauge
|
|
memoryHeapObjects tally.Gauge
|
|
|
|
memoryStackInuse tally.Gauge
|
|
memoryStackSys tally.Gauge
|
|
memoryStackMSpanInuse tally.Gauge
|
|
memoryStackMSpanSys tally.Gauge
|
|
memoryStackMCacheInuse tally.Gauge
|
|
memoryStackMCacheSys tally.Gauge
|
|
|
|
memoryOtherSys tally.Gauge
|
|
|
|
memoryGCSys tally.Gauge
|
|
memoryGCNext tally.Gauge
|
|
memoryGCLast tally.Gauge
|
|
memoryGCPauseTotal tally.Gauge
|
|
memoryGCCount tally.Gauge
|
|
}
|
|
|
|
func NewRuntimeStats(scope tally.Scope) *RuntimeStatCollector {
|
|
runtimeScope := scope.SubScope("runtime")
|
|
runtimeMetrics := runtimeMetrics{
|
|
// cpu
|
|
cpuGoroutines: runtimeScope.Gauge("cpu.goroutines"),
|
|
cpuCgoCalls: runtimeScope.Gauge("cpu.cgo_calls"),
|
|
// memory
|
|
memoryAlloc: runtimeScope.Gauge("memory.alloc"),
|
|
memoryTotal: runtimeScope.Gauge("memory.total"),
|
|
memorySys: runtimeScope.Gauge("memory.sys"),
|
|
memoryLookups: runtimeScope.Gauge("memory.lookups"),
|
|
memoryMalloc: runtimeScope.Gauge("memory.malloc"),
|
|
memoryFrees: runtimeScope.Gauge("memory.frees"),
|
|
// heap
|
|
memoryHeapAlloc: runtimeScope.Gauge("memory.heap.alloc"),
|
|
memoryHeapSys: runtimeScope.Gauge("memory.heap.sys"),
|
|
memoryHeapIdle: runtimeScope.Gauge("memory.heap.idle"),
|
|
memoryHeapInuse: runtimeScope.Gauge("memory.heap.inuse"),
|
|
memoryHeapReleased: runtimeScope.Gauge("memory.heap.released"),
|
|
memoryHeapObjects: runtimeScope.Gauge("memory.heap.objects"),
|
|
// stack
|
|
memoryStackInuse: runtimeScope.Gauge("memory.stack.inuse"),
|
|
memoryStackSys: runtimeScope.Gauge("memory.stack.sys"),
|
|
memoryStackMSpanInuse: runtimeScope.Gauge("memory.stack.mspan_inuse"),
|
|
memoryStackMSpanSys: runtimeScope.Gauge("memory.stack.sys"),
|
|
memoryStackMCacheInuse: runtimeScope.Gauge("memory.stack.mcache_inuse"),
|
|
memoryStackMCacheSys: runtimeScope.Gauge("memory.stack.mcache_sys"),
|
|
memoryOtherSys: runtimeScope.Gauge("memory.othersys"),
|
|
// GC
|
|
memoryGCSys: runtimeScope.Gauge("memory.gc.sys"),
|
|
memoryGCNext: runtimeScope.Gauge("memory.gc.next"),
|
|
memoryGCLast: runtimeScope.Gauge("memory.gc.last"),
|
|
memoryGCPauseTotal: runtimeScope.Gauge("memory.gc.pause_total"),
|
|
memoryGCCount: runtimeScope.Gauge("memory.gc.count"),
|
|
}
|
|
|
|
return &RuntimeStatCollector{
|
|
runtimeMetrics: runtimeMetrics,
|
|
}
|
|
}
|
|
|
|
func (r *RuntimeStatCollector) Run() {
|
|
// cpu stats
|
|
r.runtimeMetrics.cpuGoroutines.Update(float64(runtime.NumGoroutine()))
|
|
r.runtimeMetrics.cpuCgoCalls.Update(float64(runtime.NumCgoCall()))
|
|
|
|
var memStats runtime.MemStats
|
|
runtime.ReadMemStats(&memStats)
|
|
|
|
// general
|
|
r.runtimeMetrics.memoryAlloc.Update(float64(memStats.Alloc))
|
|
r.runtimeMetrics.memoryTotal.Update(float64(memStats.TotalAlloc))
|
|
r.runtimeMetrics.memorySys.Update(float64(memStats.Sys))
|
|
r.runtimeMetrics.memoryLookups.Update(float64(memStats.Lookups))
|
|
r.runtimeMetrics.memoryMalloc.Update(float64(memStats.Mallocs))
|
|
r.runtimeMetrics.memoryFrees.Update(float64(memStats.Frees))
|
|
|
|
// heap
|
|
r.runtimeMetrics.memoryHeapAlloc.Update(float64(memStats.HeapAlloc))
|
|
r.runtimeMetrics.memoryHeapSys.Update(float64(memStats.HeapSys))
|
|
r.runtimeMetrics.memoryHeapIdle.Update(float64(memStats.HeapIdle))
|
|
r.runtimeMetrics.memoryHeapInuse.Update(float64(memStats.HeapInuse))
|
|
r.runtimeMetrics.memoryHeapReleased.Update(float64(memStats.HeapReleased))
|
|
r.runtimeMetrics.memoryHeapObjects.Update(float64(memStats.HeapObjects))
|
|
|
|
// stack
|
|
r.runtimeMetrics.memoryStackInuse.Update(float64(memStats.StackInuse))
|
|
r.runtimeMetrics.memoryStackSys.Update(float64(memStats.StackSys))
|
|
r.runtimeMetrics.memoryStackMSpanInuse.Update(float64(memStats.MSpanInuse))
|
|
r.runtimeMetrics.memoryStackMSpanSys.Update(float64(memStats.MSpanSys))
|
|
r.runtimeMetrics.memoryStackMCacheInuse.Update(float64(memStats.MCacheInuse))
|
|
r.runtimeMetrics.memoryStackMCacheSys.Update(float64(memStats.MCacheSys))
|
|
r.runtimeMetrics.memoryOtherSys.Update(float64(memStats.OtherSys))
|
|
|
|
// GC
|
|
r.runtimeMetrics.memoryGCSys.Update(float64(memStats.GCSys))
|
|
r.runtimeMetrics.memoryGCNext.Update(float64(memStats.NextGC))
|
|
r.runtimeMetrics.memoryGCLast.Update(float64(memStats.LastGC))
|
|
r.runtimeMetrics.memoryGCPauseTotal.Update(float64(memStats.PauseTotalNs))
|
|
r.runtimeMetrics.memoryGCCount.Update(float64(memStats.NumGC))
|
|
|
|
}
|