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