github.com/circular-dark/docker@v1.7.0/api/client/events.go (about) 1 package client 2 3 import ( 4 "net/url" 5 6 "github.com/docker/docker/opts" 7 flag "github.com/docker/docker/pkg/mflag" 8 "github.com/docker/docker/pkg/parsers/filters" 9 "github.com/docker/docker/pkg/timeutils" 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", "", "Get real time events from the server", true) 17 since := cmd.String([]string{"#since", "-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 var ( 26 v = url.Values{} 27 eventFilterArgs = filters.Args{} 28 ) 29 30 // Consolidate all filter flags, and sanity check them early. 31 // They'll get process in the daemon/server. 32 for _, f := range flFilter.GetAll() { 33 var err error 34 eventFilterArgs, err = filters.ParseFlag(f, eventFilterArgs) 35 if err != nil { 36 return err 37 } 38 } 39 if *since != "" { 40 v.Set("since", timeutils.GetTimestamp(*since)) 41 } 42 if *until != "" { 43 v.Set("until", timeutils.GetTimestamp(*until)) 44 } 45 if len(eventFilterArgs) > 0 { 46 filterJSON, err := filters.ToParam(eventFilterArgs) 47 if err != nil { 48 return err 49 } 50 v.Set("filters", filterJSON) 51 } 52 sopts := &streamOpts{ 53 rawTerminal: true, 54 out: cli.out, 55 } 56 if err := cli.stream("GET", "/events?"+v.Encode(), sopts); err != nil { 57 return err 58 } 59 return nil 60 }