github.com/chenchun/docker@v1.3.2-0.20150629222414-20467faf132b/api/client/events.go (about) 1 package client 2 3 import ( 4 "net/url" 5 "time" 6 7 "github.com/docker/docker/opts" 8 flag "github.com/docker/docker/pkg/mflag" 9 "github.com/docker/docker/pkg/parsers/filters" 10 "github.com/docker/docker/pkg/timeutils" 11 ) 12 13 // CmdEvents prints a live stream of real time events from the server. 14 // 15 // Usage: docker events [OPTIONS] 16 func (cli *DockerCli) CmdEvents(args ...string) error { 17 cmd := cli.Subcmd("events", nil, "Get real time events from the server", true) 18 since := cmd.String([]string{"#since", "-since"}, "", "Show all events created since timestamp") 19 until := cmd.String([]string{"-until"}, "", "Stream events until this timestamp") 20 flFilter := opts.NewListOpts(nil) 21 cmd.Var(&flFilter, []string{"f", "-filter"}, "Filter output based on conditions provided") 22 cmd.Require(flag.Exact, 0) 23 24 cmd.ParseFlags(args, true) 25 26 var ( 27 v = url.Values{} 28 eventFilterArgs = filters.Args{} 29 ) 30 31 // Consolidate all filter flags, and sanity check them early. 32 // They'll get process in the daemon/server. 33 for _, f := range flFilter.GetAll() { 34 var err error 35 eventFilterArgs, err = filters.ParseFlag(f, eventFilterArgs) 36 if err != nil { 37 return err 38 } 39 } 40 ref := time.Now() 41 if *since != "" { 42 v.Set("since", timeutils.GetTimestamp(*since, ref)) 43 } 44 if *until != "" { 45 v.Set("until", timeutils.GetTimestamp(*until, ref)) 46 } 47 if len(eventFilterArgs) > 0 { 48 filterJSON, err := filters.ToParam(eventFilterArgs) 49 if err != nil { 50 return err 51 } 52 v.Set("filters", filterJSON) 53 } 54 sopts := &streamOpts{ 55 rawTerminal: true, 56 out: cli.out, 57 } 58 if _, err := cli.stream("GET", "/events?"+v.Encode(), sopts); err != nil { 59 return err 60 } 61 return nil 62 }