core/monitor/self.go

64 lines
1.7 KiB
Go

package monitor
import (
"runtime"
"github.com/datarhei/core/v16/mem"
"github.com/datarhei/core/v16/monitor/metric"
)
type selfCollector struct {
allocDescr *metric.Description
recycleDescr *metric.Description
dumpDescr *metric.Description
defaultSizeDescr *metric.Description
maxSizeDescr *metric.Description
}
func NewSelfCollector() metric.Collector {
c := &selfCollector{}
c.allocDescr = metric.NewDesc("bufferpool_alloc", "Number of buffer allocations", nil)
c.recycleDescr = metric.NewDesc("bufferpool_recycle", "Number of buffer recycles", nil)
c.dumpDescr = metric.NewDesc("bufferpool_dump", "Number of buffer dumps", nil)
c.defaultSizeDescr = metric.NewDesc("bufferpool_default_size", "Default buffer size", nil)
c.maxSizeDescr = metric.NewDesc("bufferpool_max_size", "Max. buffer size for recycling", nil)
return c
}
func (c *selfCollector) Stop() {}
func (c *selfCollector) Prefix() string {
return "bufferpool"
}
func (c *selfCollector) Describe() []*metric.Description {
return []*metric.Description{
c.allocDescr,
c.recycleDescr,
c.dumpDescr,
c.defaultSizeDescr,
c.maxSizeDescr,
}
}
func (c *selfCollector) Collect() metric.Metrics {
stats := mem.Stats()
metrics := metric.NewMetrics()
metrics.Add(metric.NewValue(c.allocDescr, float64(stats.Alloc)))
metrics.Add(metric.NewValue(c.recycleDescr, float64(stats.Recycle)))
metrics.Add(metric.NewValue(c.dumpDescr, float64(stats.Dump)))
metrics.Add(metric.NewValue(c.defaultSizeDescr, float64(stats.DefaultSize)))
metrics.Add(metric.NewValue(c.maxSizeDescr, float64(stats.MaxSize)))
memstats := runtime.MemStats{}
runtime.ReadMemStats(&memstats)
//metrics.Add(metric.NewValue())
return metrics
}