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
}