github.com/walkingsparrow/docker@v1.4.2-0.20151218153551-b708a2249bfa/api/client/events.go (about)

     1  package client
     2  
     3  import (
     4  	"github.com/docker/docker/api/types"
     5  	"github.com/docker/docker/api/types/filters"
     6  	Cli "github.com/docker/docker/cli"
     7  	"github.com/docker/docker/opts"
     8  	"github.com/docker/docker/pkg/jsonmessage"
     9  	flag "github.com/docker/docker/pkg/mflag"
    10  )
    11  
    12  // CmdEvents prints a live stream of real time events from the server.
    13  //
    14  // Usage: docker events [OPTIONS]
    15  func (cli *DockerCli) CmdEvents(args ...string) error {
    16  	cmd := Cli.Subcmd("events", nil, Cli.DockerCommands["events"].Description, true)
    17  	since := cmd.String([]string{"-since"}, "", "Show all events created since timestamp")
    18  	until := cmd.String([]string{"-until"}, "", "Stream events until this timestamp")
    19  	flFilter := opts.NewListOpts(nil)
    20  	cmd.Var(&flFilter, []string{"f", "-filter"}, "Filter output based on conditions provided")
    21  	cmd.Require(flag.Exact, 0)
    22  
    23  	cmd.ParseFlags(args, true)
    24  
    25  	eventFilterArgs := filters.NewArgs()
    26  
    27  	// Consolidate all filter flags, and sanity check them early.
    28  	// They'll get process in the daemon/server.
    29  	for _, f := range flFilter.GetAll() {
    30  		var err error
    31  		eventFilterArgs, err = filters.ParseFlag(f, eventFilterArgs)
    32  		if err != nil {
    33  			return err
    34  		}
    35  	}
    36  
    37  	options := types.EventsOptions{
    38  		Since:   *since,
    39  		Until:   *until,
    40  		Filters: eventFilterArgs,
    41  	}
    42  
    43  	responseBody, err := cli.client.Events(options)
    44  	if err != nil {
    45  		return err
    46  	}
    47  	defer responseBody.Close()
    48  
    49  	return jsonmessage.DisplayJSONMessagesStream(responseBody, cli.out, cli.outFd, cli.isTerminalOut)
    50  }