Fix system df inconsistent

Use RWSzir as system df verbose containers size to remain consistent with the summery. Volume is reclaimable only if not used by container.

Signed-off-by: Qi Wang <qiwan@redhat.com>
This commit is contained in:
Qi Wang
2020-09-04 11:08:45 -04:00
parent fa487a6522
commit f6a988547b
3 changed files with 16 additions and 10 deletions

View File

@ -134,7 +134,7 @@ func printSummary(reports *entities.SystemDfReport, userFormat string) error {
for _, v := range reports.Volumes { for _, v := range reports.Volumes {
activeVolumes += v.Links activeVolumes += v.Links
volumesSize += v.Size volumesSize += v.Size
volumesReclaimable += v.Size volumesReclaimable += v.ReclaimableSize
} }
volumeSummary := dfSummary{ volumeSummary := dfSummary{
Type: "Local Volumes", Type: "Local Volumes",
@ -182,7 +182,7 @@ func printVerbose(reports *entities.SystemDfReport) error {
dfContainers = append(dfContainers, &dfContainer{SystemDfContainerReport: d}) dfContainers = append(dfContainers, &dfContainer{SystemDfContainerReport: d})
} }
containerHeaders := "CONTAINER ID\tIMAGE\tCOMMAND\tLOCAL VOLUMES\tSIZE\tCREATED\tSTATUS\tNAMES\n" containerHeaders := "CONTAINER ID\tIMAGE\tCOMMAND\tLOCAL VOLUMES\tSIZE\tCREATED\tSTATUS\tNAMES\n"
containerRow := "{{.ContainerID}}\t{{.Image}}\t{{.Command}}\t{{.LocalVolumes}}\t{{.Size}}\t{{.Created}}\t{{.Status}}\t{{.Names}}\n" containerRow := "{{.ContainerID}}\t{{.Image}}\t{{.Command}}\t{{.LocalVolumes}}\t{{.RWSize}}\t{{.Created}}\t{{.Status}}\t{{.Names}}\n"
format = containerHeaders + "{{range . }}" + containerRow + "{{end}}" format = containerHeaders + "{{range . }}" + containerRow + "{{end}}"
if err := writeTemplate(w, format, dfContainers); err != nil { if err := writeTemplate(w, format, dfContainers); err != nil {
return nil return nil
@ -257,8 +257,8 @@ func (d *dfContainer) Command() string {
return strings.Join(d.SystemDfContainerReport.Command, " ") return strings.Join(d.SystemDfContainerReport.Command, " ")
} }
func (d *dfContainer) Size() string { func (d *dfContainer) RWSize() string {
return units.HumanSize(float64(d.SystemDfContainerReport.Size)) return units.HumanSize(float64(d.SystemDfContainerReport.RWSize))
} }
func (d *dfContainer) Created() string { func (d *dfContainer) Created() string {

View File

@ -75,9 +75,10 @@ type SystemDfContainerReport struct {
// SystemDfVolumeReport describes a volume and its size // SystemDfVolumeReport describes a volume and its size
type SystemDfVolumeReport struct { type SystemDfVolumeReport struct {
VolumeName string VolumeName string
Links int Links int
Size int64 Size int64
ReclaimableSize int64
} }
// SystemResetOptions describes the options for resetting your // SystemResetOptions describes the options for resetting your

View File

@ -313,6 +313,7 @@ func (ic *ContainerEngine) SystemDf(ctx context.Context, options entities.System
} }
dfVolumes := make([]*entities.SystemDfVolumeReport, 0, len(vols)) dfVolumes := make([]*entities.SystemDfVolumeReport, 0, len(vols))
var reclaimableSize int64
for _, v := range vols { for _, v := range vols {
var consInUse int var consInUse int
volSize, err := sizeOfPath(v.MountPoint()) volSize, err := sizeOfPath(v.MountPoint())
@ -323,15 +324,19 @@ func (ic *ContainerEngine) SystemDf(ctx context.Context, options entities.System
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(inUse) == 0 {
reclaimableSize += volSize
}
for _, viu := range inUse { for _, viu := range inUse {
if util.StringInSlice(viu, runningContainers) { if util.StringInSlice(viu, runningContainers) {
consInUse++ consInUse++
} }
} }
report := entities.SystemDfVolumeReport{ report := entities.SystemDfVolumeReport{
VolumeName: v.Name(), VolumeName: v.Name(),
Links: consInUse, Links: consInUse,
Size: volSize, Size: volSize,
ReclaimableSize: reclaimableSize,
} }
dfVolumes = append(dfVolumes, &report) dfVolumes = append(dfVolumes, &report)
} }