github.com/georgethebeatle/containerd@v0.2.5/ctr/events.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"text/tabwriter"
     7  	"time"
     8  
     9  	"github.com/codegangsta/cli"
    10  	"github.com/docker/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  }