66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
|
package gorelic
|
||
|
|
||
|
import (
|
||
|
metrics "github.com/yvasiyarov/go-metrics"
|
||
|
"github.com/yvasiyarov/newrelic_platform_go"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func newGCMetricaDataSource(pollInterval int) goMetricaDataSource {
|
||
|
r := metrics.NewRegistry()
|
||
|
|
||
|
metrics.RegisterDebugGCStats(r)
|
||
|
go metrics.CaptureDebugGCStats(r, time.Duration(pollInterval)*time.Second)
|
||
|
return goMetricaDataSource{r}
|
||
|
}
|
||
|
|
||
|
func addGCMericsToComponent(component newrelic_platform_go.IComponent, pollInterval int) {
|
||
|
metrics := []*baseGoMetrica{
|
||
|
&baseGoMetrica{
|
||
|
name: "NumberOfGCCalls",
|
||
|
units: "calls",
|
||
|
dataSourceKey: "debug.GCStats.NumGC",
|
||
|
},
|
||
|
&baseGoMetrica{
|
||
|
name: "PauseTotalTime",
|
||
|
units: "nanoseconds",
|
||
|
dataSourceKey: "debug.GCStats.PauseTotal",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
ds := newGCMetricaDataSource(pollInterval)
|
||
|
for _, m := range metrics {
|
||
|
m.basePath = "Runtime/GC/"
|
||
|
m.dataSource = ds
|
||
|
component.AddMetrica(&gaugeMetrica{m})
|
||
|
}
|
||
|
|
||
|
histogramMetrics := []*histogramMetrica{
|
||
|
&histogramMetrica{
|
||
|
statFunction: histogramMax,
|
||
|
baseGoMetrica: &baseGoMetrica{name: "Max"},
|
||
|
},
|
||
|
&histogramMetrica{
|
||
|
statFunction: histogramMin,
|
||
|
baseGoMetrica: &baseGoMetrica{name: "Min"},
|
||
|
},
|
||
|
&histogramMetrica{
|
||
|
statFunction: histogramMean,
|
||
|
baseGoMetrica: &baseGoMetrica{name: "Mean"},
|
||
|
},
|
||
|
&histogramMetrica{
|
||
|
statFunction: histogramPercentile,
|
||
|
percentileValue: 0.95,
|
||
|
baseGoMetrica: &baseGoMetrica{name: "Percentile95"},
|
||
|
},
|
||
|
}
|
||
|
for _, m := range histogramMetrics {
|
||
|
m.baseGoMetrica.units = "nanoseconds"
|
||
|
m.baseGoMetrica.dataSourceKey = "debug.GCStats.Pause"
|
||
|
m.baseGoMetrica.basePath = "Runtime/GC/GCTime/"
|
||
|
m.baseGoMetrica.dataSource = ds
|
||
|
|
||
|
component.AddMetrica(m)
|
||
|
}
|
||
|
}
|