pkg/exporter/sink/sink.go (28 lines of code) (raw):
package sink
import (
"fmt"
"github.com/alibaba/kubeskoop/pkg/exporter/nettop"
"github.com/alibaba/kubeskoop/pkg/exporter/probe"
)
const (
Stderr = "stderr"
File = "file"
Loki = "loki"
)
type Sink interface {
Write(event *probe.Event) error
}
func CreateSink(name string, args interface{}) (Sink, error) {
//TODO create with register and reflect
argsMap, _ := args.(map[string]interface{})
switch name {
case Stderr:
return NewStderrSink(), nil
case Loki:
addr := argsMap["addr"].(string)
return NewLokiSink(addr, nettop.GetNodeName())
case File:
path := argsMap["path"].(string)
return NewFileSink(path)
}
return nil, fmt.Errorf("unknown sink type %s", name)
}