github.com/googlecloudplatform/kubernetes-workshops@v0.0.0-20180501174420-d8199445b2c3/bundles/kubernetes-101/workshop/app/hello/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "net/http" 8 "os" 9 "os/signal" 10 "syscall" 11 12 "github.com/braintree/manners" 13 "github.com/GoogleCloudPlatform/kubernetes-workshops/bundles/kubernetes-101/workshop/app/handlers" 14 "github.com/GoogleCloudPlatform/kubernetes-workshops/bundles/kubernetes-101/workshop/app/health" 15 ) 16 17 const version = "1.0.0" 18 19 func main() { 20 var ( 21 httpAddr = flag.String("http", "0.0.0.0:80", "HTTP service address.") 22 healthAddr = flag.String("health", "0.0.0.0:81", "Health service address.") 23 ) 24 flag.Parse() 25 26 log.Println("Starting server...") 27 log.Printf("Health service listening on %s", *healthAddr) 28 log.Printf("HTTP service listening on %s", *httpAddr) 29 30 errChan := make(chan error, 10) 31 32 hmux := http.NewServeMux() 33 hmux.HandleFunc("/healthz", health.HealthzHandler) 34 hmux.HandleFunc("/readiness", health.ReadinessHandler) 35 hmux.HandleFunc("/healthz/status", health.HealthzStatusHandler) 36 hmux.HandleFunc("/readiness/status", health.ReadinessStatusHandler) 37 healthServer := manners.NewServer() 38 healthServer.Addr = *healthAddr 39 healthServer.Handler = handlers.LoggingHandler(hmux) 40 41 go func() { 42 errChan <- healthServer.ListenAndServe() 43 }() 44 45 mux := http.NewServeMux() 46 mux.HandleFunc("/", handlers.HelloHandler) 47 mux.Handle("/secure", handlers.JWTAuthHandler(handlers.HelloHandler)) 48 mux.Handle("/version", handlers.VersionHandler(version)) 49 50 httpServer := manners.NewServer() 51 httpServer.Addr = *httpAddr 52 httpServer.Handler = handlers.LoggingHandler(mux) 53 54 go func() { 55 errChan <- httpServer.ListenAndServe() 56 }() 57 58 signalChan := make(chan os.Signal, 1) 59 signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM) 60 61 for { 62 select { 63 case err := <-errChan: 64 if err != nil { 65 log.Fatal(err) 66 } 67 case s := <-signalChan: 68 log.Println(fmt.Sprintf("Captured %v. Exiting...", s)) 69 health.SetReadinessStatus(http.StatusServiceUnavailable) 70 httpServer.BlockingClose() 71 os.Exit(0) 72 } 73 } 74 }