-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrunner.go
57 lines (50 loc) · 1.31 KB
/
runner.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
package runner
import (
"iptables-logger/merger"
"iptables-logger/parser"
"os"
"code.cloudfoundry.org/lager"
"github.com/hpcloud/tail"
)
//go:generate counterfeiter -o fakes/log_merger.go --fake-name LogMerger . logMerger
type logMerger interface {
Merge(parser.ParsedData) (merger.IPTablesLogData, error)
}
//go:generate counterfeiter -o fakes/kernel_log_parser.go --fake-name KernelLogParser . kernelLogParser
type kernelLogParser interface {
IsIPTablesLogData(line string) bool
Parse(line string) parser.ParsedData
}
type Runner struct {
Lines chan *tail.Line
Parser kernelLogParser
Merger logMerger
Logger lager.Logger
IPTablesLogger lager.Logger
}
func (r *Runner) Run(signals <-chan os.Signal, ready chan<- struct{}) error {
close(ready)
r.Logger.Info("started", lager.Data{})
for {
select {
case <-signals:
r.Logger.Info("exited", lager.Data{})
return nil
case line := <-r.Lines:
if line.Err != nil {
r.Logger.Error("tail-kernel-logs", line.Err)
continue
}
if r.Parser.IsIPTablesLogData(line.Text) {
parsed := r.Parser.Parse(line.Text)
merged, err := r.Merger.Merge(parsed)
if err != nil {
r.Logger.Error("merge-kernel-logs", err)
continue
}
r.IPTablesLogger.Info(merged.Message, merged.Data)
}
}
}
return nil
}