package site import "net/http" func middlewares(h *handler, next http.Handler) http.Handler { return h.LoggingMiddleware(h.RequestsCounterMiddleware(next)) } func createRoutes(h *handler) map[string]http.Handler { routes := map[string]http.Handler{ "/static/": middlewares(h, http.HandlerFunc(h.FileServer)), "/": middlewares(h, http.HandlerFunc(h.Index)), "/ping": middlewares(h, http.HandlerFunc(h.Ping)), "/metrics": middlewares(h, http.HandlerFunc(h.Metrics)), "/healthz": middlewares(h, http.HandlerFunc(h.Healthz)), } return routes } func newRouter(handler *handler) http.Handler { mux := http.NewServeMux() for pattern, handler := range createRoutes(handler) { mux.Handle(pattern, handler) } return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if h, pattern := mux.Handler(r); pattern != "" { h.ServeHTTP(w, r) } else { middlewares(handler, http.HandlerFunc(handler.NotFound)).ServeHTTP(w, r) } }) }