app

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2024 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CLI = &cli.App{
	Commands: []*cli.Command{
		{
			Name:  "list",
			Usage: "List available buses",
			Action: func(*cli.Context) error {
				cfg, err := config.LoadDefaultConfig(context.TODO())
				if err != nil {
					return fmt.Errorf("Failed to configure aws %w", err)
				}

				eb := eventbridge.NewFromConfig(cfg)
				output, err := eb.ListEventBuses(context.TODO(), nil)
				if err != nil {
					return fmt.Errorf("Failed to list eventbuses %w", err)
				}

				headerFmt := color.New(color.FgGreen, color.Underline).SprintfFunc()
				columnFmt := color.New(color.FgYellow).SprintfFunc()

				tbl := table.New("Name", "ARN").WithWriter(os.Stdout)
				tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt)

				for i := range output.EventBuses {
					b := output.EventBuses[i]
					tbl.AddRow(*b.Name, *b.Arn)
				}
				tbl.Print()
				return nil
			},
		},
		{
			Name:  "listen",
			Usage: "Start to listen to all messages on a AWS eventbridge bus",
			Flags: []cli.Flag{
				&cli.StringFlag{
					Name:     "bus",
					Usage:    "Name of the eventbridge bus",
					Required: true,
				},
				&cli.BoolFlag{
					Name:  "verbose",
					Usage: "Get more verbose output",
					Value: false,
				},
			},
			Action: func(cCtx *cli.Context) error {
				theID := xid.New()

				slog.SetDefault(slog.Default().With("id", theID.String()))

				if cCtx.Bool("verbose") {
					slog.SetLogLoggerLevel(slog.LevelDebug)
				}

				cfg, err := config.LoadDefaultConfig(context.TODO())
				if err != nil {
					return fmt.Errorf("Failed to configure aws %w", err)
				}

				slog.Debug("initiating eventbus")
				bus, err := eb.NewBus(cfg, theID, cCtx.String("bus"))
				if err != nil {
					return err
				}
				defer bus.Cleanup(context.TODO())

				slog.Debug("initiating sqs")
				s, err := listen.NewSQS(cfg, theID)
				if err != nil {
					return fmt.Errorf("failed to start listener %w", err)
				}

				s.Listen(context.Background())

				defer s.Shutdown(context.TODO())

				err = bus.AttachSQS(context.Background(), s)
				if err != nil {
					return err
				}

				osSignal := make(chan os.Signal, 1)
				signal.Notify(osSignal, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)

				for {
					select {
					case sig := <-osSignal:
						slog.Info("received signal, shutdown initiated", "signal", sig.String())
						return nil
					}
				}
			},
		},
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL