webapp

package
v0.0.0-...-eb23ef5 Latest Latest
Warning

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

Go to latest
Published: Aug 22, 2022 License: GPL-3.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Start action.Action = func(topCtx context.Context) error {
	l := logger.WithField("func", "Start")
	l.Info("starting")

	ctx, cancel := context.WithCancel(topCtx)

	uptrace.ConfigureOpentelemetry(
		uptrace.WithServiceName(viper.GetString(config.Keys.ApplicationName)+"-webapp"),
		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 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())
		}
	}()

	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())
		}
	}()

	httpClient, err := http.NewClient(ctx)
	if err != nil {
		l.Errorf("http client: %s", err.Error())
		cancel()

		return err
	}

	languageMod, err := language.New()
	if err != nil {
		l.Errorf("language: %s", err.Error())
		cancel()

		return err
	}

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

		return err
	}

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

		return err
	}

	l.Debug("creating http server")
	server, err := newHttpServer(
		ctx,
		dbClient,
		languageMod,
		logicMod,
		kvClient.RedisClient(),
		tokz,
	)
	if err != nil {
		l.Errorf("http server: %s", err.Error())
		cancel()

		return err
	}

	errChan := make(chan error)

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

	go func(s *http.Server, errChan chan error) {
		l.Debug("starting http server")
		err := s.Start()
		if err != nil {
			errChan <- fmt.Errorf("http server: %s", err.Error())
		}
	}(server, 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