Skip to content

Commit 11c4cc9

Browse files
committed
Implement docker events with standalone client lib.
Signed-off-by: David Calavera <david.calavera@gmail.com>
1 parent e562ac4 commit 11c4cc9

File tree

2 files changed

+66
-35
lines changed

2 files changed

+66
-35
lines changed

api/client/events.go

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package client
22

33
import (
4-
"net/url"
5-
"time"
6-
4+
"github.com/docker/docker/api/client/lib"
75
Cli "github.com/docker/docker/cli"
86
"github.com/docker/docker/opts"
7+
"github.com/docker/docker/pkg/jsonmessage"
98
flag "github.com/docker/docker/pkg/mflag"
109
"github.com/docker/docker/pkg/parsers/filters"
11-
"github.com/docker/docker/pkg/timeutils"
1210
)
1311

1412
// CmdEvents prints a live stream of real time events from the server.
@@ -24,10 +22,7 @@ func (cli *DockerCli) CmdEvents(args ...string) error {
2422

2523
cmd.ParseFlags(args, true)
2624

27-
var (
28-
v = url.Values{}
29-
eventFilterArgs = filters.NewArgs()
30-
)
25+
eventFilterArgs := filters.NewArgs()
3126

3227
// Consolidate all filter flags, and sanity check them early.
3328
// They'll get process in the daemon/server.
@@ -38,34 +33,18 @@ func (cli *DockerCli) CmdEvents(args ...string) error {
3833
return err
3934
}
4035
}
41-
ref := time.Now()
42-
if *since != "" {
43-
ts, err := timeutils.GetTimestamp(*since, ref)
44-
if err != nil {
45-
return err
46-
}
47-
v.Set("since", ts)
48-
}
49-
if *until != "" {
50-
ts, err := timeutils.GetTimestamp(*until, ref)
51-
if err != nil {
52-
return err
53-
}
54-
v.Set("until", ts)
55-
}
56-
if eventFilterArgs.Len() > 0 {
57-
filterJSON, err := filters.ToParam(eventFilterArgs)
58-
if err != nil {
59-
return err
60-
}
61-
v.Set("filters", filterJSON)
62-
}
63-
sopts := &streamOpts{
64-
rawTerminal: true,
65-
out: cli.out,
36+
37+
options := lib.EventsOptions{
38+
Since: *since,
39+
Until: *until,
40+
Filters: eventFilterArgs,
6641
}
67-
if _, err := cli.stream("GET", "/events?"+v.Encode(), sopts); err != nil {
42+
43+
responseBody, err := cli.client.Events(options)
44+
if err != nil {
6845
return err
6946
}
70-
return nil
47+
defer responseBody.Close()
48+
49+
return jsonmessage.DisplayJSONMessagesStream(responseBody, cli.out, cli.outFd, cli.isTerminalOut)
7150
}

api/client/lib/events.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package lib
2+
3+
import (
4+
"io"
5+
"net/url"
6+
"time"
7+
8+
"github.com/docker/docker/pkg/parsers/filters"
9+
"github.com/docker/docker/pkg/timeutils"
10+
)
11+
12+
// EventsOptions hold parameters to filter events with.
13+
type EventsOptions struct {
14+
Since string
15+
Until string
16+
Filters filters.Args
17+
}
18+
19+
// Events returns a stream of events in the daemon in a ReadCloser.
20+
// It's up to the caller to close the stream.
21+
func (cli *Client) Events(options EventsOptions) (io.ReadCloser, error) {
22+
var query url.Values
23+
ref := time.Now()
24+
25+
if options.Since != "" {
26+
ts, err := timeutils.GetTimestamp(options.Since, ref)
27+
if err != nil {
28+
return nil, err
29+
}
30+
query.Set("since", ts)
31+
}
32+
if options.Until != "" {
33+
ts, err := timeutils.GetTimestamp(options.Until, ref)
34+
if err != nil {
35+
return nil, err
36+
}
37+
query.Set("until", ts)
38+
}
39+
if options.Filters.Len() > 0 {
40+
filterJSON, err := filters.ToParam(options.Filters)
41+
if err != nil {
42+
return nil, err
43+
}
44+
query.Set("filters", filterJSON)
45+
}
46+
47+
serverResponse, err := cli.GET("/events", query, nil)
48+
if err != nil {
49+
return nil, err
50+
}
51+
return serverResponse.body, nil
52+
}

0 commit comments

Comments
 (0)