only parse templates for the first requests (#2180)
* only parse templates for the first requests * fix race condition isse * parse all templates before start the new server * add comment for parseTemplates and remove unused code * remove unused type
This commit is contained in:
parent
e85c56518a
commit
474d9e7492
@ -34,6 +34,11 @@ type Server struct {
|
|||||||
server http.Server
|
server http.Server
|
||||||
|
|
||||||
templateDir string
|
templateDir string
|
||||||
|
templates struct {
|
||||||
|
home *template.Template
|
||||||
|
pageNotFound *template.Template
|
||||||
|
internalError *template.Template
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// commonPages returns templates that are required for everything.
|
// commonPages returns templates that are required for everything.
|
||||||
@ -46,7 +51,7 @@ func (s *Server) commonPages() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewServer creates new instance of offersweb server
|
// NewServer creates new instance of offersweb server
|
||||||
func NewServer(logger *zap.Logger, config Config, listener net.Listener) *Server {
|
func NewServer(logger *zap.Logger, config Config, listener net.Listener) (*Server, error) {
|
||||||
s := &Server{
|
s := &Server{
|
||||||
log: logger,
|
log: logger,
|
||||||
config: config,
|
config: config,
|
||||||
@ -65,7 +70,11 @@ func NewServer(logger *zap.Logger, config Config, listener net.Listener) *Server
|
|||||||
|
|
||||||
s.templateDir = filepath.Join(s.config.StaticDir, "pages")
|
s.templateDir = filepath.Join(s.config.StaticDir, "pages")
|
||||||
|
|
||||||
return s
|
if err := s.parseTemplates(); err != nil {
|
||||||
|
return nil, Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ServeHTTP handles index request
|
// ServeHTTP handles index request
|
||||||
@ -75,7 +84,15 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
files := append(s.commonPages(),
|
err := s.templates.home.ExecuteTemplate(w, "base", nil)
|
||||||
|
if err != nil {
|
||||||
|
s.log.Error("failed to execute template", zap.Error(err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseTemplates parses and stores all templates in server
|
||||||
|
func (s *Server) parseTemplates() (err error) {
|
||||||
|
homeFiles := append(s.commonPages(),
|
||||||
filepath.Join(s.templateDir, "home.html"),
|
filepath.Join(s.templateDir, "home.html"),
|
||||||
filepath.Join(s.templateDir, "refOffers.html"),
|
filepath.Join(s.templateDir, "refOffers.html"),
|
||||||
filepath.Join(s.templateDir, "freeOffers.html"),
|
filepath.Join(s.templateDir, "freeOffers.html"),
|
||||||
@ -83,51 +100,45 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
|||||||
filepath.Join(s.templateDir, "foModal.html"),
|
filepath.Join(s.templateDir, "foModal.html"),
|
||||||
)
|
)
|
||||||
|
|
||||||
home, err := template.New("landingPage").ParseFiles(files...)
|
s.templates.home, err = template.New("landingPage").ParseFiles(homeFiles...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.serveInternalError(w, req)
|
return Error.Wrap(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
err = home.ExecuteTemplate(w, "base", nil)
|
pageNotFoundFiles := append(s.commonPages(),
|
||||||
if err != nil {
|
|
||||||
s.log.Error("failed to execute template", zap.Error(err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Server) serveNotFound(w http.ResponseWriter, req *http.Request) {
|
|
||||||
files := append(s.commonPages(),
|
|
||||||
filepath.Join(s.templateDir, "page-not-found.html"),
|
filepath.Join(s.templateDir, "page-not-found.html"),
|
||||||
)
|
)
|
||||||
|
|
||||||
unavailable, err := template.New("page-not-found").ParseFiles(files...)
|
s.templates.pageNotFound, err = template.New("page-not-found").ParseFiles(pageNotFoundFiles...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.serveInternalError(w, req)
|
return Error.Wrap(err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internalErrorFiles := append(s.commonPages(),
|
||||||
|
filepath.Join(s.templateDir, "internal-server-error.html"),
|
||||||
|
)
|
||||||
|
|
||||||
|
s.templates.internalError, err = template.New("internal-server-error").ParseFiles(internalErrorFiles...)
|
||||||
|
if err != nil {
|
||||||
|
return Error.Wrap(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) serveNotFound(w http.ResponseWriter, req *http.Request) {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
|
||||||
err = unavailable.ExecuteTemplate(w, "base", nil)
|
err := s.templates.pageNotFound.ExecuteTemplate(w, "base", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("failed to execute template", zap.Error(err))
|
s.log.Error("failed to execute template", zap.Error(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) serveInternalError(w http.ResponseWriter, req *http.Request) {
|
func (s *Server) serveInternalError(w http.ResponseWriter, req *http.Request) {
|
||||||
files := append(s.commonPages(),
|
|
||||||
filepath.Join(s.templateDir, "internal-server-error.html"),
|
|
||||||
)
|
|
||||||
|
|
||||||
unavailable, err := template.New("internal-server-error").ParseFiles(files...)
|
|
||||||
if err != nil {
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
s.log.Error("failed to parse internal server error", zap.Error(err))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
err = unavailable.ExecuteTemplate(w, "base", nil)
|
|
||||||
|
err := s.templates.internalError.ExecuteTemplate(w, "base", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("failed to execute template", zap.Error(err))
|
s.log.Error("failed to execute template", zap.Error(err))
|
||||||
}
|
}
|
||||||
|
@ -596,11 +596,14 @@ func New(log *zap.Logger, full *identity.FullIdentity, db DB, config *Config, ve
|
|||||||
return nil, errs.Combine(err, peer.Close())
|
return nil, errs.Combine(err, peer.Close())
|
||||||
}
|
}
|
||||||
|
|
||||||
peer.Marketing.Endpoint = marketingweb.NewServer(
|
peer.Marketing.Endpoint, err = marketingweb.NewServer(
|
||||||
peer.Log.Named("marketing:endpoint"),
|
peer.Log.Named("marketing:endpoint"),
|
||||||
marketingConfig,
|
marketingConfig,
|
||||||
peer.Marketing.Listener,
|
peer.Marketing.Listener,
|
||||||
)
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errs.Combine(err, peer.Close())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return peer, nil
|
return peer, nil
|
||||||
|
Loading…
Reference in New Issue
Block a user