FlexDXCluster/HTTPServer.go

113 lines
2.8 KiB
Go
Raw Permalink Normal View History

2024-09-26 12:24:56 +07:00
package main
import (
2024-09-26 15:23:05 +07:00
"fmt"
2024-09-26 12:24:56 +07:00
"html/template"
"net/http"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
)
var tmpl *template.Template
2024-09-26 15:23:05 +07:00
var listNew = []New{}
type New struct {
DX string
Status string
}
2024-09-26 12:24:56 +07:00
type HTTPServer struct {
router *mux.Router
Log4OMRepo Log4OMContactsRepository
Repo FlexDXClusterRepository
Log *log.Logger
2024-09-26 15:23:05 +07:00
FlexClient FlexClient
2024-09-26 12:24:56 +07:00
}
2024-09-26 15:23:05 +07:00
func NewHTTPServer(cRepo Log4OMContactsRepository, fRepo FlexDXClusterRepository, fClient FlexClient, log *log.Logger) *HTTPServer {
2024-09-26 12:24:56 +07:00
gRouter := mux.NewRouter()
return &HTTPServer{
router: gRouter,
Log4OMRepo: cRepo,
Repo: fRepo,
Log: log,
2024-09-26 15:23:05 +07:00
FlexClient: fClient,
2024-09-26 12:24:56 +07:00
}
}
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")
2024-09-26 15:23:05 +07:00
s.router.HandleFunc("/new", s.GetNew).Methods("GET")
2024-09-26 12:24:56 +07:00
}
func (s *HTTPServer) StartHTTPServer() {
2024-09-26 15:23:05 +07:00
go func() {
for spot := range s.FlexClient.FlexSpotChan {
s.GetListofNew(spot)
}
}()
2024-09-26 12:24:56 +07:00
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) {
2024-09-26 15:23:05 +07:00
spots := s.Repo.GetAllSpots("20")
2024-09-26 12:24:56 +07:00
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)
}
2024-09-26 15:23:05 +07:00
func (s *HTTPServer) GetNew(w http.ResponseWriter, r *http.Request) {
tmpl.ExecuteTemplate(w, "new", listNew)
}
func (s *HTTPServer) GetListofNew(spot FlexSpot) {
new := New{}
new.DX = spot.DX
if spot.NewDXCC {
new.Status = fmt.Sprintf("New DXCC (%s) (%s)", spot.Band, spot.Mode)
} else if !spot.NewBand && spot.NewMode && spot.Mode != "" {
new.Status = fmt.Sprintf("New Mode (%s)", spot.Mode)
} else if spot.NewBand && spot.NewMode && spot.Mode != "" {
new.Status = fmt.Sprintf("New Band (%s) & Mode (%s)", spot.Band, spot.Mode)
}
if new.Status != "" {
if len(listNew) > 3 {
listNew = append(listNew[:0], listNew[1:]...)
}
listNew = append(listNew, new)
}
}