start

package
v0.0.0-...-41cd4ca Latest Latest
Warning

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

Go to latest
Published: Sep 10, 2022 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Start action.Action = func(topCtx context.Context, args []string) error {
	l := logger.WithField("func", "Start")
	l.Info("starting")
	l.Infof("args: %+v", args)

	roleList, err := gatherRoles(args)
	if err != nil {
		return err
	}

	ctx, cancel := context.WithCancel(topCtx)

	uptrace.ConfigureOpentelemetry(

		uptrace.WithServiceName(viper.GetString(config.Keys.ApplicationName)),
		uptrace.WithServiceVersion(viper.GetString(config.Keys.SoftwareVersion)),
	)

	defer func() {
		l.Info("closing uptrace")
		err := uptrace.Shutdown(context.Background())
		if err != nil {
			l.Errorf("closing uptrace: %s", err.Error())
		}
	}()

	l.Debug("creating clock")
	clockMod := clock.NewClock()

	l.Debug("creating database client")
	dbClient, err := bun.New(ctx)
	if err != nil {
		l.Errorf("db: %s", err.Error())
		cancel()

		return err
	}
	defer func() {
		err := dbClient.Close(ctx)
		if err != nil {
			l.Errorf("closing db: %s", err.Error())
		}
	}()

	l.Debug("creating redis client")
	kvClient, err := redis.New(ctx)
	if err != nil {
		l.Errorf("redis: %s", err.Error())
		cancel()

		return err
	}
	defer func() {
		err := kvClient.Close(ctx)
		if err != nil {
			l.Errorf("closing redis: %s", err.Error())
		}
	}()

	l.Debug("creating tokenizer")
	tokz, err := token.New()
	if err != nil {
		l.Errorf("create tokenizer: %s", err.Error())
		cancel()

		return err
	}

	l.Debug("creating logic module")
	logicMod, err := v1.New(ctx, clockMod, dbClient, kvClient, tokz)
	if err != nil {
		l.Errorf("logic: %s", err.Error())
		cancel()

		return err
	}

	l.Debug("creating runner module")
	runnerMod, err := faktory.New(logicMod)
	if err != nil {
		l.Errorf("runner: %s", err.Error())
		cancel()

		return err
	}
	logicMod.SetRunner(runnerMod)

	// create gemini server
	var geminiMod *gemini.Server
	if shouldStart(roleList, roleGemini) {
		l.Debug("creating gemini server")

		var err error
		geminiMod, err = newGemini(ctx, logicMod, tokz)
		if err != nil {
			l.Errorf("gemini: %s", err.Error())
			cancel()

			return err
		}
	}

	// create gemini server
	var httpServer *ihttp.Server
	if shouldStart(roleList, roleActivityPub) {
		l.Debug("creating http server")

		var err error
		httpServer, err = newHttpServer(
			ctx,
			logicMod,
			runnerMod,
		)
		if err != nil {
			l.Errorf("http server: %s", err.Error())
			cancel()

			return err
		}
	}

	errChan := make(chan error)

	stopSigChan := make(chan os.Signal, 1)
	signal.Notify(stopSigChan, syscall.SIGINT, syscall.SIGTERM)

	if shouldStart(roleList, roleGemini) {
		go func(s *gemini.Server, errChan chan error) {
			l.Debug("starting gemini server")
			err := s.Start()
			if err != nil {
				errChan <- fmt.Errorf("gemini server: %s", err.Error())
			}
		}(geminiMod, errChan)
	}

	if shouldStart(roleList, roleActivityPub) {
		go func(s *ihttp.Server, errChan chan error) {
			l.Debug("starting http server")
			err := s.Start()
			if err != nil {
				errChan <- fmt.Errorf("http server: %s", err.Error())
			}
		}(httpServer, errChan)
	}

	if shouldStart(roleList, roleWorker) {
		go func(c context.Context, s *faktory.Runner, errChan chan error) {
			l.Debug("starting worker")
			err := s.Start(c)
			if err != nil {
				errChan <- fmt.Errorf("worker: %s", err.Error())
			}
		}(ctx, runnerMod, errChan)
	}

	select {
	case sig := <-stopSigChan:
		l.Infof("got sig: %s", sig)
		cancel()
	case err := <-errChan:
		l.Fatal(err.Error())
		cancel()
	}

	<-ctx.Done()
	l.Infof("done")

	return nil
}

Start starts the server.

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