func FsStats()

in container/docker/fs.go [30:90]


func FsStats(
	stats *info.ContainerStats,
	machineInfoFactory info.MachineInfoFactory,
	metrics container.MetricSet,
	storageDriver StorageDriver,
	fsHandler common.FsHandler,
	globalFsInfo fs.FsInfo,
	poolName string,
	rootfsStorageDir string,
	zfsParent string,
) error {
	mi, err := machineInfoFactory.GetMachineInfo()
	if err != nil {
		return err
	}

	if metrics.Has(container.DiskIOMetrics) {
		common.AssignDeviceNamesToDiskStats((*common.MachineInfoNamer)(mi), &stats.DiskIo)
	}

	if metrics.Has(container.DiskUsageMetrics) {
		var device string
		switch storageDriver {
		case DevicemapperStorageDriver:
			device = poolName
		case AufsStorageDriver, OverlayStorageDriver, Overlay2StorageDriver, VfsStorageDriver:
			deviceInfo, err := globalFsInfo.GetDirFsDevice(rootfsStorageDir)
			if err != nil {
				return fmt.Errorf("unable to determine device info for dir: %v: %v", rootfsStorageDir, err)
			}
			device = deviceInfo.Device
		case ZfsStorageDriver:
			device = zfsParent
		default:
			return nil
		}

		for _, fs := range mi.Filesystems {
			if fs.Device == device {
				usage := fsHandler.Usage()
				fsStat := info.FsStats{
					Device:    device,
					Type:      fs.Type,
					Limit:     fs.Capacity,
					BaseUsage: usage.BaseUsageBytes,
					Usage:     usage.TotalUsageBytes,
					Inodes:    usage.InodeUsage,
				}
				fileSystems, err := globalFsInfo.GetGlobalFsInfo()
				if err != nil {
					return fmt.Errorf("unable to obtain diskstats for filesystem %s: %v", fsStat.Device, err)
				}
				addDiskStats(fileSystems, &fs, &fsStat)
				stats.Filesystem = append(stats.Filesystem, fsStat)
				break
			}
		}
	}

	return nil
}