github.com/argoproj/argo-events@v1.9.1/sensors/cmd/start.go (about)

     1  package cmd
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/json"
     6  	"fmt"
     7  	"os"
     8  
     9  	"go.uber.org/zap"
    10  	"k8s.io/client-go/dynamic"
    11  	"k8s.io/client-go/kubernetes"
    12  	"sigs.k8s.io/controller-runtime/pkg/manager/signals"
    13  
    14  	argoevents "github.com/argoproj/argo-events"
    15  	"github.com/argoproj/argo-events/common"
    16  	"github.com/argoproj/argo-events/common/logging"
    17  	"github.com/argoproj/argo-events/metrics"
    18  	eventbusv1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1"
    19  	v1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
    20  	"github.com/argoproj/argo-events/sensors"
    21  )
    22  
    23  func Start() {
    24  	logger := logging.NewArgoEventsLogger().Named("sensor")
    25  	kubeConfig, _ := os.LookupEnv(common.EnvVarKubeConfig)
    26  	restConfig, err := common.GetClientConfig(kubeConfig)
    27  	if err != nil {
    28  		logger.Fatalw("failed to get kubeconfig", zap.Error(err))
    29  	}
    30  	kubeClient := kubernetes.NewForConfigOrDie(restConfig)
    31  	encodedSensorSpec, defined := os.LookupEnv(common.EnvVarSensorObject)
    32  	if !defined {
    33  		logger.Fatalf("required environment variable '%s' not defined", common.EnvVarSensorObject)
    34  	}
    35  	sensorSpec, err := base64.StdEncoding.DecodeString(encodedSensorSpec)
    36  	if err != nil {
    37  		logger.Fatalw("failed to decode sensor string", zap.Error(err))
    38  	}
    39  	sensor := &v1alpha1.Sensor{}
    40  	if err = json.Unmarshal(sensorSpec, sensor); err != nil {
    41  		logger.Fatalw("failed to unmarshal sensor object", zap.Error(err))
    42  	}
    43  
    44  	busConfig := &eventbusv1alpha1.BusConfig{}
    45  	encodedBusConfigSpec := os.Getenv(common.EnvVarEventBusConfig)
    46  	if len(encodedBusConfigSpec) > 0 {
    47  		busConfigSpec, err := base64.StdEncoding.DecodeString(encodedBusConfigSpec)
    48  		if err != nil {
    49  			logger.Fatalw("failed to decode bus config string", zap.Error(err))
    50  		}
    51  		if err = json.Unmarshal(busConfigSpec, busConfig); err != nil {
    52  			logger.Fatalw("failed to unmarshal bus config object", zap.Error(err))
    53  		}
    54  	}
    55  	if busConfig.NATS != nil {
    56  		for _, trigger := range sensor.Spec.Triggers {
    57  			if trigger.AtLeastOnce {
    58  				logger.Warn("ignoring atLeastOnce when using NATS")
    59  				trigger.AtLeastOnce = false
    60  			}
    61  		}
    62  	}
    63  	ebSubject, defined := os.LookupEnv(common.EnvVarEventBusSubject)
    64  	if !defined {
    65  		logger.Fatalf("required environment variable '%s' not defined", common.EnvVarEventBusSubject)
    66  	}
    67  
    68  	hostname, defined := os.LookupEnv("POD_NAME")
    69  	if !defined {
    70  		logger.Fatal("required environment variable 'POD_NAME' not defined")
    71  	}
    72  
    73  	dynamicClient := dynamic.NewForConfigOrDie(restConfig)
    74  
    75  	logger = logger.With("sensorName", sensor.Name)
    76  	for name, value := range sensor.Spec.LoggingFields {
    77  		logger.With(name, value)
    78  	}
    79  
    80  	ctx := logging.WithLogger(signals.SetupSignalHandler(), logger)
    81  	m := metrics.NewMetrics(sensor.Namespace)
    82  	go m.Run(ctx, fmt.Sprintf(":%d", common.SensorMetricsPort))
    83  
    84  	logger.Infow("starting sensor server", "version", argoevents.GetVersion())
    85  	sensorExecutionCtx := sensors.NewSensorContext(kubeClient, dynamicClient, sensor, busConfig, ebSubject, hostname, m)
    86  	if err := sensorExecutionCtx.Start(ctx); err != nil {
    87  		logger.Fatalw("failed to listen to events", zap.Error(err))
    88  	}
    89  }