forked from opsgenie/kubernetes-event-exporter
/
stdout.go
59 lines (47 loc) · 1.03 KB
/
stdout.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
package sinks
import (
"context"
"encoding/json"
"io"
"log"
"os"
"github.com/resmoio/kubernetes-event-exporter/pkg/kube"
)
type StdoutConfig struct {
// DeDot all labels and annotations in the event. For both the event and the involvedObject
DeDot bool `yaml:"deDot"`
Layout map[string]interface{} `yaml:"layout"`
}
func (f *StdoutConfig) Validate() error {
return nil
}
type Stdout struct {
writer io.Writer
encoder *json.Encoder
cfg *StdoutConfig
}
func NewStdoutSink(config *StdoutConfig) (*Stdout, error) {
logger := log.New(os.Stdout, "", 0)
writer := logger.Writer()
return &Stdout{
writer: writer,
encoder: json.NewEncoder(writer),
cfg: config,
}, nil
}
func (f *Stdout) Close() {
}
func (f *Stdout) Send(ctx context.Context, ev *kube.EnhancedEvent) error {
if f.cfg.DeDot {
de := ev.DeDot()
ev = &de
}
if f.cfg.Layout == nil {
return f.encoder.Encode(ev)
}
res, err := convertLayoutTemplate(f.cfg.Layout, ev)
if err != nil {
return err
}
return f.encoder.Encode(res)
}