// MakeRuntimeStatSampler constructs a new RuntimeStatSampler object. func MakeRuntimeStatSampler(clock *hlc.Clock) RuntimeStatSampler { // Construct the build info metric. It is constant. // We first build set the labels on the metadata. info := build.GetInfo() timestamp, err := info.Timestamp() if err != nil { // We can't panic here, tests don't have a build timestamp. log.Warningf(context.TODO(), "Could not parse build timestamp: %v", err) } metaBuildTimestamp.AddLabel("tag", info.Tag) metaBuildTimestamp.AddLabel("go_version", info.GoVersion) buildTimestamp := metric.NewGauge(metaBuildTimestamp) buildTimestamp.Update(timestamp) return RuntimeStatSampler{ clock: clock, startTimeNanos: clock.PhysicalNow(), CgoCalls: metric.NewGauge(metaCgoCalls), Goroutines: metric.NewGauge(metaGoroutines), GoAllocBytes: metric.NewGauge(metaGoAllocBytes), GoTotalBytes: metric.NewGauge(metaGoTotalBytes), CgoAllocBytes: metric.NewGauge(metaCgoAllocBytes), CgoTotalBytes: metric.NewGauge(metaCgoTotalBytes), GcCount: metric.NewGauge(metaGCCount), GcPauseNS: metric.NewGauge(metaGCPauseNS), GcPausePercent: metric.NewGaugeFloat64(metaGCPausePercent), CPUUserNS: metric.NewGauge(metaCPUUserNS), CPUUserPercent: metric.NewGaugeFloat64(metaCPUUserPercent), CPUSysNS: metric.NewGauge(metaCPUSysNS), CPUSysPercent: metric.NewGaugeFloat64(metaCPUSysPercent), Rss: metric.NewGauge(metaRSS), Uptime: metric.NewGauge(metaUptime), BuildTimestamp: buildTimestamp, } }