github.com/olljanat/moby@v1.13.1/cli/command/system/df.go (about)

     1  package system
     2  
     3  import (
     4  	"github.com/docker/docker/cli"
     5  	"github.com/docker/docker/cli/command"
     6  	"github.com/docker/docker/cli/command/formatter"
     7  	"github.com/spf13/cobra"
     8  	"golang.org/x/net/context"
     9  )
    10  
    11  type diskUsageOptions struct {
    12  	verbose bool
    13  }
    14  
    15  // NewDiskUsageCommand creates a new cobra.Command for `docker df`
    16  func NewDiskUsageCommand(dockerCli *command.DockerCli) *cobra.Command {
    17  	var opts diskUsageOptions
    18  
    19  	cmd := &cobra.Command{
    20  		Use:   "df [OPTIONS]",
    21  		Short: "Show docker disk usage",
    22  		Args:  cli.NoArgs,
    23  		RunE: func(cmd *cobra.Command, args []string) error {
    24  			return runDiskUsage(dockerCli, opts)
    25  		},
    26  		Tags: map[string]string{"version": "1.25"},
    27  	}
    28  
    29  	flags := cmd.Flags()
    30  
    31  	flags.BoolVarP(&opts.verbose, "verbose", "v", false, "Show detailed information on space usage")
    32  
    33  	return cmd
    34  }
    35  
    36  func runDiskUsage(dockerCli *command.DockerCli, opts diskUsageOptions) error {
    37  	du, err := dockerCli.Client().DiskUsage(context.Background())
    38  	if err != nil {
    39  		return err
    40  	}
    41  
    42  	duCtx := formatter.DiskUsageContext{
    43  		Context: formatter.Context{
    44  			Output: dockerCli.Out(),
    45  		},
    46  		LayersSize: du.LayersSize,
    47  		Images:     du.Images,
    48  		Containers: du.Containers,
    49  		Volumes:    du.Volumes,
    50  		Verbose:    opts.verbose,
    51  	}
    52  
    53  	duCtx.Write()
    54  
    55  	return nil
    56  }