func main()

in PetAdoptions/cdk/pet_stack/resources/microservices/petlistadoptions-go/main.go [62:137]


func main() {
	var (
		httpAddr = flag.String("http.addr", ":80", "HTTP Port binding")
	)

	flag.Parse()

	var logger log.Logger
	{
		logger = log.NewJSONLogger(os.Stderr)
		logger = log.With(logger, "ts", log.DefaultTimestampUTC)
		logger = log.With(logger, "caller", log.DefaultCaller)
	}

	var cfg Config
	{
		var err error
		cfg, err = fetchConfig()
		if err != nil {
			level.Error(logger).Log("exit", err)
			os.Exit(-1)
		}
	}

	var db *sql.DB
	{
		var err error
		var connStr string

		withPassword := true
		connStr, err = getRDSConnectionString(cfg.RDSSecretArn, withPassword)
		if err != nil {
			level.Error(logger).Log("exit", err)
			os.Exit(-1)
		}

		// OTEL does not instrument yet database/sql, falling back to the native
		// go sql interface
		// https://github.com/open-telemetry/opentelemetry-go-contrib/issues/5
		db, err = sql.Open("postgres", connStr)
		if err != nil {
			level.Error(logger).Log("exit", err)
			os.Exit(-1)
		}

		defer db.Close()
	}

	var s petlistadoptions.Service
	{

		safeConnStr, _ := getRDSConnectionString(cfg.RDSSecretArn, false)
		repo := petlistadoptions.NewRepository(db, logger, safeConnStr)
		s = petlistadoptions.NewService(logger, repo, cfg.PetSearchURL)
		s = petlistadoptions.NewInstrumenting(logger, s)
	}

	var h http.Handler
	{
		h = petlistadoptions.MakeHTTPHandler(s, logger)
	}

	errs := make(chan error)
	go func() {
		c := make(chan os.Signal)
		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
		errs <- fmt.Errorf("%s", <-c)
	}()

	go func() {
		logger.Log("transport", "HTTP", "addr", *httpAddr)
		errs <- http.ListenAndServe(*httpAddr, h)
	}()

	logger.Log("exit", <-errs)
}