package main import ( "html/template" "net/http" "github.com/gorilla/mux" log "github.com/sirupsen/logrus" ) var tmpl *template.Template type HTTPServer struct { router *mux.Router Log4OMRepo Log4OMContactsRepository Repo FlexDXClusterRepository Log *log.Logger } func NewHTTPServer(cRepo Log4OMContactsRepository, fRepo FlexDXClusterRepository, log *log.Logger) *HTTPServer { gRouter := mux.NewRouter() return &HTTPServer{ router: gRouter, Log4OMRepo: cRepo, Repo: fRepo, Log: log, } } func (s *HTTPServer) SetRoutes() { s.router.HandleFunc("/", s.Homepage) s.router.HandleFunc("/spots", s.GetSpots).Methods("GET") s.router.HandleFunc("/spotscount", s.GetSpotsCount).Methods("GET") s.router.HandleFunc("/spotters", s.GetSpotters).Methods("GET") } func (s *HTTPServer) StartHTTPServer() { tmpl, _ = template.ParseGlob("templates/*.html") s.SetRoutes() s.Log.Infof("starting HTTP server on %s:%s", Cfg.HTTPServer.Host, Cfg.HTTPServer.Port) err := http.ListenAndServe(Cfg.HTTPServer.Host+":"+Cfg.HTTPServer.Port, s.router) if err != nil { s.Log.Warn("cannot start HTTP server: ", err) } } func (s *HTTPServer) Homepage(w http.ResponseWriter, r *http.Request) { err := tmpl.ExecuteTemplate(w, "home.html", nil) if err != nil { s.Log.Error("error executing home template: ", err) } } func (s *HTTPServer) GetSpots(w http.ResponseWriter, r *http.Request) { spots := s.Repo.GetAllSpots("25") tmpl.ExecuteTemplate(w, "spot", spots) } func (s *HTTPServer) GetSpotsCount(w http.ResponseWriter, r *http.Request) { spots := s.Repo.GetAllSpots("0") count := len(spots) tmpl.ExecuteTemplate(w, "spotCount", count) } func (s *HTTPServer) GetSpotters(w http.ResponseWriter, r *http.Request) { spotters := s.Repo.GetSpotters() tmpl.ExecuteTemplate(w, "spotters", spotters) }