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
}