This repository has been archived by the owner on Jun 18, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 64
/
entry.go
106 lines (90 loc) · 2.57 KB
/
entry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package events
import (
"github.com/docker/distribution/context"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
"github.com/rancher/agent/service/hostapi/config"
"github.com/rancher/agent/service/hostapi/util"
rclient "github.com/rancher/go-rancher/client"
)
const (
simulatedEvent = "-simulated-"
)
func NewDockerEventsProcessor(poolSize int) *DockerEventsProcessor {
return &DockerEventsProcessor{
poolSize: poolSize,
getDockerClient: getDockerClientFn,
getHandlers: getHandlersFn,
getRancherClient: util.GetRancherClient,
}
}
type DockerEventsProcessor struct {
poolSize int
getDockerClient func() (*client.Client, error)
getHandlers func(*client.Client, *rclient.RancherClient) (map[string][]Handler, error)
getRancherClient func() (*rclient.RancherClient, error)
}
func (de *DockerEventsProcessor) Process() error {
dockerClient, err := de.getDockerClient()
if err != nil {
return err
}
rancherClient, err := de.getRancherClient()
if err != nil {
return err
}
handlers, err := de.getHandlers(dockerClient, rancherClient)
if err != nil {
return err
}
router, err := NewEventRouter(de.poolSize, de.poolSize, dockerClient, handlers)
if err != nil {
return err
}
router.Start()
filter := filters.NewArgs()
filter.Add("status", "paused")
filter.Add("status", "running")
listOpts := types.ContainerListOptions{
All: true,
Filter: filter,
}
containers, err := dockerClient.ContainerList(context.Background(), listOpts)
if err != nil {
return err
}
for _, c := range containers {
event := &events.Message{
ID: c.ID,
Status: "start",
From: simulatedEvent,
}
router.listener <- event
}
return nil
}
func getDockerClientFn() (*client.Client, error) {
return NewDockerClient()
}
func getHandlersFn(dockerClient *client.Client, rancherClient *rclient.RancherClient) (map[string][]Handler, error) {
handlers := map[string][]Handler{}
// Rancher Event Handler
if rancherClient != nil {
sendToRancherHandler := &SendToRancherHandler{
client: dockerClient,
rancher: rancherClient,
hostUUID: getHostUUID(),
}
handlers["start"] = append(handlers["start"], sendToRancherHandler)
handlers["stop"] = []Handler{sendToRancherHandler}
handlers["die"] = []Handler{sendToRancherHandler}
handlers["kill"] = []Handler{sendToRancherHandler}
handlers["destroy"] = []Handler{sendToRancherHandler}
}
return handlers, nil
}
func getHostUUID() string {
return config.Config.HostUUID
}