Skip to content

Commit 64d297a

Browse files
committed
refactor: use go-dockerclient builtin event filtering
1 parent c1fe0f3 commit 64d297a

File tree

2 files changed

+13
-21
lines changed

2 files changed

+13
-21
lines changed

internal/generator/generator.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"os"
77
"os/exec"
88
"os/signal"
9-
"slices"
109
"strings"
1110
"sync"
1211
"syscall"
@@ -250,7 +249,14 @@ func (g *generator) generateFromEvents() {
250249
break
251250
}
252251
if !watching {
253-
err := client.AddEventListener(eventChan)
252+
options := docker.EventsOptions{
253+
Filters: map[string][]string{
254+
"event": {"start", "stop", "die", "health_status", "connect", "disconnect"},
255+
"type": {"container", "network"},
256+
},
257+
}
258+
259+
err := client.AddEventListenerWithOptions(options, eventChan)
254260
if err != nil && err != docker.ErrListenerAlreadyExists {
255261
log.Printf("Error registering docker event listener: %s", err)
256262
time.Sleep(10 * time.Second)
@@ -283,23 +289,10 @@ func (g *generator) generateFromEvents() {
283289
break
284290
}
285291

286-
watchedEvent := false
287-
288-
switch event.Type {
289-
case "container":
290-
watchedContainerActions := []string{"start", "stop", "die", "health_status"}
291-
watchedEvent = slices.Contains(watchedContainerActions, event.Action)
292-
case "network":
293-
watchedNetworkActions := []string{"connect", "disconnect"}
294-
watchedEvent = slices.Contains(watchedNetworkActions, event.Action)
295-
}
296-
297-
if watchedEvent {
298-
log.Printf("Received event %s for %s %s", event.Action, event.Type, event.Actor.ID[:12])
299-
// fanout event to all watchers
300-
for _, watcher := range watchers {
301-
watcher <- event
302-
}
292+
log.Printf("Received event %s for %s %s", event.Action, event.Type, event.Actor.ID[:12])
293+
// fanout event to all watchers
294+
for _, watcher := range watchers {
295+
watcher <- event
303296
}
304297
case <-time.After(10 * time.Second):
305298
// check for docker liveness

internal/generator/generator_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ func TestGenerateFromEvents(t *testing.T) {
2828
eventsResponse := `
2929
{"Type":"container","Action":"start","Actor": {"ID":"8dfafdbc3a40"},"Time":1374067924}
3030
{"Type":"container","Action":"stop","Actor": {"ID":"8dfafdbc3a40"},"Time":1374067966}
31-
{"Type":"container","Action":"start","Actor": {"ID":"8dfafdbc3a40"},"Time":1374067970}
32-
{"Type":"container","Action":"destroy","Actor": {"ID":"8dfafdbc3a40"},"Time":1374067990}`
31+
{"Type":"container","Action":"start","Actor": {"ID":"8dfafdbc3a40"},"Time":1374067970}`
3332
infoResponse := `{"Containers":1,"Images":1,"Debug":false,"NFd":11,"NGoroutines":21,"MemoryLimit":true,"SwapLimit":false}`
3433
versionResponse := `{"Version":"19.03.12","Os":"Linux","KernelVersion":"4.19.76-linuxkit","GoVersion":"go1.13.14","GitCommit":"48a66213fe","Arch":"amd64","ApiVersion":"1.40"}`
3534

0 commit comments

Comments
 (0)