func main()

in main.go [114:176]


func main() {
	err := parseFlags()
	if err != nil {
		log.Fatal(err)
	}

	if tlsMinVersionValue > 0 {
		if tlsCertFile == "" || tlsKeyFile == "" {
			log.Fatalf("-tls-min-version set but missing TLS cert and key files (-tls-cert and -tls-key)")
		}
	}

	if printVersionInfo {
		fmt.Printf("Elastic Package Registry version %v\n", version)
		os.Exit(0)
	}

	apmTracer := initAPMTracer()
	defer apmTracer.Close()

	logger, err := util.NewLogger(util.LoggerOptions{
		APMTracer: apmTracer,
		Level:     logLevel,
		Type:      logType,
	})
	if err != nil {
		log.Fatalf("Failed to initialize logging: %v", err)
	}
	defer logger.Sync()

	apmTracer.SetLogger(&util.LoggerAdapter{logger.With(zap.String("log.logger", "apm"))})

	config := mustLoadConfig(logger)
	if dryRun {
		logger.Info("Running dry-run mode")
		_ = initIndexer(context.Background(), logger, apmTracer, config)
		os.Exit(0)
	}

	logger.Info("Package registry started")
	defer logger.Info("Package registry stopped")

	initHttpProf(logger)

	server := initServer(logger, apmTracer, config)
	go func() {
		err := runServer(server)
		if err != nil && err != http.ErrServerClosed {
			logger.Fatal("error occurred while serving", zap.Error(err))
		}
	}()

	initMetricsServer(logger)

	stop := make(chan os.Signal, 1)
	signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
	<-stop

	ctx := context.Background()
	if err := server.Shutdown(ctx); err != nil {
		logger.Fatal("error on shutdown", zap.Error(err))
	}
}