func translateFS()

in kubelet-to-gcm/monitor/kubelet/translate.go [477:516]


func translateFS(volume string, fs *stats.FsStats, tsFactory *timeSeriesFactory, startTime time.Time, diskUsedMD *metricMetadata, diskTotalMD *metricMetadata) ([]*v3.TimeSeries, error) {
	var timeSeries []*v3.TimeSeries

	if fs == nil {
		return nil, fmt.Errorf("File-system information missing.")
	}

	// For some reason the Kubelet doesn't return when this sample is from,
	// so we'll use now.
	now := time.Now()

	resourceLabels := map[string]string{"device_name": volume}
	if tsFactory.monitoredResource.Type != "gke_container" {
		resourceLabels = noLabels
	}
	if diskTotalMD != nil {
		if fs.CapacityBytes == nil {
			return nil, fmt.Errorf("CapacityBytes is missing from FsStats %v", fs)
		}
		// Total disk available.
		diskTotalPoint := tsFactory.newPoint(&v3.TypedValue{
			Int64Value:      monitor.Int64Ptr(int64(*fs.CapacityBytes)),
			ForceSendFields: []string{"Int64Value"},
		}, startTime, now, diskTotalMD.MetricKind)
		timeSeries = append(timeSeries, tsFactory.newTimeSeries(resourceLabels, diskTotalMD, diskTotalPoint))
	}

	if diskUsedMD != nil {
		if fs.UsedBytes == nil {
			return nil, fmt.Errorf("UsedBytes is missing from FsStats %v", fs)
		}
		// Total disk used.
		diskUsedPoint := tsFactory.newPoint(&v3.TypedValue{
			Int64Value:      monitor.Int64Ptr(int64(*fs.UsedBytes)),
			ForceSendFields: []string{"Int64Value"},
		}, startTime, now, diskUsedMD.MetricKind)
		timeSeries = append(timeSeries, tsFactory.newTimeSeries(resourceLabels, diskUsedMD, diskUsedPoint))
	}
	return timeSeries, nil
}