func newStandaloneCmd()

in pkg/cmdsetup/standalone.go [43:120]


func newStandaloneCmd(runners ...run.Unit) *cobra.Command {
	l := logger.GetLogger("bootstrap")
	ctx := context.Background()
	pipeline := queue.Local()
	metaSvc, err := embeddedserver.NewService(ctx)
	if err != nil {
		l.Fatal().Err(err).Msg("failed to initiate metadata service")
	}
	metricSvc := observability.NewMetricService(metaSvc, pipeline, "standalone", nil)
	pm := protector.NewMemory(metricSvc)
	propertySvc, err := property.NewService(metaSvc, pipeline, metricSvc)
	if err != nil {
		l.Fatal().Err(err).Msg("failed to initiate property service")
	}
	streamSvc, err := stream.NewService(metaSvc, pipeline, metricSvc, pm)
	if err != nil {
		l.Fatal().Err(err).Msg("failed to initiate stream service")
	}
	var srvMetrics *grpcprom.ServerMetrics
	srvMetrics.UnaryServerInterceptor()
	srvMetrics.UnaryServerInterceptor()
	measureSvc, err := measure.NewService(metaSvc, pipeline, nil, metricSvc, pm)
	if err != nil {
		l.Fatal().Err(err).Msg("failed to initiate measure service")
	}
	q, err := query.NewService(ctx, streamSvc, measureSvc, metaSvc, pipeline)
	if err != nil {
		l.Fatal().Err(err).Msg("failed to initiate query processor")
	}
	nr := grpc.NewLocalNodeRegistry()
	grpcServer := grpc.NewServer(ctx, pipeline, pipeline, metaSvc, grpc.NodeRegistries{
		MeasureNodeRegistry:  nr,
		StreamNodeRegistry:   nr,
		PropertyNodeRegistry: nr,
	}, metricSvc)
	profSvc := observability.NewProfService()
	httpServer := http.NewServer()

	var units []run.Unit
	units = append(units, runners...)
	units = append(units,
		pipeline,
		metaSvc,
		metricSvc,
		pm,
		propertySvc,
		measureSvc,
		streamSvc,
		q,
		grpcServer,
		httpServer,
		profSvc,
	)
	standaloneGroup := run.NewGroup("standalone")
	// Meta the run Group units.
	standaloneGroup.Register(units...)

	standaloneCmd := &cobra.Command{
		Use:     "standalone",
		Version: version.Build(),
		Short:   "Run as the standalone server",
		RunE: func(_ *cobra.Command, _ []string) (err error) {
			nodeID, err := common.GenerateNode(grpcServer.GetPort(), httpServer.GetPort())
			if err != nil {
				return err
			}
			logger.GetLogger().Info().Msg("starting as a standalone server")
			// Spawn our go routines and wait for shutdown.
			if err := standaloneGroup.Run(context.WithValue(context.Background(), common.ContextNodeKey, nodeID)); err != nil {
				logger.GetLogger().Error().Err(err).Stack().Str("name", standaloneGroup.Name()).Msg("Exit")
				os.Exit(-1)
			}
			return nil
		},
	}
	standaloneCmd.Flags().AddFlagSet(standaloneGroup.RegisterFlags().FlagSet)
	return standaloneCmd
}