mirror of
https://github.com/resmoio/kubernetes-event-exporter.git
synced 2026-02-14 14:39:50 +00:00
* Updated packages, tidied and changed package name from opsgenie to resmoio * Handle removal of clusterName from API and leader election api change * Update Dockerfile Go to 1.19 * Test case for parsing minCount properly for #43 * more extensive test case to also match apiVersion config
75 lines
1.5 KiB
Go
75 lines
1.5 KiB
Go
package sinks
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/aws/session"
|
|
"github.com/aws/aws-sdk-go/service/firehose"
|
|
"github.com/resmoio/kubernetes-event-exporter/pkg/kube"
|
|
)
|
|
|
|
type FirehoseConfig struct {
|
|
DeliveryStreamName string `yaml:"deliveryStreamName"`
|
|
Region string `yaml:"region"`
|
|
Layout map[string]interface{} `yaml:"layout"`
|
|
// DeDot all labels and annotations in the event. For both the event and the involvedObject
|
|
DeDot bool `yaml:"deDot"`
|
|
}
|
|
|
|
type FirehoseSink struct {
|
|
cfg *FirehoseConfig
|
|
svc *firehose.Firehose
|
|
}
|
|
|
|
func NewFirehoseSink(cfg *FirehoseConfig) (Sink, error) {
|
|
sess, err := session.NewSession(&aws.Config{
|
|
Region: aws.String(cfg.Region)},
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &FirehoseSink{
|
|
cfg: cfg,
|
|
svc: firehose.New(sess),
|
|
}, nil
|
|
}
|
|
|
|
func (f *FirehoseSink) Send(ctx context.Context, ev *kube.EnhancedEvent) error {
|
|
var toSend []byte
|
|
|
|
if f.cfg.DeDot {
|
|
de := ev.DeDot()
|
|
ev = &de
|
|
}
|
|
|
|
if f.cfg.Layout != nil {
|
|
res, err := convertLayoutTemplate(f.cfg.Layout, ev)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
toSend, err = json.Marshal(res)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
toSend = ev.ToJSON()
|
|
}
|
|
|
|
_, err := f.svc.PutRecord(&firehose.PutRecordInput{
|
|
Record: &firehose.Record{
|
|
Data: toSend,
|
|
},
|
|
DeliveryStreamName: aws.String(f.cfg.DeliveryStreamName),
|
|
})
|
|
|
|
return err
|
|
}
|
|
|
|
func (f *FirehoseSink) Close() {
|
|
// No-op
|
|
}
|