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