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
}