func()

in opentelemetry_collector/receiver/dockerstats/scraper.go [206:247]


func (s *scraper) usageStatsToMetrics(stats *types.StatsJSON, labelValues []*mpb.LabelValue) []*mpb.Metric {
	var rx, tx uint64
	for _, nw := range stats.Networks {
		rx += nw.RxBytes
		tx += nw.TxBytes
	}

	return []*mpb.Metric{
		{
			MetricDescriptor: cpuUsageDesc,
			Timeseries: []*mpb.TimeSeries{
				metricgenerator.MakeDoubleTimeSeries(time.Duration(stats.CPUStats.CPUUsage.TotalUsage).Seconds(), s.startTime, s.now(), labelValues),
			},
		},
		// Unfortunately, Docker API doesn't expose CPU Limits via CPUStats API. That information
		// is extracted via container inspection (see readInfo() below).
		{
			MetricDescriptor: memUsageDesc,
			Timeseries: []*mpb.TimeSeries{
				metricgenerator.MakeInt64TimeSeries(int64(stats.MemoryStats.Usage), s.startTime, s.now(), labelValues),
			},
		},
		{
			MetricDescriptor: memLimitDesc,
			Timeseries: []*mpb.TimeSeries{
				metricgenerator.MakeInt64TimeSeries(int64(stats.MemoryStats.Limit), s.startTime, s.now(), labelValues),
			},
		},
		{
			MetricDescriptor: nwRecvBytesDesc,
			Timeseries: []*mpb.TimeSeries{
				metricgenerator.MakeInt64TimeSeries(int64(rx), s.startTime, s.now(), labelValues),
			},
		},
		{
			MetricDescriptor: nwSentBytesDesc,
			Timeseries: []*mpb.TimeSeries{
				metricgenerator.MakeInt64TimeSeries(int64(tx), s.startTime, s.now(), labelValues),
			},
		},
	}
}