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