-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain_process.go
100 lines (80 loc) · 2.42 KB
/
main_process.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
package webhookdocker
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/logocomune/webhookdocker/container"
"github.com/logocomune/webhookdocker/message"
"github.com/logocomune/webhookdocker/processor"
"github.com/logocomune/webhookdocker/webhook"
)
const (
httpClientTimeOut = 3 * time.Second
aggregationTime = 3 * time.Second
)
type sender interface {
Send(events map[string]message.ContainerEventsGroup)
}
func MainProcess(cfg CommonCfg, kb Keybase, sl Slack, ex WebEx, appVersion, builtDate string) error {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
shutdown := make(chan os.Signal, 1)
signal.Notify(shutdown, os.Interrupt, syscall.SIGTERM, syscall.SIGQUIT)
defer func() {
signal.Stop(shutdown)
cancel()
}()
go func() {
select {
case <-shutdown:
log.Println("Shutdown request")
cancel()
case <-ctx.Done():
}
}()
nodeName := getNodeName(cfg)
formatter, err := message.New(nodeName)
if err != nil {
log.Fatalln("formatter error", err)
}
var wbSender sender
if kb.Endpoint != "" {
wbSender = webhook.NewKB(kb.Endpoint, httpClientTimeOut, cfg.Docker.ExternalInstanceInspection)
}
if sl.Endpoint != "" {
wbSender = webhook.NewSlack(sl.Endpoint, httpClientTimeOut, cfg.Docker.ExternalInstanceInspection)
}
if ex.Endpoint != "" {
wbSender = webhook.NewWebEx(ex.Endpoint, httpClientTimeOut, cfg.Docker.ExternalInstanceInspection)
}
if wbSender == nil {
log.Fatalln("No endpoint chosen")
}
processor := processor.NewProcessor(ctx, aggregationTime, formatter, wbSender)
return container.DockerEvents(ctx, processor.Q, container.DockerCfg{
ContainerEvents: cfg.Docker.Listen.ContainerEvents,
VolumeEvents: cfg.Docker.Listen.VolumeEvents,
NetworkEvents: cfg.Docker.Listen.ContainerEvents,
ShowRunning: cfg.Docker.ShowRunning,
ContainerActions: cfg.Docker.Listen.ContainerActions,
NetworkActions: cfg.Docker.Listen.NetworkActions,
VolumeActions: cfg.Docker.Listen.VolumeActions,
FilterName: cfg.Docker.Filter.ContainerName,
NegateFilterName: cfg.Docker.Filter.NegateContainerName,
FilterImage: cfg.Docker.Filter.ImageName,
NegateFilterImage: cfg.Docker.Filter.NegateImageName,
}, appVersion, builtDate)
}
func getNodeName(cfg CommonCfg) string {
nodeName := ""
if !cfg.HideNodeName {
nodeName = cfg.NodeName
if nodeName == "" {
nodeName, _ = os.Hostname()
}
}
return nodeName
}