func()

in kubelet-to-gcm/monitor/kubelet/translate.go [307:366]


func (t *Translator) translateContainer(podID, namespace string, container stats.ContainerStats, requireFsStats bool) ([]*v3.TimeSeries, error) {
	var (
		containerSeries, memTS, rootfsTS, logfsTS, cpuTS []*v3.TimeSeries
		err                                              error
		containerName                                    = container.Name
		containerLabels                                  = map[string]string{
			"namespace": namespace,
			"pod":       podID,
			"container": containerName,
		}
	)

	tsFactory := newTimeSeriesFactory(t.getMonitoredResource(containerLabels), t.resolution)

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

	// Memory stats.
	memUsedMD, memTotalMD, pageFaultsMD := t.getMemoryMD(tsFactory.monitoredResource.Type)
	memTS, err = translateMemory(container.Memory, tsFactory, container.StartTime.Time, memUsedMD, memTotalMD, pageFaultsMD, "")
	if err != nil {
		return nil, fmt.Errorf("failed to translate memory stats: %v", err)
	}
	containerSeries = append(containerSeries, memTS...)

	// File-system stats.
	diskUsedMD, diskTotalMD := t.getFsMD(tsFactory.monitoredResource.Type)
	if t.useOldResourceModel {
		rootfsTS, err = translateFS("/", container.Rootfs, tsFactory, container.StartTime.Time, diskUsedMD, diskTotalMD)
	} else {
		rootfsTS, err = containerTranslateFS("/", container.Rootfs, container.Logs, tsFactory, container.StartTime.Time)
	}
	if err != nil {
		if requireFsStats {
			return nil, fmt.Errorf("failed to translate rootfs stats: %v", err)
		}
	} else {
		containerSeries = append(containerSeries, rootfsTS...)
	}

	if t.useOldResourceModel {
		logfsTS, err = translateFS("logs", container.Logs, tsFactory, container.StartTime.Time, diskUsedMD, diskTotalMD)
		if err != nil {
			if requireFsStats {
				return nil, fmt.Errorf("failed to translate log stats: %v", err)
			}
		} else {
			containerSeries = append(containerSeries, logfsTS...)
		}
	}

	// CPU stats.
	cpuTS, err = translateCPU(container.CPU, tsFactory, container.StartTime.Time, t.getCpuMD(tsFactory.monitoredResource.Type), "")
	if err != nil {
		return nil, fmt.Errorf("failed to translate cpu stats: %v", err)
	}
	containerSeries = append(containerSeries, cpuTS...)

	return containerSeries, nil
}