mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 07:57:13 +08:00
89 lines
3.2 KiB
Go
89 lines
3.2 KiB
Go
package monitor
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/datarhei/core/v16/mem"
|
|
"github.com/datarhei/core/v16/monitor/metric"
|
|
)
|
|
|
|
type selfCollector struct {
|
|
bufferAllocDescr *metric.Description
|
|
bufferRecycleDescr *metric.Description
|
|
bufferDumpDescr *metric.Description
|
|
bufferDefaultSizeDescr *metric.Description
|
|
bufferMaxSizeDescr *metric.Description
|
|
|
|
heapAllocDescr *metric.Description
|
|
totalAllocDescr *metric.Description
|
|
heapSysDescr *metric.Description
|
|
heapIdleDescr *metric.Description
|
|
heapInuseDescr *metric.Description
|
|
heapObjectsDescr *metric.Description
|
|
}
|
|
|
|
func NewSelfCollector() metric.Collector {
|
|
c := &selfCollector{}
|
|
|
|
c.bufferAllocDescr = metric.NewDesc("self_bufferpool_alloc", "Number of buffer allocations", nil)
|
|
c.bufferRecycleDescr = metric.NewDesc("self_bufferpool_recycle", "Number of buffer recycles", nil)
|
|
c.bufferDumpDescr = metric.NewDesc("self_bufferpool_dump", "Number of buffer dumps", nil)
|
|
c.bufferDefaultSizeDescr = metric.NewDesc("self_bufferpool_default_size", "Default buffer size", nil)
|
|
c.bufferMaxSizeDescr = metric.NewDesc("self_bufferpool_max_size", "Max. buffer size for recycling", nil)
|
|
|
|
c.heapAllocDescr = metric.NewDesc("self_mem_heap_alloc_bytes", "Number of bytes allocated on the heap", nil)
|
|
c.totalAllocDescr = metric.NewDesc("self_mem_total_alloc_bytes", "Number of bytes allocated since start", nil)
|
|
c.heapSysDescr = metric.NewDesc("self_mem_heap_sys_bytes", "Number of bytes obtained from OS", nil)
|
|
c.heapIdleDescr = metric.NewDesc("self_mem_heap_idle_bytes", "Number of unused bytes", nil)
|
|
c.heapInuseDescr = metric.NewDesc("self_mem_heap_inuse_bytes", "Number of used bytes", nil)
|
|
c.heapObjectsDescr = metric.NewDesc("self_mem_heap_objects", "Number of objects in heap", nil)
|
|
|
|
return c
|
|
}
|
|
|
|
func (c *selfCollector) Stop() {}
|
|
|
|
func (c *selfCollector) Prefix() string {
|
|
return "bufferpool"
|
|
}
|
|
|
|
func (c *selfCollector) Describe() []*metric.Description {
|
|
return []*metric.Description{
|
|
c.bufferAllocDescr,
|
|
c.bufferRecycleDescr,
|
|
c.bufferDumpDescr,
|
|
c.bufferDefaultSizeDescr,
|
|
c.bufferMaxSizeDescr,
|
|
c.heapAllocDescr,
|
|
c.totalAllocDescr,
|
|
c.heapSysDescr,
|
|
c.heapIdleDescr,
|
|
c.heapInuseDescr,
|
|
c.heapObjectsDescr,
|
|
}
|
|
}
|
|
|
|
func (c *selfCollector) Collect() metric.Metrics {
|
|
bufferstats := mem.Stats()
|
|
|
|
metrics := metric.NewMetrics()
|
|
|
|
metrics.Add(metric.NewValue(c.bufferAllocDescr, float64(bufferstats.Alloc)))
|
|
metrics.Add(metric.NewValue(c.bufferRecycleDescr, float64(bufferstats.Recycle)))
|
|
metrics.Add(metric.NewValue(c.bufferDumpDescr, float64(bufferstats.Dump)))
|
|
metrics.Add(metric.NewValue(c.bufferDefaultSizeDescr, float64(bufferstats.DefaultSize)))
|
|
metrics.Add(metric.NewValue(c.bufferMaxSizeDescr, float64(bufferstats.MaxSize)))
|
|
|
|
memstats := runtime.MemStats{}
|
|
runtime.ReadMemStats(&memstats)
|
|
|
|
metrics.Add(metric.NewValue(c.heapAllocDescr, float64(memstats.HeapAlloc)))
|
|
metrics.Add(metric.NewValue(c.totalAllocDescr, float64(memstats.TotalAlloc)))
|
|
metrics.Add(metric.NewValue(c.heapSysDescr, float64(memstats.HeapSys)))
|
|
metrics.Add(metric.NewValue(c.heapIdleDescr, float64(memstats.HeapIdle)))
|
|
metrics.Add(metric.NewValue(c.heapInuseDescr, float64(memstats.HeapInuse)))
|
|
metrics.Add(metric.NewValue(c.heapObjectsDescr, float64(memstats.Mallocs-memstats.Frees)))
|
|
|
|
return metrics
|
|
}
|