func()

in kubelet-to-gcm/monitor/kubelet/translate.go [205:271]


func (t *Translator) translateNode(node stats.NodeStats) ([]*v3.TimeSeries, error) {
	var (
		timeSeries, memTS, fsTS, cpuTS []*v3.TimeSeries
		tsFactory                      *timeSeriesFactory
		err                            error
	)

	tsFactory = newTimeSeriesFactory(t.getMonitoredResource(map[string]string{"pod": "machine"}), t.resolution)

	// Uptime. This is embedded: there's no nil check.
	timeSeries = append(timeSeries, tsFactory.newTimeSeries(noLabels, t.getUptimeMD(), t.getUptimePoint(node.StartTime.Time)))

	// Memory stats.
	memUsedMD, memTotalMD, pageFaultsMD := t.getMemoryMD(tsFactory.monitoredResource.Type)
	memTS, err = translateMemory(node.Memory, tsFactory, node.StartTime.Time, memUsedMD, memTotalMD, pageFaultsMD, "")
	if err != nil {
		return nil, err
	}
	timeSeries = append(timeSeries, memTS...)

	// File-system stats.
	diskUsedMD, diskTotalMD := t.getFsMD(tsFactory.monitoredResource.Type)
	fsTS, err = translateFS("/", node.Fs, tsFactory, node.StartTime.Time, diskUsedMD, diskTotalMD)
	if err != nil {
		return nil, err
	}
	timeSeries = append(timeSeries, fsTS...)

	// CPU stats.
	cpuTS, err = translateCPU(node.CPU, tsFactory, node.StartTime.Time, t.getCpuMD(tsFactory.monitoredResource.Type), "")
	if err != nil {
		return nil, err
	}
	timeSeries = append(timeSeries, cpuTS...)

	// System containers
	for _, container := range node.SystemContainers {
		// For system containers:
		// * There won't be duplication;
		// * There aren't pod id and namespace;
		// * There is no fs stats.
		// Pod ID and namespace for system containers are empty.
		if t.useOldResourceModel {
			containerSeries, err := t.translateContainer("", "", container, false /* requireFsStats */)
			if err != nil {
				glog.Warningf("Failed to translate system container stats for %q: %v", container.Name, err)
				continue
			}
			timeSeries = append(timeSeries, containerSeries...)
		} else {
			cpuTS, err = translateCPU(container.CPU, tsFactory, node.StartTime.Time, daemonCpuCoreUsageTimeMD, container.Name)
			if err != nil {
				glog.Warningf("Failed to translate system container CPU stats for %q: %v", container.Name, err)
			} else {
				timeSeries = append(timeSeries, cpuTS...)
			}
			memTS, err = translateMemory(container.Memory, tsFactory, node.StartTime.Time, daemonMemUsedMD, nil, nil, container.Name)
			if err != nil {
				glog.Warningf("Failed to translate system container memory stats for %q: %v", container.Name, err)
				continue
			}
			timeSeries = append(timeSeries, memTS...)
		}
	}

	return timeSeries, nil
}