func()

in components/otelopscol/receiver/nvmlreceiver/scraper.go [67:105]


func (s *nvmlScraper) scrape(_ context.Context) (pmetric.Metrics, error) {
	deviceMetrics, err := s.client.collectDeviceMetrics()

	for _, metric := range deviceMetrics {
		timestamp := pcommon.NewTimestampFromTime(metric.time)
		model := s.client.getDeviceModelName(metric.gpuIndex)
		UUID := s.client.getDeviceUUID(metric.gpuIndex)
		gpuIndex := fmt.Sprintf("%d", metric.gpuIndex)
		switch metric.name {
		case "nvml.gpu.utilization":
			s.mb.RecordNvmlGpuUtilizationDataPoint(
				timestamp, metric.asFloat64(), model, gpuIndex, UUID)
		case "nvml.gpu.memory.bytes_used":
			s.mb.RecordNvmlGpuMemoryBytesUsedDataPoint(
				timestamp, metric.asInt64(), model, gpuIndex, UUID, metadata.AttributeMemoryStateUsed)
		case "nvml.gpu.memory.bytes_free":
			s.mb.RecordNvmlGpuMemoryBytesUsedDataPoint(
				timestamp, metric.asInt64(), model, gpuIndex, UUID, metadata.AttributeMemoryStateFree)
		}
	}

	processMetrics := s.client.collectProcessMetrics()
	for _, metric := range processMetrics {
		timestamp := pcommon.NewTimestampFromTime(metric.time)
		model := s.client.getDeviceModelName(metric.gpuIndex)
		UUID := s.client.getDeviceUUID(metric.gpuIndex)
		gpuIndex := fmt.Sprintf("%d", metric.gpuIndex)

		s.mb.RecordNvmlGpuProcessesUtilizationDataPoint(
			timestamp, float64(metric.lifetimeGpuUtilization)/100.0, model, gpuIndex, UUID, int64(metric.processPid),
			metric.processName, metric.command, metric.commandLine, metric.owner)

		s.mb.RecordNvmlGpuProcessesMaxBytesUsedDataPoint(
			timestamp, int64(metric.lifetimeGpuMaxMemory), model, gpuIndex, UUID, int64(metric.processPid),
			metric.processName, metric.command, metric.commandLine, metric.owner)
	}

	return s.mb.Emit(), err
}