github.com/docker/containerd@v0.2.9-0.20170509230648-8ef7df579710/ctr/events.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "text/tabwriter" 7 "time" 8 9 "github.com/urfave/cli" 10 "github.com/containerd/containerd/api/grpc/types" 11 "github.com/golang/protobuf/ptypes" 12 netcontext "golang.org/x/net/context" 13 ) 14 15 var eventsCommand = cli.Command{ 16 Name: "events", 17 Usage: "receive events from the containerd daemon", 18 Flags: []cli.Flag{ 19 cli.StringFlag{ 20 Name: "timestamp,t", 21 Usage: "get events from a specific time stamp in RFC3339Nano format", 22 }, 23 }, 24 Action: func(context *cli.Context) { 25 var ( 26 t = time.Time{} 27 c = getClient(context) 28 ) 29 if ts := context.String("timestamp"); ts != "" { 30 from, err := time.Parse(time.RFC3339Nano, ts) 31 if err != nil { 32 fatal(err.Error(), 1) 33 } 34 t = from 35 } 36 tsp, err := ptypes.TimestampProto(t) 37 if err != nil { 38 fatal(err.Error(), 1) 39 } 40 events, err := c.Events(netcontext.Background(), &types.EventsRequest{ 41 Timestamp: tsp, 42 }) 43 if err != nil { 44 fatal(err.Error(), 1) 45 } 46 w := tabwriter.NewWriter(os.Stdout, 31, 1, 1, ' ', 0) 47 fmt.Fprint(w, "TIME\tTYPE\tID\tPID\tSTATUS\n") 48 w.Flush() 49 for { 50 e, err := events.Recv() 51 if err != nil { 52 fatal(err.Error(), 1) 53 } 54 t, err := ptypes.Timestamp(e.Timestamp) 55 if err != nil { 56 fmt.Fprintf(os.Stderr, "Unable to convert timestamp") 57 t = time.Time{} 58 } 59 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%d\n", t.Format(time.RFC3339Nano), e.Type, e.Id, e.Pid, e.Status) 60 w.Flush() 61 } 62 }, 63 }