func main()

in sample-apps/single-req-app/main.go [95:145]


func main() {
	foo := newShortLivedCollector()
	prometheus.MustRegister(foo)

	entrypointMux := http.NewServeMux()
	entrypointMux.HandleFunc("/", entrypointHandler)
	entrypointMux.HandleFunc("/startup", startupProbeHandler)
	entrypointMux.HandleFunc("/liveness", livenessProbeHandler)

	promMux := http.NewServeMux()
	promMux.Handle("/metrics", promhttp.Handler())

	mainSrv := http.Server{
		Addr:    ":8000",
		Handler: entrypointMux,
	}
	promSrv := http.Server{
		Addr:    ":8080",
		Handler: promMux,
	}

	go func() {
		mainSrv.ListenAndServe()
	}()

	go func() {
		promSrv.ListenAndServe()
	}()

	// SIGINT handles Ctrl+C locally.
	// SIGTERM handles Cloud Run termination signal.
	signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
	// Receive output from signalChan.
	sig := <-signalChan
	log.Printf("single request app: %s signal caught", sig)

	// Timeout if waiting for connections to return idle.
	mainCtx, mainCancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer mainCancel()
	if err := mainSrv.Shutdown(mainCtx); err != nil {
		log.Printf("single request app: server shutdown failed: %+v", err)
	}

	promCtx, promCancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer promCancel()
	if err := promSrv.Shutdown(promCtx); err != nil {
		log.Printf("single request app: prom server shutdown failed: %+v", err)
	}

	log.Printf("single request app: shutdown complete")
}