github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/cmd/agent/daemon/state/exporter.go (about) 1 package state 2 3 import ( 4 "context" 5 6 castpb "github.com/castai/kvisor/api/v1/runtime" 7 "github.com/castai/kvisor/pkg/logging" 8 "golang.org/x/sync/errgroup" 9 ) 10 11 func NewExporters(log *logging.Logger) *Exporters { 12 return &Exporters{ 13 log: log.WithField("component", "exporters"), 14 } 15 } 16 17 type Exporters struct { 18 log *logging.Logger 19 20 Events []EventsExporter 21 ContainerStats []ContainerStatsExporter 22 Netflow []NetflowExporter 23 } 24 25 func (e *Exporters) Empty() bool { 26 return len(e.Events) == 0 && len(e.ContainerStats) == 0 && len(e.Netflow) == 0 27 } 28 29 func (e *Exporters) Run(ctx context.Context) error { 30 e.log.Infof("running") 31 defer e.log.Infof("stopping") 32 33 errg, ctx := errgroup.WithContext(ctx) 34 for _, exp := range e.Events { 35 exp := exp 36 errg.Go(func() error { 37 return exp.Run(ctx) 38 }) 39 } 40 for _, exp := range e.ContainerStats { 41 exp := exp 42 errg.Go(func() error { 43 return exp.Run(ctx) 44 }) 45 } 46 for _, exp := range e.Netflow { 47 exp := exp 48 errg.Go(func() error { 49 return exp.Run(ctx) 50 }) 51 } 52 return errg.Wait() 53 } 54 55 type DataExporter interface { 56 Run(ctx context.Context) error 57 } 58 59 type EventsExporter interface { 60 DataExporter 61 Enqueue(e *castpb.Event) 62 } 63 64 type ContainerStatsExporter interface { 65 DataExporter 66 Enqueue(e *castpb.ContainerStatsBatch) 67 } 68 69 type NetflowExporter interface { 70 DataExporter 71 Enqueue(e *castpb.Netflow) 72 }