mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
![Roman Volosatovs](/assets/img/avatar_default.png)
This makes it easier to add more options to the backend without having to change the signature. While we're changing the signature, also adding a context.Context, which is not currently used, but probably should be at some point. Signed-off-by: Roman Volosatovs <roman.volosatovs@docker.com>
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
package daemon // import "github.com/docker/docker/daemon"
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync/atomic"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/api/types/filters"
|
|
)
|
|
|
|
// SystemDiskUsage returns information about the daemon data disk usage
|
|
func (daemon *Daemon) SystemDiskUsage(ctx context.Context) (*types.DiskUsage, error) {
|
|
if !atomic.CompareAndSwapInt32(&daemon.diskUsageRunning, 0, 1) {
|
|
return nil, fmt.Errorf("a disk usage operation is already running")
|
|
}
|
|
defer atomic.StoreInt32(&daemon.diskUsageRunning, 0)
|
|
|
|
// Retrieve container list
|
|
allContainers, err := daemon.Containers(&types.ContainerListOptions{
|
|
Size: true,
|
|
All: true,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to retrieve container list: %v", err)
|
|
}
|
|
|
|
// Get all top images with extra attributes
|
|
allImages, err := daemon.imageService.Images(ctx, types.ImageListOptions{
|
|
Filters: filters.NewArgs(),
|
|
SharedSize: true,
|
|
ContainerCount: true,
|
|
})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to retrieve image list: %v", err)
|
|
}
|
|
|
|
localVolumes, err := daemon.volumes.LocalVolumesSize(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
allLayersSize, err := daemon.imageService.LayerDiskUsage(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &types.DiskUsage{
|
|
LayersSize: allLayersSize,
|
|
Containers: allContainers,
|
|
Volumes: localVolumes,
|
|
Images: allImages,
|
|
}, nil
|
|
}
|