Browse code

allow 2 docker events to be opened on the same computer over unix socket

Docker-DCO-1.1-Signed-off-by: Victor Vieux <vieux@docker.com> (github: vieux)

Victor Vieux authored on 2014/05/16 08:27:36
Showing 3 changed files
... ...
@@ -244,7 +244,7 @@ func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWrite
244 244
 		return err
245 245
 	}
246 246
 
247
-	var job = eng.Job("events", r.RemoteAddr)
247
+	var job = eng.Job("events")
248 248
 	streamJSON(job, w, true)
249 249
 	job.Setenv("since", r.Form.Get("since"))
250 250
 	job.Setenv("until", r.Form.Get("until"))
... ...
@@ -198,7 +198,7 @@ func (srv *Server) ContainerKill(job *engine.Job) engine.Status {
198 198
 	return engine.StatusOK
199 199
 }
200 200
 
201
-func (srv *Server) EvictListener(from string) {
201
+func (srv *Server) EvictListener(from int64) {
202 202
 	srv.Lock()
203 203
 	if old, ok := srv.listeners[from]; ok {
204 204
 		delete(srv.listeners, from)
... ...
@@ -208,12 +208,12 @@ func (srv *Server) EvictListener(from string) {
208 208
 }
209 209
 
210 210
 func (srv *Server) Events(job *engine.Job) engine.Status {
211
-	if len(job.Args) != 1 {
212
-		return job.Errorf("Usage: %s FROM", job.Name)
211
+	if len(job.Args) != 0 {
212
+		return job.Errorf("Usage: %s", job.Name)
213 213
 	}
214 214
 
215 215
 	var (
216
-		from    = job.Args[0]
216
+		from    = time.Now().UTC().UnixNano()
217 217
 		since   = job.GetenvInt64("since")
218 218
 		until   = job.GetenvInt64("until")
219 219
 		timeout = time.NewTimer(time.Unix(until, 0).Sub(time.Now()))
... ...
@@ -2432,7 +2432,7 @@ func NewServer(eng *engine.Engine, config *daemonconfig.Config) (*Server, error)
2432 2432
 		pullingPool: make(map[string]chan struct{}),
2433 2433
 		pushingPool: make(map[string]chan struct{}),
2434 2434
 		events:      make([]utils.JSONMessage, 0, 64), //only keeps the 64 last events
2435
-		listeners:   make(map[string]chan utils.JSONMessage),
2435
+		listeners:   make(map[int64]chan utils.JSONMessage),
2436 2436
 		running:     true,
2437 2437
 	}
2438 2438
 	daemon.SetServer(srv)
... ...
@@ -2494,7 +2494,7 @@ type Server struct {
2494 2494
 	pullingPool map[string]chan struct{}
2495 2495
 	pushingPool map[string]chan struct{}
2496 2496
 	events      []utils.JSONMessage
2497
-	listeners   map[string]chan utils.JSONMessage
2497
+	listeners   map[int64]chan utils.JSONMessage
2498 2498
 	Eng         *engine.Engine
2499 2499
 	running     bool
2500 2500
 }
... ...
@@ -1,9 +1,10 @@
1 1
 package server
2 2
 
3 3
 import (
4
-	"github.com/dotcloud/docker/utils"
5 4
 	"testing"
6 5
 	"time"
6
+
7
+	"github.com/dotcloud/docker/utils"
7 8
 )
8 9
 
9 10
 func TestPools(t *testing.T) {
... ...
@@ -47,14 +48,14 @@ func TestPools(t *testing.T) {
47 47
 func TestLogEvent(t *testing.T) {
48 48
 	srv := &Server{
49 49
 		events:    make([]utils.JSONMessage, 0, 64),
50
-		listeners: make(map[string]chan utils.JSONMessage),
50
+		listeners: make(map[int64]chan utils.JSONMessage),
51 51
 	}
52 52
 
53 53
 	srv.LogEvent("fakeaction", "fakeid", "fakeimage")
54 54
 
55 55
 	listener := make(chan utils.JSONMessage)
56 56
 	srv.Lock()
57
-	srv.listeners["test"] = listener
57
+	srv.listeners[1337] = listener
58 58
 	srv.Unlock()
59 59
 
60 60
 	srv.LogEvent("fakeaction2", "fakeid", "fakeimage")