summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2017-06-06 19:23:21 -0400
committerThibaut Horel <thibaut.horel@gmail.com>2017-06-06 19:23:21 -0400
commit4537376b9b9854fcf3b92d64a5337d155303c620 (patch)
treec71905aa2f1bc9f8acb353b1fa5d92edd67a485c
parentc0f04081e638e448af18e030ef00c10001908486 (diff)
downloadlastfm-api-4537376b9b9854fcf3b92d64a5337d155303c620.tar.gz
Shutting down webservers nicely
-rw-r--r--main.go71
1 files changed, 52 insertions, 19 deletions
diff --git a/main.go b/main.go
index 4f34f66..a7c9d2f 100644
--- a/main.go
+++ b/main.go
@@ -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()
}