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
}