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  }