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