func()

in kubelet-to-gcm/monitor/kubelet/translate.go [273:305]


func (t *Translator) translateContainers(pods []stats.PodStats) ([]*v3.TimeSeries, error) {
	var timeSeries []*v3.TimeSeries
	for _, pod := range pods {
		metricsSeen := make(map[string]time.Time)
		metrics := make(map[string][]*v3.TimeSeries)
		namespace := pod.PodRef.Namespace
		podID := pod.PodRef.Name
		// There can be duplicate data points for containers, so only
		// take the latest one.
		for _, container := range pod.Containers {
			containerName := container.Name
			// Check for duplicates
			if container.StartTime.Time.Before(metricsSeen[containerName]) || container.StartTime.Time.Equal(metricsSeen[containerName]) {
				continue
			}
			metricsSeen[containerName] = container.StartTime.Time

			containerSeries, err := t.translateContainer(podID, namespace, container, true /* requireFsStats */)
			if err != nil {
				glog.Warningf("Failed to translate container stats for container %q in pod %q(%q): %v",
					containerName, podID, namespace, err)
				continue
			}
			metrics[containerName] = containerSeries
		}

		// Flatten the deduplicated metrics.
		for _, containerSeries := range metrics {
			timeSeries = append(timeSeries, containerSeries...)
		}
	}
	return timeSeries, nil
}