52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
|
|
package main
|
|
|
|
import "flag"
|
|
import "net/http"
|
|
import "time"
|
|
|
|
import "github.com/gorilla/mux"
|
|
import "github.com/justinas/alice"
|
|
import "github.com/sirupsen/logrus"
|
|
|
|
func LoggerMiddleware(h http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
|
startTime := time.Now().UTC()
|
|
h.ServeHTTP(writer, request)
|
|
log.WithFields(logrus.Fields{
|
|
"method": request.Method,
|
|
"path": request.URL.Path,
|
|
"duration_ms": time.Since(startTime).Milliseconds(),
|
|
}).Info("pageload")
|
|
})
|
|
}
|
|
|
|
func setupHttpRouter(staticdir string) http.Handler {
|
|
r := mux.NewRouter()
|
|
|
|
// This will serve files under
|
|
// http://localhost:8000/static/<filename>
|
|
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(staticdir))))
|
|
|
|
return r
|
|
}
|
|
|
|
func setupHttpServer() *http.Server {
|
|
var dir string
|
|
|
|
flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir")
|
|
flag.Parse()
|
|
|
|
router := setupHttpRouter(dir)
|
|
|
|
server := alice.New(LoggerMiddleware).Then(router)
|
|
|
|
listener := &http.Server{
|
|
Handler: server,
|
|
Addr: ":8000",
|
|
WriteTimeout: 15 * time.Second,
|
|
ReadTimeout: 15 * time.Second,
|
|
}
|
|
return listener
|
|
}
|