diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2017-06-06 19:23:21 -0400 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2017-06-06 19:23:21 -0400 |
| commit | 4537376b9b9854fcf3b92d64a5337d155303c620 (patch) | |
| tree | c71905aa2f1bc9f8acb353b1fa5d92edd67a485c | |
| parent | c0f04081e638e448af18e030ef00c10001908486 (diff) | |
| download | lastfm-api-4537376b9b9854fcf3b92d64a5337d155303c620.tar.gz | |
Shutting down webservers nicely
| -rw-r--r-- | main.go | 71 |
1 files changed, 52 insertions, 19 deletions
@@ -1,13 +1,16 @@ package main import ( + "context" "database/sql" "encoding/hex" - "fmt" "html/template" "log" "net/http" - "net/http/httputil" + "os" + "os/signal" + "syscall" + "time" "github.com/gorilla/securecookie" ) @@ -46,34 +49,64 @@ func New() *App { func logg(fn http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - d, _ := httputil.DumpRequest(r, true) - fmt.Printf("--------------------------\n%s\n", d) + t := time.Now() r.ParseForm() fn(w, r) + log.Println(r.Method, r.URL.Path, time.Since(t)) } } +func (app *App) InitApiServer() *http.Server { + apiServer := new(http.Server) + sm := http.NewServeMux() + sm.HandleFunc("/", logg(app.mainHandler)) + sm.HandleFunc("/np", logg(app.nowPlayingHandler)) + sm.HandleFunc("/scrobble", logg(app.scrobbleHandler)) + //http.HandleFunc("/2.0/", logg(app.ApiHandler)) + apiServer.Addr = ":3001" + apiServer.Handler = sm + return apiServer +} + +func (app *App) InitWebServer() *http.Server { + webServer := new(http.Server) + sm := http.NewServeMux() + fs := http.FileServer(http.Dir("static")) + sm.Handle("/static/", http.StripPrefix("/static/", fs)) + sm.HandleFunc("/", logg(app.root)) + sm.HandleFunc("/callback", logg(app.callback)) + sm.HandleFunc("/login", logg(app.login)) + sm.HandleFunc("/settings", logg(app.settings)) + webServer.Addr = ":8000" + webServer.Handler = sm + return webServer +} + func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) app := New() + defer app.DB.Close() + + apiServer := app.InitApiServer() + webServer := app.InitWebServer() + var stop = make(chan os.Signal) + signal.Notify(stop, syscall.SIGKILL) + signal.Notify(stop, syscall.SIGINT) + signal.Notify(stop, syscall.SIGTERM) go func() { - sm := http.NewServeMux() - sm.HandleFunc("/", logg(app.mainHandler)) - sm.HandleFunc("/np", logg(app.nowPlayingHandler)) - sm.HandleFunc("/scrobble", logg(app.scrobbleHandler)) - //http.HandleFunc("/2.0/", logg(app.ApiHandler)) - http.ListenAndServe(":3001", sm) + <-stop + apiServer.Shutdown(context.Background()) + log.Println("Api server stopped") + webServer.Shutdown(context.Background()) + log.Println("Web server stopped") }() - app.TrackInfo("believe", "cher") + go func() { + log.Printf("Api server listening on http://127.0.0.1%s\n", apiServer.Addr) + apiServer.ListenAndServe() + }() - sm := http.NewServeMux() - fs := http.FileServer(http.Dir("static")) - sm.Handle("/static/", http.StripPrefix("/static/", fs)) - sm.HandleFunc("/", app.root) - sm.HandleFunc("/callback", app.callback) - sm.HandleFunc("/login", app.login) - sm.HandleFunc("/settings", app.settings) - http.ListenAndServe(":8000", sm) + log.Printf("Web server listening on http://127.0.0.1%s\n", webServer.Addr) + webServer.ListenAndServe() } |
